2017-09-25 23 views
1

私はpython 3.6でコードを書いており、そのコードのためのexeファイルを作りたいと思っています。私はcx_freezeを使っています。コードは間違っていませんが、私は問題がsetup.pyファイル内にあると思います。ここに私のコードは次のとおりです。cx_freeze in python 3.6

from tkinter import * 

root = Tk() 
root.title("test window") 
root.geometry('400x220+500+250') 
root.configure(background="dark gray") 

def submit(*args): 
    root.iconify() 
    popup_root_window = Toplevel() 
    popup_root_window.geometry('300x50+550+300') 
    popup_root_window.resizable(width=False, height=False) 
    popup_root_window.focus_force() 
    popup_root_window.grab_set() 
    popup_root_window_label = Label(popup_root_window, text="new window open successfully.") 
    popup_root_window_label.pack(anchor=CENTER, padx=10, pady=20) 

frame = Frame(root, bd=4, relief="raise", height=100, width=250) 
frame.pack(fill="both", padx=70, pady=35) 
frame.pack_propagate(0) 

submit_button = Button(frame, text="Submit", command=submit, width=10) 
submit_button.grid(row=0, column=0) 

cancel_button = Button(frame, text="Cancel", width=10) 
cancel_button.grid(row=0, column=1) 

root.mainloop() 

マイcx_freezeのsetup.pyファイルは、このようなものです:私はEXEファイルに私のスクリプトを変換すると

# setup file for cx_freeze 

import sys 
from cx_Freeze import setup, Executable 

base = None 
if sys.platform == "win32": 
    base = "Win32GUI" 

includes = ["atexit", "re"] 

build_exe_options = {"packages": ["os", "tkinter"], "includes": includes} 

setup(
    name = "testing", 
    version = "1.0", 
    description = "Testing of tkinter", 
    options = {"build_exe": build_exe_options}, 
    executables = [Executable("testing.py", base = base)] 
    ) 

、私は次のエラーを得ました。誰かがsetup.pyファイルの何が問題なのか教えていただけますか?

running build 
running build_exe 
Traceback (most recent call last): 
    File "setup.py", line 20, in <module> 
    executables = [Executable("tk1.py", base = base)] 
    File "C:\Python36\lib\site-packages\cx_Freeze\dist.py", line 349, in setup 
    distutils.core.setup(**attrs) 
    File "C:\Python36\lib\distutils\core.py", line 148, in setup 
    dist.run_commands() 
    File "C:\Python36\lib\distutils\dist.py", line 955, in run_commands 
    self.run_command(cmd) 
    File "C:\Python36\lib\distutils\dist.py", line 974, in run_command 
    cmd_obj.run() 
    File "C:\Python36\lib\distutils\command\build.py", line 135, in run 
    self.run_command(cmd_name) 
    File "C:\Python36\lib\distutils\cmd.py", line 313, in run_command 
    self.distribution.run_command(command) 
    File "C:\Python36\lib\distutils\dist.py", line 974, in run_command 
    cmd_obj.run() 
    File "C:\Python36\lib\site-packages\cx_Freeze\dist.py", line 219, in run 
    freezer.Freeze() 
    File "C:\Python36\lib\site-packages\cx_Freeze\freezer.py", line 621, in Freeze 
    self.finder = self._GetModuleFinder() 
    File "C:\Python36\lib\site-packages\cx_Freeze\freezer.py", line 340, in _GetModuleFinder 
    finder.IncludePackage(name) 
    File "C:\Python36\lib\site-packages\cx_Freeze\finder.py", line 653, in IncludePackage 
    module = self._ImportModule(name, deferredImports) 
    File "C:\Python36\lib\site-packages\cx_Freeze\finder.py", line 310, in _ImportModule 
    deferredImports, namespace = namespace) 
    File "C:\Python36\lib\site-packages\cx_Freeze\finder.py", line 403, in _InternalImportModule 
    parentModule, namespace) 
    File "C:\Python36\lib\site-packages\cx_Freeze\finder.py", line 416, in _LoadModule 
    namespace) 
    File "C:\Python36\lib\site-packages\cx_Freeze\finder.py", line 485, in _LoadPackage 
    self._LoadModule(name, fp, path, info, deferredImports, parent) 
    File "C:\Python36\lib\site-packages\cx_Freeze\finder.py", line 463, in _LoadModule 
    self._RunHook("load", module.name, module) 
    File "C:\Python36\lib\site-packages\cx_Freeze\finder.py", line 536, in _RunHook 
    method(self, *args) 
    File "C:\Python36\lib\site-packages\cx_Freeze\hooks.py", line 613, in load_tkinter 
    tclSourceDir = os.environ["TCL_LIBRARY"] 
    File "C:\Python36\lib\os.py", line 669, in __getitem__ 
    raise KeyError(key) from None 
KeyError: 'TCL_LIBRARY' 

私は私のsetup.pyファイルに次の2行を追加するとき、それはexeファイルの中に私のスクリプトに変換します。

os.environ['TCL_LIBRARY'] = r'C:\Python36\tcl\tcl8.6' 
os.environ['TK_LIBRARY'] = r'C:\Python36\tcl\tk8.6' 

exeファイルを実行すると、次のエラーが表示されます。

enter image description here

+1

Python 3では 'Tkinter'の名前が' tkinter'に変更されたため、Python 3.6のコードにすることはできません。 – skrx

+0

間違いをおかけして申し訳ありませんが、再度エラーを確認してください。 @skrx –

+0

[cx_freezeを使用してスクリプトを.exeに変換するときにtkinterを含める方法](https://stackoverflow.com/questions/43059408/how-to-include-tkinter-when-using-cx-freeze)の可能な複製-to-convert-script-to-exe) – Kos

答えて

0

あなたは、Tcl/Tkのライブラリフォルダを持っているが、あなただけのランタイムやDLLが不足しています。

ランタイムを取得するには、include_files引数も使用する必要があります。

指定したパスが正しい場合は、両方ともC:/python36/DLLs/に配置する必要があります。 tcl86t.dlltk86t.dllの両方が必要なので、それらをセットアップスクリプトに含めてください。これは次のように簡単です:

build_exe_options = {"packages": ["os", "tkinter"], "includes": includes, "include_files": ["C:/python36/DLLs/tcl86t.dll", "C:/python36/DLLs/tk86t.dll"]} 

This answer also relates to your problemです。

希望しました。私はちょうどこの質問を見つけた後半の答えについて申し訳ありません。