我正在使用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
库引起的,但我仍然不知道如何将它捆绑成二进制文件。
答案 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,”。