Cx_FreezeとTkinterを使用すると、次のメッセージが表示されます。
File "C:\Users\VergilTheHuragok\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 35, in <module>
import _tkinter # If this fails your Python may not be configured for Tk
ImportError: DLL load failed: The specified module could not be found.
注意すべき点:
これが私の現在のsetup.pyです:
from cx_Freeze import setup, Executable
import sys
build_exe_options = {"packages": ["files", "tools"]}
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup(name="Name",
version="1.0",
description="Description",
options={"build_exe": build_exe_options},
executables=[Executable("main.py", base=base)],
package_dir={'': ''},
)
私はインターネットの隅々から多くの解決策を試しました。含むがこれらに限定されません:
私のコンパイルbatファイルに以下を配置する(間違いなく正しいパス):
set TCL_LIBRARY=C:\Users\VergilTheHuragok\AppData\Local\Programs\Python\Python35-32\tcl\tcl8.6
set TK_LIBRARY=C:\Users\VergilTheHuragok\AppData\Local\Programs\Python\Python35-32\tcl\tk8.6
私のsetup.pyに以下を配置します:
options={"build_exe": {"includes": ["tkinter"]}}
include_files = [r"C:\Users\VergilTheHuragok\AppData\Local\Programs\Python\Python35-32\DLLs\tcl86t.dll",\
r"C:\Users\VergilTheHuragok\AppData\Local\Programs\Python\Python35-32\DLLs\tk86t.dll"]
(そしてはい、それらは何らかの方法でsetup()に含まれていました)
助けてくれてありがとう、それは大いに感謝しています。そして、はい、私はこのサイトでこの問題のほとんどすべての解決策を見てきました。問題が解決しないようですので、誰かが別の解決策を見つけるのを助けてくれることを願っています。
解決策を見つけました!
pythonディレクトリのDLLフォルダーから、コンパイルしようとしているmain.pyを含むビルドフォルダーに、tk86t.dllおよびtcl86t.dllファイルをコピーする必要がありました。
これは、
set TCL_LIBRARY=C:\Users\VergilTheHuragok\AppData\Local\Programs\Python\Python35\tcl\tcl8.6
set TK_LIBRARY=C:\Users\VergilTheHuragok\AppData\Local\Programs\Python\Python35\tcl\tk8.6
私のcompile.batの上部にあり、"include_files": ["tcl86t.dll", "tk86t.dll"]
setup.pyのbuild_exe_optionsで、トリックを実行したようです。
これが私の現在のsetup.pyです:
from cx_Freeze import setup, Executable
import sys
build_exe_options = {"packages": ["files", "tools"], "include_files": ["tcl86t.dll", "tk86t.dll"]}
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup(name="Name",
version="1.0",
description="Description",
options={"build_exe": build_exe_options},
executables=[Executable("main.py", base=base)],
package_dir={'': ''},
)
そして、これが私のcompile.batです(すべてのステップを表示するように更新されています)。
@echo off
set TCL_LIBRARY=C:\Users\VergilTheHuragok\AppData\Local\Programs\Python\Python36-32\tcl\tcl8.6
set TK_LIBRARY=C:\Users\VergilTheHuragok\AppData\Local\Programs\Python\Python36-32\tcl\tk8.6
RD /S /Q "C:\Users\VergilTheHuragok\Desktop\PythonProjectCompiled\bin"
mkdir "C:\Users\VergilTheHuragok\Desktop\PythonProjectCompiled\bin"
xcopy /s "C:\Users\VergilTheHuragok\AppData\Local\Programs\Python\Python36-32\DLLs\tcl86t.dll" "C:\Users\VergilTheHuragok\Desktop\PythonProjectCompiled\bin\tcl86t.dll"
xcopy /s "C:\Users\VergilTheHuragok\AppData\Local\Programs\Python\Python36-32\DLLs\tk86t.dll" "C:\Users\VergilTheHuragok\Desktop\PythonProjectCompiled\bin\tk86t.dll"
cd "C:\Users\VergilTheHuragok\Desktop\PythonProject\"
cxfreeze main.py --target-dir "C:\Users\VergilTheHuragok\Desktop\PythonProjectCompiled\bin" --target-name "launch.exe"
pause
この解決策を見つけました here 。
これらの問題を修正した後でも、cx_freeze
はpandas(つまりnumpy
)の依存関係をインポートできませんでした。これを修正するために、フォルダ全体を文字通りコピーしてコンパイルしようとした.py
ファイルのディレクトリ。実行可能ファイルは同じディレクトリにある必要があるため(スタンドアロンである必要はありません)、pandas
およびnumpy
。
この問題を解決するには、ファイル1.tcl86t.dll 2.tk86t.dllをこのパスC:\ Users\h280126\AppData\Local\Programs\Python\Python36-32\DLLsからコピーし、.exeパスCに配置します。\Users\h280126\PycharmProjects\my_tool\build\exe.win32-3.6正常に動作しています:)