【问题标题】:Pyinstaller - unable to compile script to be completely standalonePyinstaller - 无法将脚本编译为完全独立
【发布时间】:2016-07-17 02:28:33
【问题描述】:

我正在使用 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 

我的规范文件如下所示:

# -*- 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 时,一切都运行良好,但我希望它完全独立于系统库。所以用户不必更新或安装任何东西。我正在寻找一种如何将这种依赖关系“捆绑”到应用程序本身的方法,但我不知道哪个/如何。

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

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

【问题讨论】:

    标签: python user-interface pyinstaller wxwidgets


    【解决方案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”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      • 2012-12-15
      • 2019-01-19
      • 2021-09-11
      • 2013-09-19
      • 2019-09-08
      • 1970-01-01
      相关资源
      最近更新 更多