【问题标题】:PyInstaller created exc. does not run on virtualbox with ubuntuPyInstaller 创建了 exc。不能在带有 ubuntu 的 virtualbox 上运行
【发布时间】:2013-07-16 07:58:17
【问题描述】:

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

   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) 蟒蛇2.7.3

谢谢大家 给主持人: 抱歉,如果这个问题不属于这里,我想如果 PyInstaller 执行的某些操作会导致此错误,那么其他人可能会因此而受益。

编辑: 在 vb 上与 OpenSUSE 的结果相同...... 编辑: 做了三件事,它成功了...... 1).从 oracles 网站安装 virtualbox。 2)。执行了更新,事情似乎神奇地起作用了!

【问题讨论】:

    标签: python virtualbox pyinstaller


    【解决方案1】:

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

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

    当我发现您的问题时,我正试图找到另一半的答案(使其始终有效)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-23
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      相关资源
      最近更新 更多