【发布时间】:2018-07-09 22:01:02
【问题描述】:
目标(最终目标): 我想为我的应用程序创建一个包含 NumPy 和 SciPy 依赖项的独立可执行 Python 脚本(仅一个文件)。
背景: 据我了解,要在 Python 中创建可执行脚本 - 有三个可用选项:
- PyInstaller
- Py2exe
- CxFreeze
我继续尝试 Py2exe 进行开发。 CxFreeze 似乎不支持单文件选项(来自文档here)。我也考虑过使用 PyInstaller 的选项,但遇到了有关缺少 DLL 的问题(类似于发现的 here)。即使在我的笔记本电脑中安装了 Microsoft Visual C++ 2010 Redistributable Package 后,该问题仍然存在。
我按照教程使用 Py2exe here 并能够获得一个虚拟脚本可执行文件(Hello World!)工作。但是,我尝试重新修改特定于我的应用程序的 setup.py 脚本以包含 numpy 和 scipy 依赖项(见下文):
from distutils.core import setup
import py2exe,sys,numpy,scipy
sys.argv.append('py2exe')
setup(
console=['Application.py'],
options={
'py2exe': {
'includes':['numpy','scipy','scipy.integrate','scipy.special.*','scipy.linalg.*'],
'bundle_files':1,
'compressed':True
}
},
zipfile=None)
这是我在尝试运行脚本时收到的错误:
Traceback (most recent call last):
File "C:\Program Files\JetBrains\PyCharm 2018.1.4\helpers\pydev\pydev_run_in_console.py", line 52, in run_file
pydev_imports.execfile(file, globals, locals) # execute the script
File "C:\Program Files\JetBrains\PyCharm 2018.1.4\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Users/prest/PycharmProjects/Application/setup.py", line 15, in <module>
zipfile=None
File "C:\Python34\lib\distutils\core.py", line 149, in setup
dist.run_commands()
File "C:\Python34\lib\distutils\dist.py", line 955, in run_commands
self.run_command(cmd)
File "C:\Python34\lib\distutils\dist.py", line 974, in run_command
cmd_obj.run()
File "C:\Users\prest\PycharmProjects\Application\venv\lib\site-packages\py2exe\distutils_buildexe.py", line 188, in run
self._run()
File "C:\Users\prest\PycharmProjects\Application\venv\lib\site-packages\py2exe\distutils_buildexe.py", line 267, in _run
builder.analyze()
File "C:\Users\prest\PycharmProjects\Application\venv\lib\site-packages\py2exe\runtime.py", line 164, in analyze
mf.import_hook(modname)
File "C:\Users\prest\PycharmProjects\Application\venv\lib\site-packages\py2exe\mf3.py", line 120, in import_hook
module = self._gcd_import(name)
File "C:\Users\prest\PycharmProjects\Application\venv\lib\site-packages\py2exe\mf3.py", line 274, in _gcd_import
return self._find_and_load(name)
File "C:\Users\prest\PycharmProjects\Application\venv\lib\site-packages\py2exe\mf3.py", line 337, in _find_and_load
raise ImportError(name)
ImportError: scipy.linalg.*
这些是我使用的与我的应用程序相关的版本:
- Python 3.4
- NumPy 1.14.5
- SciPy 1.1.0
问题: 任何人都可以就我收到此错误的原因以及解决此问题的任何后续步骤提供任何见解吗?感谢您的意见!
谢谢,
普雷斯顿
【问题讨论】:
-
我已经很久没有这样做了,但是您不必在
includes中列出您正在使用的所有scipy模块,而不仅仅是scipy吗? (或者也许你可以做scipy.*或类似的东西;我不记得了……) -
嗨abamert,我相信你必须包含不同的scipy模块(来自here)。我尝试从提供的帖子(
scipy.*、scipy.integrate、scipy.special.*等)中尝试对includes参数进行不同的排列,但我收到了raise ImportError(name)错误。嗯…… -
好的,所以发布的这个问题有一个简单的解决方案,但这只会导致您遇到新问题?是否要关闭此问题并发布包含该新问题详细信息的新问题,或编辑此问题取决于您,但无论哪种方式,您都需要向我们提供这些细节,而不是这些细节,以得到新问题的答案。
-
我用新问题的详细信息更新了这篇文章。
标签: python python-3.x numpy scipy py2exe