在Raspbian系统运行PyQt4程序失败,导入QtGui触发非法指令错误
我之前在树莓派上折腾PyQt4的时候也踩过这个坑——QtCore能正常导入,可QtGui、QtTest这些模块一导入就直接炸,还给Fatal Python error: Illegal指令,甚至重启Shell,Windows上跑明明好好的,当时头都大了。后来折腾出几个靠谱的解决办法,分享给你:
1. 别用pip装PyQt4,用系统包管理器才是正道
树莓派的ARM架构比较特殊,pip上的PyQt4很多是针对x86架构编译的,强行装上去跑就会触发非法指令。而Raspbian自带的PyQt4包是专门适配ARM的,兼容性拉满。
操作步骤:
- 先把pip装的PyQt4卸掉:
pip uninstall PyQt4 -y - 用apt-get安装系统原生版本:
sudo apt-get update sudo apt-get install python-pyqt4
装完之后再打开Python Shell试试导入QtGui,大概率能正常运行了。
2. 核对Python版本和PyQt4的对应关系
树莓派默认自带Python2.7和Python3,如果你搞混了版本,比如用Python3却装了Python2的PyQt4,肯定会出问题。
先确认你用的Python版本:
python --version # 或者看Python3的版本 python3 --version
- 如果是Python2,装
python-pyqt4;如果是Python3,就装对应的包:sudo apt-get install python3-pyqt4
之后用对应版本的Python启动Shell再测试导入。
3. 更新系统依赖库,排除旧版本兼容性问题
有时候系统底层库太旧,也会导致PyQt4的GUI模块加载失败。先把系统更到最新:
sudo apt-get update && sudo apt-get upgrade -y
更新完成后重启树莓派,再试一次导入操作。
4. 长远考虑:直接迁移到PyQt5
PyQt4早就停止维护了,Raspbian的新版本对它的支持越来越敷衍。如果你的代码改动量不大,建议直接转PyQt5,不仅兼容性更好,后续遇到问题也更容易找到解决方案。
安装PyQt5的命令:
# Python2版本 sudo apt-get install python-pyqt5 # Python3版本 sudo apt-get install python3-pyqt5
代码里的导入也要对应调整,比如把from PyQt4 import QtGui改成from PyQt5 import QtWidgets(PyQt5把GUI组件统一放到QtWidgets模块里了),其他相关的API也做一下适配,这样在树莓派上跑基本不会有问题。
内容的提问来源于stack exchange,提问作者Zeds Zen

