【发布时间】:2015-12-23 16:26:52
【问题描述】:
我正在尝试将我的 Python 程序转换为适用于 Windows 和 Linux 的独立可执行文件。 PyInstaller 似乎是完成这项任务的一个很好的解决方案。它在 Windows 下很容易转换,但是我不能让它在 Linux 上工作(在两台不同的 Ubuntu 机器上探测它)。原来的 Python 程序可以简化为简单的两行代码:
from numpy import log
print '%8.6f' % log(5)
这样调用时效果很好:
anton@op:~/bin$ python test_numpy.py
1.609438
在 PyInstaller 中编译后,它给了我这个错误:
anton@op:~/bin/dist/test_numpy$ ./test_numpy
Traceback (most recent call last):
File "<string>", line 3, in <module>
File "/usr/local/lib/python2.7/dist-packages/PyInstaller-2.1-py2.7.egg/PyInstaller/loader/pyi_importers.py", line 270, in load_module
exec(bytecode, module.__dict__)
File "/home/anton/bin/build/test_numpy/out00-PYZ.pyz/numpy", line 153, in <module>
File "/usr/local/lib/python2.7/dist-packages/PyInstaller-2.1-py2.7.egg/PyInstaller/loader/pyi_importers.py", line 270, in load_module
exec(bytecode, module.__dict__)
File "/home/anton/bin/build/test_numpy/out00-PYZ.pyz/numpy.add_newdocs", line 13, in <module>
File "/usr/local/lib/python2.7/dist-packages/PyInstaller-2.1-py2.7.egg/PyInstaller/loader/pyi_importers.py", line 270, in load_module
exec(bytecode, module.__dict__)
File "/home/anton/bin/build/test_numpy/out00-PYZ.pyz/numpy.lib", line 8, in <module>
File "/usr/local/lib/python2.7/dist-packages/PyInstaller-2.1-py2.7.egg/PyInstaller/loader/pyi_importers.py", line 270, in load_module
exec(bytecode, module.__dict__)
File "/home/anton/bin/build/test_numpy/out00-PYZ.pyz/numpy.lib.type_check", line 11, in <module>
File "/usr/local/lib/python2.7/dist-packages/PyInstaller-2.1-py2.7.egg/PyInstaller/loader/pyi_importers.py", line 270, in load_module
exec(bytecode, module.__dict__)
File "/home/anton/bin/build/test_numpy/out00-PYZ.pyz/numpy.core", line 6, in <module>
ImportError: cannot import name multiarray
所以问题与未正确导入 numpy 库有关。
我已尝试按照 pyinstaller 的建议添加隐藏挂钩,但没有任何帮助,而且我总是收到此错误。有什么想法吗?
【问题讨论】:
-
单文件可执行文件不是 linux 方式。制作一个带有依赖项的 deb 包。
-
感谢您的评论,但我不会制作单文件版本。我知道这不是完美的方法,但我需要制作一个多平台易于安装的单机版。为什么 PyInstaller 不接受 numpy 的任何想法?我什至尝试重新安装python和numpy,但仍然是同样的问题。
标签: python linux numpy pyinstaller