当前位置: 首页 > 面试题库 >

当使用cx_Freeze和tkinter时,我得到:“ DLL加载失败:找不到指定的模块。” (Python 3.5.3)

章琛
2023-03-14
问题内容

当使用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.

注意事项:

  • 我想使用Python 3+(当前使用3.5.3,32位)。不管实际如何,都不在乎特定版本。
  • 我的项目有多个文件需要编译。据我所知,这让我留下了cx_Freeze或Nuitka。努伊特卡有自己的问题。
  • 我正在使用Windows 10家庭版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",  
      opthtml" target="_blank">ions={"build_exe": build_exe_options},  
      executables=[Executable("main.py", base=base)],  
      package_dir={'': ''},  
      )

我已经尝试了来自互联网各个角落的许多解决方案。包括但不仅限于:

  • 多个版本的python(以及相应的cx_Freeze / Tkinter版本)
  • 32位和64位版本
  • 用easygui替换Tkinter(显然easygui需要Tkinter来工作)
  • 检查PATH变量
  • 重新启动计算机(不知道我的期望)
  • 卸载其他版本的python并修复正确的版本
  • 将以下内容放入我的编译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()中)

感谢您的帮助,我们将不胜感激。是的,我已经在该站点上查看了针对该问题的几乎所有解决方案。希望有人可以帮助我找到另一种解决方案,因为我的问题似乎一直存在。


问题答案:

找到了解决方案!

我必须将tk86t.dll和tcl86t.dll文件从python目录的DLLs文件夹复制到带有尝试编译的main.py的build文件夹中。

这与

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

我在这里找到了这个解决方案。



 类似资料: