PyInstaller创建了exc。不使用ubuntu在virtualbox上运行

时间:2013-05-06 21:27:03

标签: python virtualbox pyinstaller

我使用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)。执行了更新,事情似乎神奇地起作用了!

1 个答案:

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

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