2 回答

TA贡献1798条经验 获得超3个赞
我在cx_Freeze
5.1.1的安装脚本中看到以下潜在问题:
您正在使用
numpy
(并且matplotlib
取决于numpy
)。为了cx_Freeze
正确冻结numpy
,需要将其添加到选项packages
列表中build_exe
。对于
cx_Freeze
5.1.1 版,TCL/TK DLL 需要包含在lib
构建目录的子目录中。您可以通过将元组传递给列表选项(source, destination)
的相应条目来实现include_files
。此外,动态查找 TCL/TK DLL 的位置会更安全。
总之,尝试在您的安装脚本中进行以下修改:
PYTHON_INSTALL_DIR = os.path.dirname(sys.executable)
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')
buildOptions = dict(
packages = ["numpy"],
excludes = [],
includes = ["idna.idnadata"],
include_files=[(os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),
os.path.join('lib', 'tk86t.dll')),
(os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'),
os.path.join('lib', 'tcl86t.dll'))]
)
如果此修改仍然不起作用,请从最小的tkinter应用程序开始,例如通过注释掉所有导入,但tkinter在您发布的示例应用程序中并使其在您的系统上运行。然后一个接一个地重新添加您需要的模块 ( numpy, matplotlib, ...) 并检查未冻结和冻结的应用程序是否在每一步都正常工作。例如,您可以向示例应用程序添加一个消息框,并在那里打印您导入的每个模块的版本。
添加回答
举报