构建含Qt5与PyQt5的pyqtdeploy-sysroot时遇x11extras模块未知错误
解决pyqtdeploy构建时
Project ERROR: Unknown module(s) in QT: x11extras问题 我来帮你一步步排查这个X11Extras模块找不到的问题,毕竟我也踩过类似的Qt模块依赖坑:
1. 先确认你的Qt编译时是否包含了X11Extras模块
你用的是自己编译的Qt(从sysroot里的Qt/bin/qmake路径来看),这大概率是问题根源——Qt默认编译不一定会包含所有可选模块,X11Extras就属于这类非核心模块:
- 先运行命令:
/home/frans/_HOME/2011_pyqt/docker_home/demo/sysroot-linux-64/Qt/bin/qmake -query QT_INSTALL_LIBS,找到Qt的库目录 - 检查该目录下是否存在
libQt5X11Extras.so(Linux动态库)或对应的静态库文件 - 再检查Qt的modules配置目录(一般在
Qt/mkspecs/modules)有没有qt_lib_x11extras.pri文件
如果这两个文件都缺失,说明你编译Qt时没启用X11Extras模块,需要重新编译Qt,在configure阶段加上-qt-x11extras参数明确开启该模块。
2. 验证系统X11依赖是否被Qt正确识别
虽然你安装了libqt5x11extras5-dev这类包,但自己编译的Qt可能不会自动关联系统预编译模块:
- 编译Qt前,确保系统基础X11依赖完全到位:Fedora上要装
libX11-devel、libXext-devel;Debian/Ubuntu上要装libx11-dev、libxext-dev,缺了这些,Qt的configure会自动跳过X11相关模块 - 可以在Qt configure阶段加上
-system-x11extras参数,强制让Qt使用系统安装的X11Extras模块
3. 检查pyqtdeploy配置是否强制启用了X11Extras
有时候pyqtdeploy的demo配置默认启用了该模块,但你的Qt环境不支持,也会触发错误:
- 进入demo目录下的
sysroot.json或对应配置文件,查看是否有强制启用x11extras的选项,如果有,先注释掉,完成基础构建后再逐步添加模块 - 执行
sip-install时,可临时加上--exclude-modules PyQt5.QtX11Extras参数,跳过该模块的绑定生成,先验证其他部分能否正常构建
4. 确认工具链版本兼容性
pyqtdeploy 3.x系列对sip、PyQt-builder的版本有要求,要确保和Qt5.15.x匹配:
- 运行
pip3 show sip pyqt-builder pyqtdeploy确认版本,pyqtdeploy 3.x需要sip 5.x以上、PyQt-builder 1.10.x以上 - 如果版本不匹配,卸载现有包后重新安装兼容版本:
pip3 install sip==5.5.0 pyqt-builder==1.12.2 pyqtdeploy==3.1.1,这些版本和Qt5.15.x兼容性较好
5. 手动测试qmake的模块检测
直接用你的qmake测试X11Extras模块是否可用,排除sip的干扰:
- 创建临时目录,新建
test.pro文件,内容如下:
QT += core gui x11extras TARGET = test TEMPLATE = app SOURCES += main.cpp
- 在该目录下运行
/home/frans/_HOME/2011_pyqt/docker_home/demo/sysroot-linux-64/Qt/bin/qmake test.pro,如果还是报错,那就是Qt本身的问题,回到第一步重新编译Qt即可
按照这个顺序排查,最常见的情况就是Qt编译时没包含X11Extras模块,毕竟它不是Qt核心模块,默认可能不开启。
内容的提问来源于stack exchange,提问作者frans
相关产品推荐
相关产品推荐

