我正在使用 pyinstaller 将 python 脚本转换为 Ubuntu (14.04) 中的二进制文件。我使用 Canopy (Enthought) 来管理所有 python 库。
该代码使用networkx、numpy 和scipy。这是我的规格文件:
# -*- mode: python -*-
a = Analysis(['main_test.py'],
pathex=['/home/sean/Desktop/prog',],
hiddenimports=[],
hookspath=None,
runtime_hooks=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='main_test',
debug=False,
strip=None,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=None,
upx=True,
name='main_test')
一开始我得到了错误:
ImportError: libmkl_gf.so: cannot open shared object file:
No such file or directory
然后我找到了.so库
/home/sean/Canopy/appdata/canopy-1.3.0.1715.rh5-x86/lib
我手动将几个 .so 文件复制到 dist 目录中。
但是,我得到了另一个错误:
File "/home/sean/Enthought/Canopy_32bit/User/lib/python2.7/site-
packages/PyInstaller/loader/pyi_importers.py", line 409, in load_module
module = imp.load_module(fullname, fp, filename, self._c_ext_tuple)
File "_ufuncs.pyx", line 1, in init scipy.special._ufuncs
(scipy/special/_ufuncs.c:21824)
ImportError: No module named _ufuncs_cxx
我该如何修复这个错误?我应该如何修改规范文件来添加这些库和模块?
Edit:
我找到了解决方案。我现在的问题是:如何修改规范文件以添加 .so 库?现在我必须手动将一些 .so 文件复制到 dist 目录...
Edit2
事实证明我必须将其添加到COLLECT
:
a.binaries + ["libmkl_gf.so" ,
"/home/sean/Canopy/appdata/canopy-1.3.0.1715.rh5-x86/lib/libmkl_gf.so",
"binaries"]
有没有简单的方法可以找到隐藏的导入或库?
Thanks