При использовании 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  

Я нашел это решение здесь.


image

чтобы решить эту проблему, просто скопируйте файлы 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 он работает нормально :)