安装PyQt5后导入PyQt4模块出现Segmentation Fault问题
解决PyQt4与PyQt5冲突导致的Segmentation Fault问题
这种PyQt版本冲突引发的段错误我在Debian/Ubuntu系发行版里碰到过不少次,尤其是当你混合使用apt和pip安装不同版本的PyQt时,很容易出现共享库或模块路径冲突的问题。针对你的情况,试试下面的步骤:
1. 彻底卸载pip安装的PyQt5
首先把可能干扰的PyQt5完全清理掉:
- 执行卸载命令:
pip3 uninstall -y pyqt5 - 检查并删除残留的PyQt5文件(如果有的话):
(注:sip是PyQt依赖的库,PyQt5的sip版本可能和PyQt4的不兼容,所以一并清理)sudo rm -rf /usr/local/lib/python3.5/dist-packages/PyQt5/ sudo rm -rf /usr/local/lib/python3.5/dist-packages/sip*
2. 重新修复系统安装的PyQt4
由于PyQt5的安装可能破坏了系统PyQt4的文件,用apt重新安装相关包来修复:
sudo apt-get --reinstall install python3-pyqt4 python3-pyqt4.qtopengl python3-pyqt4.qtwebkit python3-sip
3. 确保系统PyQt4的路径优先级
Python加载模块时会按sys.path的顺序查找,要保证系统apt安装的PyQt4路径(/usr/lib/python3/dist-packages/)在pip安装的路径(/usr/local/lib/python3.5/dist-packages/)前面:
- 打开Python3交互环境,执行:
import sys print(sys.path) - 如果
/usr/lib/python3/dist-packages/在后面,可以通过设置环境变量调整:
要是想永久生效,可以把这条命令加到export PYTHONPATH="/usr/lib/python3/dist-packages/:$PYTHONPATH"~/.bashrc或~/.profile里。
4. 测试导入是否正常
打开Python3,依次测试:
import PyQt4.QtCore import PyQt4.QtGui import PyQt4.Qt
如果没有再出现Segmentation Fault,说明问题解决了。
额外建议:隔离不同版本的PyQt
如果之后需要同时使用PyQt4和PyQt5,强烈建议用虚拟环境隔离:
- 创建两个独立的虚拟环境,一个用于PyQt4(依赖系统
apt安装的包),另一个用于PyQt5(用pip安装),这样两个版本的PyQt和依赖库完全分开,不会再出现冲突。
内容的提问来源于stack exchange,提问作者Wolphyrus Imperius
相关产品推荐
相关产品推荐

