pyinstaller 导入 scipy 模块

Posted

技术标签:

【中文标题】pyinstaller 导入 scipy 模块【英文标题】:pyinstaller importing scipy module 【发布时间】:2018-02-08 00:16:43 【问题描述】:

使用 scipy 模块的小 Python 脚本可以完美执行,但是当使用 pyinstaller 编译独立可执行文件时,可执行文件会失败。细节: Windows 10 python 2.7.10 pyinstaller 3.3.1 错误信息是:

C:\Users\barry\Desktop\Testing>TestScipy
Traceback (most recent call last):
  File "TestScipy.py", line 15, in <module>
    from scipy import stats
  File "c:\python27\Lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 396, in load_module
exec(bytecode, module.__dict__)
  File "site-packages\scipy\stats\__init__.py", line 343, in <module>
  File "c:\python27\Lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 396, in load_module
exec(bytecode, module.__dict__)
  File "site-packages\scipy\stats\stats.py", line 169, in <module>
  File "c:\python27\Lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 396, in load_module
exec(bytecode, module.__dict__)
  File "site-packages\scipy\special\__init__.py", line 640, in <module>
  File "c:\python27\Lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 687, in load_module
module = imp.load_module(fullname, fp, filename, ext_tuple)
ImportError: DLL load failed: The specified module could not be found.
[9476] Failed to execute script TestScipy

如何确保 pyinstaller 正确加载 scipy?

【问题讨论】:

【参考方案1】:

您可以将scipy.stats 添加到.spec 文件中的hiddenimports 列表中,然后再次运行PyInstaller (pyinstaller myfile.spec)。或者您可以在 PyInstaller 命令中添加以下选项:

pyinstaller [options] --hiddenimport=scipy.stats myfile.py

【讨论】:

apogalacticon 提出的解决方案不起作用。可执行文件生成与上面完全相同的错误。是否需要指定 scipy.stats 模块的路径? 您能否尝试将 scipy 添加到 .py 文件中的导入列表中?像这样:import scipy(下一行)from scipy import stats 这会产生同样的错误吗? 这两行从一开始就在脚本中。顺便说一句,感谢您的帮助。 看起来失败可能与 site-packages\scipy\special_init_.py 的第 640 行有关。在最新版本的 scipy 中,这指的是 numpy ufuncs。您可能想尝试的几件事 - 更新 scipy 和 numpy(如果您并不特别需要这些已弃用的版本),请检查哪个模块无法加载到 site-packages\scipy\special_init_.py 文件(上述错误消息中的第 640 行)并确保它包含在您的系统中。 我在原始帖子之前更新了 Scipy 和 Numpy。我在 numpy 或 scipy 目录中找不到任何称为 unfuncs 的内容。在 numpy\lib 中有 ufunclike.py 文件【参考方案2】:

pyinstaller 查找 scipy.stats 的问题最终取决于所使用的 Python 安装: Mac OSX:10.13 中的原生 python 没有出现问题。 Windows 10:使用 Anaconda python 解决了这个问题。 Ubuntu Linux 16.10:使用 Anaconda python 解决了这个问题。

【讨论】:

以上是关于pyinstaller 导入 scipy 模块的主要内容,如果未能解决你的问题,请参考以下文章

pyinstaller 找不到自定义导入的模块

使用 pyinstaller 编译 python 脚本后没有名为 'scipy.spatial.transform._rotation_groups 的模块

python 中 使用 pyinstaller 打包的exe程序如何调用外部模块?

Python - 在 setup.py 安装之前和之后导入包模块

Python - 导入新模块时出现问题 - libgmail

Python零基础入门篇 · 41:内置模块的使用二:pyinstaller模块(打包py文件以及更换图标)hashlib模块(加密)