CentOS8下Python3.9虚拟环境导入QtWebEngineWidgets缺失libQt5QmlModels.so.5错误
问题原因
- 动态链接库默认搜索路径未包含虚拟环境私有目录:CentOS 8的系统ld动态链接器默认不会扫描Python虚拟环境内site-packages下的第三方库路径,即便对应so文件存在也无法定位。
- PyQt5 对应Python3.9的pip包rpath配置异常:Python3.9版本对应的PyQt5 pip安装包编译时未正确配置运行时搜索路径(rpath),无法自动指向自身携带的Qt依赖库目录;而Python3.6/3.8对应的PyQt5版本包rpath配置正常,因此无该问题。
- QT_DEBUG_PLUGINS参数不生效的原因:报错发生在Python import阶段的动态库加载环节,还未进入Qt插件加载流程,因此该调试参数不会产生额外输出。
- 全局环境正常的原因:虚拟环境外安装的PyQt5要么通过系统包管理器安装,依赖库路径已提前写入系统动态库配置;要么全局pip安装时自动注册了库路径,因此可以正常定位。
解决方案
按生效范围从临时到永久排序,按需选择即可:
- 单次临时生效:运行程序前手动添加库路径到环境变量
export LD_LIBRARY_PATH=venv/lib64/python3.9/site-packages/PyQt5/Qt5/lib:$LD_LIBRARY_PATH # 此时再执行导入或者程序启动命令即可正常运行
- 虚拟环境永久生效:修改虚拟环境激活脚本,打开
venv/bin/activate文件,在文件末尾追加上述export语句,后续每次执行source venv/bin/activate激活环境时会自动配置库路径,无需手动执行。 - 系统级永久生效:适合固定路径的虚拟环境使用,执行以下操作:
- 新建动态库配置文件:
sudo vim /etc/ld.so.conf.d/pyqt5-venv.conf - 写入虚拟环境PyQt5库的绝对路径,例如:
/home/你的用户名/你的项目目录/venv/lib64/python3.9/site-packages/PyQt5/Qt5/lib - 刷新系统动态库缓存:
sudo ldconfig
- 版本降级方案:如果不想修改环境配置,可直接安装rpath配置正常的PyQt5版本组合:
pip install PyQt5==5.15.4 PyQt5-sip==12.9.0 PyQtWebEngine==5.15.4
内容的提问来源于stack exchange,提问作者Robe
相关产品推荐
相关产品推荐

