所以我正在尝试使用以下代码编译名为“File.py”的python脚本:
from cx_Freeze import setup, Executable
# Define packages needed(not builtin)
packages = ['scipy' , 'numpy']
options = {
'build_exe': {
'packages': packages,
},
}
setup(name='Monitor',
version = '0.8',
description = 'Monitors stuff.',
options = options,
executables = [Executable("File.py")])
“File.py”只使用scipy和numpy,我已将其包含在packages变量中。但是,在编译并运行File.exe之后,我收到错误:“ModuleNotFoundError:没有名为'scipy.spatial.ckdtree'的模块”。我使用的是python 3.6和cx_Freeze 6(支持python 3.6)。如何让cx_Freeze包含所有必要的模块?
答案 0 :(得分:1)
尝试提供库的实际地址。因此,找到scipy和numpy文件的位置以及包中的内容,包括以下内容:r"C:\Users\yourname\AppData\Local\Programs\Python\Python36\DLLs\tcl86t.dll",
r"C:\Users\yourname\AppData\Local\Programs\Python\Python36\DLLs\tk86t.dll",
答案 1 :(得分:0)
可能已经死了,但我会投入我的两分钱,这些年来,scipy 与 cx_Freeze 结合遇到了一些这样的问题。我无法在 SO 上找到有关此问题的文档。
首先,当您运行 File.exe 时,请在出现错误时检查对话框中的完整堆栈跟踪。 ModuleNotFoundError 是您的症状,但根本原因在于哪个文件正在尝试加载模块,通常是 scipy 中某处的 __init__.py 文件。
其次,转到该文件并将正在加载的模块名称与包名称和别名进行比较。您正在寻找模块名称或模块路径方面的差异。例如,我遇到的一个 ckdtree 加载问题是 __init__.py 试图加载 'ckdtree',但分发中的模块是 'cKDTree' 或者有一个大写字母,而不应该是一个。更改尝试加载模块的文件中的大小写可解决此问题。