Ubuntu18.04下cx_Freeze打包含cv2的Python程序调用cv2.imshow崩溃求助
问题根因
从QT_DEBUG_PLUGINS=1的输出可定位核心错误:cv2 内置的Qt xcb平台插件libqxcb.so所依赖的libQt5XcbQpa动态库未被cx_Freeze自动收集到构建目录中,导致插件初始化失败。
解决步骤
- 定位本地缺失的依赖文件路径
执行命令查找目标库位置:find / -name "libQt5XcbQpa*" 2>/dev/null
通常该文件位于Python环境的cv2安装目录下,路径类似:<Python环境路径>/lib/python3.7/site-packages/cv2/qt/lib/ - 修改cx_Freeze构建脚本,手动纳入cv2的Qt相关依赖
替换原有构建脚本为如下内容:import sys from cx_Freeze import setup, Executable import os import cv2 # 自动定位cv2内置的Qt资源根目录 cv2_qt_root = os.path.join(os.path.dirname(cv2.__file__), "qt") build_exe_options = { "packages": ["os", "cv2", "numpy"], "excludes": [], # 手动复制cv2的Qt依赖库、插件目录到构建输出 "include_files": [ (os.path.join(cv2_qt_root, "lib"), "lib/cv2/qt/lib"), (os.path.join(cv2_qt_root, "plugins"), "lib/cv2/qt/plugins") ] } setup( name="test", version="0.1", description="My GUI application!", options={"build_exe": build_exe_options}, executables=[Executable("cv2_test.py")] ) - 重新执行构建
运行命令生成可执行文件:python setup.py build - 运行前配置Qt插件搜索路径
进入构建输出目录,设置插件路径后启动程序,避免路径识别错误:export QT_QPA_PLATFORM_PLUGIN_PATH=./lib/cv2/qt/plugins/platforms ./cv2_test
常见补充处理
- 若运行时仍提示其他xcb相关动态库缺失,对照调试日志中提示的
*.so文件名,查找本地源文件路径后,添加到include_files的复制规则中即可。 - 目标运行的Ubuntu 18.04设备需安装基础xcb运行依赖,执行
sudo apt install libxcb-xinerama0 libxcb-cursor0即可,无需单独安装Python相关包。
内容的提问来源于stack exchange,提问作者drulludanni
相关产品推荐
相关产品推荐

