1

我使用 PyInstaller 从我使用此命令编写的 GUI 脚本(使用 wx.python)创建可执行文件...

   python /home/torosean/pyinstaller/pyinstaller.py -F -w My_GUI_login_simplified.py

我可以在没有任何问题的主机上运行可执行文件,方法是 cd-ing 到 dist 文件夹并运行...

 ./My_GUI_login_simplified

现在,当我在 ubuntu 中测试可执行文件(使用虚拟框)时,我得到如下所示的错误。我想在几个操作系统上测试可执行文件,然后再把它交给我的同事,最好是在 ubuntu 上,然后再在 vb 上的 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 网站安装了 virtualbox。2)。执行了更新,事情似乎神奇地起作用了!

4

1 回答 1

2

我可以给你一半的答案...

当您编写的应用程序依赖于 libGL 时会发生这种情况,但 pyinstaller 在打包“二进制文件”时并未包含它。

在 pyinstaller "spec" 文件中,您需要定义其他库并将它们附加到分析步骤返回的二进制文件列表中。在我的应用程序中,我做了以下事情:

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 的系统上(如果您的系统是最新的而目标系统不是最新的,反之亦然),那么您将收到类似的错误......因此“一半一个答案”

当我发现你的问题时,我试图找到另一半的答案(让它始终有效)。

于 2013-07-15T23:58:17.433 回答