我使用PyInstaller从我使用此命令编写的GUI脚本(使用wx.python)创建可执行文件...
python /home/torosean/pyinstaller/pyinstaller.py -F -w My_GUI_login_simplified.py
我可以在主机上运行可执行文件,无需任何问题,可以进入dist文件夹并运行...
./My_GUI_login_simplified
现在,当我在ubuntu中测试可执行文件时(使用虚拟框),我得到如下所示的错误。我想在几个操作系统上测试可执行文件,然后再将它交给我的同事,最好是在ubuntu上,然后再在mac中再次使用。无论如何这里是错误。
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/torosean/pyinstaller/PyInstaller/loader/pyi_importers.py", line 270, in load_module
File "/home/torosean/Documents/python_funcs/uploader/build/My_GUI_login_simplified/out00-PYZ.pyz/wx", line 45, in <module>
File "/home/torosean/pyinstaller/PyInstaller/loader/pyi_importers.py", line 270, in load_module
File "/home/torosean/Documents/python_funcs/uploader/build/My_GUI_login_simplified/out00-PYZ.pyz/wx._core", line 4, in <module>
File "/home/torosean/pyinstaller/PyInstaller/loader/pyi_importers.py", line 409, in load_module
ImportError: /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1: undefined symbol: _glapi_tls_Dispatch
现在我的问题是?
1)。这是一个与PyInstaller如何将脚本编译成可执行文件有关的问题。换句话说,从显示的错误中可以说出一个错误,如果PyInstaller制作了exec的话。 (我个人并不“觉得”就是这样,但我不确定)?
2)。这是一个虚拟的盒子/ ubuntu问题吗?关于如何修复它的任何建议,到目前为止我还没有找到任何有用的东西。
3)。对于从python脚本创建可执行文件的人来说,如何测试可执行文件,使用虚拟机还是有更好的东西?
任何建议都会非常感激。 眼镜: 主机操作系统(Fedora 18 64位) 客户操作系统(ubuntu 12.04 LTS 64位) 虚拟机:虚拟机(4.2.12) python 2.7.3
谢谢大家 主持人: 对不起,如果这个问题不属于这里,我想如果有一些PyInstaller会导致这个错误,那么其他人可能会从中受益。
编辑: 与vb上的OpenSUSE相同的结果.... 编辑: 做了三件事,它起作用了...... 1)。从oracles网站安装虚拟机。 2)。执行了更新,事情似乎神奇地起作用了!
答案 0 :(得分:2)
我可以给你一半答案......
当您编写的应用程序依赖于libGL时会发生这种情况,但是当它打包“二进制”时,pyinstaller没有包含它。
在pyinstaller“spec”文件中,您需要定义其他库&amp;将它们附加到Analysis步骤返回的二进制文件列表中。在我的申请中,我做了以下事情:
additionalLibs = []
additionalLibs.append( ("libGL.so.1", "/usr/lib64/libGL.so.1", 'BINARY') )
# yada yada
a = Analysis(['myApp.py'],
pathex=['/path/to/myAppDir'],
hiddenimports=[],
hookspath=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
a.binaries + additionalLibs,
a.zipfiles,
a.datas,
name=os.path.join('dist', 'myApp'),
icon="myApp.ico",
debug=False,
strip=None,
upx=True,
console=console )
这将在您的打包二进制文件中包含libGL - 这对于没有libGL.so.1或具有兼容的libGL.so.1的所有系统都很有效。在具有不兼容的libGL.so.1的系统上(如果您的系统是最新的并且目标系统不是,或反之亦然),那么您将得到类似的错误...因此“半个答案“
当我找到你的问题时,我试图找到另一半的答案(让它始终有效)。