即使使用 tcl86t.dll 和 tk86t,使用cx_Freeze时也能获得"ImportError: DLL load failed: The specified module could no



我正在尝试使用 cx_Freeze 5.1.1. 将.py文件转换为.exe,但每次尝试运行该文件时都会弹出一个ImportError: DLL load failed。根据此处和此处建议的解决方案,我将 tcl86t.dll 和 tk86t.dll 添加到包含的文件列表中。它们显示在构建文件夹中,但错误消息不断弹出。

这是我的 setup.py:

import sys
import os
from cx_Freeze import setup, Executable
os.environ["TCL_LIBRARY"] = r"C:/Users/Name/AppData/Local/Programs/Python/Python36-32/tcl/tcl8.6"
os.environ["TK_LIBRARY"] = r"C:/Users/Name/AppData/Local/Programs/Python/Python36-32/tcl/tk8.6"

base = "Win32GUI" if sys.platform=="win32" else None

build_exe_options = {"packages": ["winsound", "random", "time", "tkinter", "math"],
"include_files": ['tcl86t.dll',
'tk86t.dll']}
setup(
name = "Game",
author = "Name",
description = "game description",
options = {"build_exe": build_exe_options},
executables = [Executable("game.py", base=base)]
)

我使用的是Python 3.6.3和Windows 10。任何帮助将不胜感激!

cx_Freeze版本 5.1.1 中,包含的模块位于构建目录的子目录lib中。tcl86t.dlltk86t.dllDLL显然也需要移动到那里。

您可以通过对setup.py脚本进行以下修改来执行此操作:

build_exe_options = {"packages": ["winsound", "random", "time", "tkinter", "math"],
"include_files": [('tcl86t.dll', os.path.join('lib', 'tcl86t.dll')),
('tk86t.dll', os.path.join('lib', 'tk86t.dll'))]}

如果在导入模块时发生这种类型的错误,您也可以这样做: 在您的 setup.py 中添加以下内容:

build_exe_options = {
"packages": [],
'include_files': [],
'include_msvcr': True ## This is important

}

相关内容

最新更新