Pyinstaller - 无法将脚本编译为完全独立的

时间:2016-03-29 13:34:12

标签: python user-interface pyinstaller wxwidgets

我正在使用wxPython编写一个带GUI的应用程序。我有两台带有CentOS 7的机器。第一台是构建机器,另一台是干净的。构建机器在逻辑上已经安装了源代码编译的所有内容。我想实现我的应用程序将在任何CentOS 7机器上运行而没有任何依赖性。所以,这是问题所在。

源代码编译完成,但是当我尝试在干净的机器上运行二进制文件时,我在启动时遇到以下错误:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/PyInstaller/loader/pyimod03_importers.py", line 389, in load_module
  File "gui.py", line 12, in <module>
  File "/usr/lib/python2.7/site-packages/PyInstaller/loader/pyimod03_importers.py", line 389, in load_module
  File "site-packages/wx-2.8-gtk2-unicode/wx/__init__.py", line 45, in <module>
  File "/usr/lib/python2.7/site-packages/PyInstaller/loader/pyimod03_importers.py", line 389, in load_module
  File "site-packages/wx-2.8-gtk2-unicode/wx/_core.py", line 4, in <module>
  File "/usr/lib/python2.7/site-packages/PyInstaller/loader/pyimod03_importers.py", line 546, in load_module
ImportError: /tmp/_MEI6Ni7CP/libX11.so.6: undefined symbol: xcb_poll_for_reply64
main returned -1 

我的spec文件如下所示:

# -*- mode: python -*-

block_cipher = None

a = Analysis(['main.py'],
             pathex=['/home/user/gui'],
             binaries=None,
             datas=[('images/icon.png', 'images'), ('images/logo.png', 'images'), ('images/head.jpg', 'images'), ('images/step_background.png', 'images')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)

pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='gui',
          debug=False,
          strip=False,
          upx=True,
          console=True ) # Only for debug

注意:当我在干净的机器上运行yum update时,一切运行正常,但我希望它完全独立于系统库。因此用户不必更新或安装任何东西。我正在寻找一种方法如何捆绑&#39;这依赖于应用程序本身,但我不知道哪一个/如何。

有什么方法可以解决这个问题吗? 谢谢

编辑: 很可能这是由旧的/遗失的libxcb库引起的,但我仍然不知道如何将它捆绑成二进制文件。

1 个答案:

答案 0 :(得分:1)

我最近遇到了同样的问题。

Pyinstaller排除了libxcb库。 检查PyInstaller / depend / dylib.py - 你会发现:

  

libxcb经常更改ABI(例如:在Ubuntu LTS版本之间)和   是libxcb-dri经常更改ABI(例如:在Ubuntu LTS之间)   并且通常作为图形堆栈的依赖项安装   无论如何。无需捆绑它。

...或检查此提交,但尚未进入pyinstaller: https://github.com/pyinstaller/pyinstaller/commit/4a6d74a13122b763e99f97995fbbb1c6967769bb

尝试在PyInstaller / depend / dylib.py中删除“r'/ libxcb.so .. *':1,”。