同一虚拟环境中cv2与PyQt5共存导入报错的解决求助
问题:Ubuntu 20.04虚拟环境中cv2与PyQt5共存时的导入错误
环境配置
- 系统:Ubuntu 20.04.5 LTS
- 虚拟环境:Anaconda(Python 3.7)
- 依赖安装方式:
- conda安装
opencv==4.6.0 - pip安装
pyqt5==5.15.9
- conda安装
- 当前系统libstdc++.so.6版本:6.0.29
报错情况
1. 先导入QtCore再导入cv2
代码:
from PyQt5 import QtCore import cv2
报错信息:
ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /home/pc/anaconda3/envs/MatchNMix_env/lib/python3.7/site-packages/../../libopencv_gapi.so.406)
2. 先导入cv2再导入QtCore
代码:
import cv2 from PyQt5 import QtCore
报错信息:
ImportError: /home/pc/anaconda3/envs/MatchNMix_env/lib/python3.7/site-packages/PyQt5/QtCore.abi3.so: undefined symbol: _ZdaPvm, version Qt_5
解决方案
方案1:通过conda统一安装PyQt5
pip安装的PyQt5与conda安装的opencv依赖库版本不兼容,改用conda安装PyQt5:
- 卸载现有PyQt5:
pip uninstall pyqt5 -y
- conda安装对应版本PyQt5:
conda install pyqt=5.15.9 -c conda-forge
- 重新测试两种导入顺序。
方案2:升级系统libstdc++库
Ubuntu 20.04默认libstdc++缺少GLIBCXX_3.4.30,从虚拟环境提取高版本库替换:
- 复制虚拟环境中的高版本libstdc++:
cp /home/pc/anaconda3/envs/MatchNMix_env/lib/libstdc++.so.6.0.30 /lib/x86_64-linux-gnu/
- 更新系统软链接:
cd /lib/x86_64-linux-gnu sudo rm libstdc++.so.6 sudo ln -s libstdc++.so.6.0.30 libstdc++.so.6
注意:操作前备份原软链接,避免影响系统其他程序。
方案3:设置环境变量优先加载虚拟环境库
运行脚本前指定LD_LIBRARY_PATH,让系统优先使用虚拟环境的依赖库:
export LD_LIBRARY_PATH=/home/pc/anaconda3/envs/MatchNMix_env/lib:$LD_LIBRARY_PATH
或在Python脚本开头添加:
import os os.environ['LD_LIBRARY_PATH'] = '/home/pc/anaconda3/envs/MatchNMix_env/lib:' + os.environ.get('LD_LIBRARY_PATH', '')
之后再导入cv2和PyQt5。
方案4:降级opencv到兼容版本
opencv4.6.0依赖较高版本libstdc++,降级到适配Ubuntu 20.04的版本:
- 卸载现有opencv:
conda uninstall opencv -y
- 安装opencv4.5.5:
conda install opencv=4.5.5 -c conda-forge
- 测试导入是否正常。
内容的提问来源于stack exchange,提问作者Awal
相关产品推荐
相关产品推荐

