При использовании CX Freeze и tkinter я получаю: "ошибка загрузки DLL: указанный модуль не найден."(Python 3.5.3)
при использовании cx_Freeze и Tkinter мне выдается сообщение:
File "C:UsersVergilTheHuragokAppDataLocalProgramsPythonPython35-32libtkinter__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.
обратите внимание:
- Я хочу использовать Python 3+ (В настоящее время используется 3.5.3, 32-бит). Не заботьтесь о конкретной версии, что бы ни работало.
- мой проект имеет несколько файлов, которые мне нужно скомпилировать. Насколько я могу судить, это оставляет меня с cx_Freeze или Nuitka. Nuitka имели свои собственные проблемы.
- я использую Windows 10 Home Edition, 64-бит
вот мой текущий 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={'': ''},
)
Я пробовал много решений со всех уголков интернета. В том числе, но не ограничиваясь:
- несколько версий python (и соответствующие версии cx_Freeze/Tkinter)
- 32-разрядные и 64-разрядные версии
- замена Tkinter на easygui (по-видимому, easygui нуждается в Tkinter для работы)
- проверка пути переменные
- перезагрузка компьютера (не знаю, что я ожидал)
- удаление других версий python и восстановление правильной версии
-
размещение следующего в моем файле компиляции bat (определенно правильные пути):
set TCL_LIBRARY=C:UsersVergilTheHuragokAppDataLocalProgramsPythonPython35-32tcltcl8.6 set TK_LIBRARY=C:UsersVergilTheHuragokAppDataLocalProgramsPythonPython35-32tcltk8.6
размещение следующего в моем setup.py:
options={"build_exe": {"includes": ["tkinter"]}}
- С:
include_files = [r"C:UsersVergilTheHuragokAppDataLocalProgramsPythonPython35-32DLLstcl86t.dll",
r"C:UsersVergilTheHuragokAppDataLocalProgramsPythonPython35-32DLLstk86t.dll"]
(и да, они были включены в setup () так или иначе)
Спасибо за любую помощь, это очень ценится. И да, я просмотрел почти все решения этой проблемы на этом сайте. Надеюсь, кто-то может помочь мне найти еще одно решение, так как моя проблема кажется настойчивой.
2 ответов
нашел решение!
мне пришлось скопировать tk86t.dll и tcl86t.dll файлы из папки DLL моего каталога python в папку сборки с main.py я пытался скомпилировать.
это, в сочетании с наличием
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
в верхней части моей компиляции.летучая мышь, и в том числе"include_files": ["tcl86t.dll", "tk86t.dll"]
в моем build_exe_options в setup.py похоже, фокус удался.
вот мой текущий 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={'': ''},
)
и вот моя компиляция.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
Я нашел это решение здесь.
чтобы решить эту проблему, просто скопируйте файлы 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 он работает нормально :)