私は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ファイルを実行すると、次のエラーが表示されます。
Python 3では 'Tkinter'の名前が' tkinter'に変更されたため、Python 3.6のコードにすることはできません。 – skrx
間違いをおかけして申し訳ありませんが、再度エラーを確認してください。 @skrx –
[cx_freezeを使用してスクリプトを.exeに変換するときにtkinterを含める方法](https://stackoverflow.com/questions/43059408/how-to-include-tkinter-when-using-cx-freeze)の可能な複製-to-convert-script-to-exe) – Kos