lubuntu20.04下auto-py-to-exe打包Qt程序找不到xcb插件如何解决?
问题原因与解决办法
ldd命令作用说明
ldd是Linux系统原生的动态库依赖检查工具,执行ldd libqxcb.so的作用是扫描libqxcb.so这个Qt平台插件依赖的所有动态链接库,确认每个依赖是否都能在系统路径中找到、是否存在版本缺失。从你提交的输出可以确认系统全局的libqxcb.so本身依赖是完整的,问题不属于系统库缺失。
核心错误原因
你用的auto-py-to-exe底层基于PyInstaller实现打包,打包过程中没有自动把你Python虚拟环境中对应版本的Qt platform插件目录打包到输出目录,导致程序运行时找不到对应版本的xcb插件。你之前软链接全局Qt插件的操作不生效,是因为全局Qt版本和你虚拟环境中安装的PyQt/PySide依赖的Qt版本不一致。
解决步骤
- 第一步:清理之前的错误操作,避免污染系统目录
sudo rm -rf /usr/bin/platforms
- 第二步:手动拷贝对应版本的插件目录到输出路径
首先找到你开发用的虚拟环境内的Qt plugins路径,如果你用的是PyQt5,路径格式如下(替换为你实际的虚拟环境路径、Python版本):/home/saltz/你的项目路径/venv/lib/python3.8/site-packages/PyQt5/Qt/plugins/platforms
如果你用的是PySide2,将路径中的PyQt5替换为PySide2即可。
执行拷贝命令,把整个platforms目录复制到你打包输出的output目录中,和main可执行文件放在同一级:
cp -r 上述的platforms目录完整路径 /home/saltz/Bureau/70 5 applications Qt/test/output/
- 第三步:临时测试运行
拷贝完成后执行以下命令测试运行:
cd /home/saltz/Bureau/70 5 applications Qt/test/output export QT_QPA_PLATFORM_PLUGIN_PATH=./platforms ./main
- 第四步:打包时自动植入依赖(一劳永逸)
下次打包时在auto-py-to-exe的配置界面找到附加文件选项,添加上述的platforms目录,设置输出路径为./platforms,重新打包后生成的可执行文件就可以直接双击运行。 - 可选:如果上述操作完成后仍报错,执行以下命令安装系统层面缺失的xcb相关依赖包:
sudo apt update sudo apt install -y libxcb-xinerama0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xkb1 libxkbcommon-x11-0
内容的提问来源于stack exchange,提问作者Sebastien ANTUNES
相关产品推荐
相关产品推荐

