由于开发需要在ubuntu 20.04 RK3568平台上面使用PyQt5来运行GUI软件,整个软件的环境如下:python3.8 PyQt5 5.14.1版本
firefly@firefly:/usr/bin$ pip list
Package Version
---------------------- --------------------
blinker 1.4
certifi 2019.11.28
chardet 3.0.4
command-not-found 0.3
cryptography 2.8
Cython 0.29.33
dbus-python 1.2.16
distro 1.4.0
entrypoints 0.3
httplib2 0.14.0
idna 2.8
keyring 18.0.1
launchpadlib 1.10.13
lazr.restfulclient 0.14.2
lazr.uri 1.0.3
netifaces 0.10.4
oauthlib 3.1.0
onboard 1.4.1
pip 20.0.2
pycairo 1.16.2
PyGObject 3.36.0
PyJWT 1.7.1
PyQt5 5.14.1
pyserial 3.5
python-apt 2.0.0+ubuntu0.20.4.8
PyYAML 5.3.1
requests 2.22.0
requests-unixsocket 0.2.0
SecretStorage 2.3.1
setuptools 45.2.0
simplejson 3.16.0
sip 4.19.21
six 1.14.0
ssh-import-id 5.10
ubuntu-advantage-tools 27.10
urllib3 1.25.8
wadllib 1.3.3
wheel 0.34.2
从PyQt5中import QtGui报错误ImportError: /usr/lib/python3/dist-packages/PyQt5/QtGui.cpython-38-aarch64-linux-gnu.so: undefined symbol: _ZTI18QOpenGLTimeMonitor, version Qt_5。
经过百度查找到Qt官方的wiki有类似解决办法:Qt for Python/Considerations - Qt Wiki
上面的意思就是说需要安装pyside2-es2 package, 我以为是需要安装pyside2包。
参考下面的博文安装pyside2(2条消息) 树莓派(armv7l,arm32)buster配置Python虚拟环境、安装PyQt5、安装PySide2_树莓派pyqt5开发_DEDSEC_Roger的博客-CSDN博客
安装PySide2的正确方式
sudo apt install pyside2*
sudo apt install python3-pyside2*
相信我,这是最快捷的方法,使用pip是不行的,因为PySide系列(2,6)没有给arm平台编译wheel。另外,PySide6在树莓派的系统源里没有
经过以上操作成功的安装了pyside2软件包,并且在python环境中可以import pyside2,但是在使用PyQt5 import QtGui时依然报上面的错误。看来上面的操作全部白费。要接着研究安装pyside2-es2 package。
思考了几天,上面的操作说明在RK3568平台上安装的PyQt5软件包中缺少一些动态库,可能是由当初发布的PyQt5程序(ARM64平台)编译时,缺少了相关组件导致的。那么需要使用找到PyQt5的源码进行编译安装,同时也在找到教程:特别说明以下操作全部在RK3568平台上进行。(50条消息) ARM64平台上安装PyQt5环境【包括error: Qt::ItemDataRole is not a class or namespace解决方案】_arm pyqt5_雪中奇侠的博客-CSDN博客
RK3568平台上python是3.8,删除已经安装的pyqt5.14.1, 使用apt remove python3-pyqt即可,删除sip。
匹配python3.8的pyQt程序是5.15.2,PyQt5版本需与SIP版本对应。这两个版本可以从以下网址下载。
SIP | 4.19.25下载(https://www.riverbankcomputing.com/static/Downloads/sip/4.19.25/sip-4.19.25.tar.gz)
PyQt5 | 5.15.2下载(https://pypi.tuna.tsinghua.edu.cn/packages/28/6c/640e3f5c734c296a7193079a86842a789edb7988dca39eab44579088a1d1/PyQt5-5.15.2.tar.gz)
3.1 安装步骤
源码编译需要依赖qmake工具链,rk3568环境直接 sudo apt-get install qt5-default即可。
安装编译所需的软件包
sudo apt-get install cmake gcc g++
pip install --upgrade pip
pip install wheel setuptools
3.2 源码编译SIP包
tar zxvf sip-4.19.25.tar.gz
cd ./sip-4.19.25
sudo python3.8 configure.py --sip-module PyQt5.sip
sudo make
sudo make install
3.3 源码编译 PyQt5
PyQt5软件包代码很多,由于是在RK3568平台上面进行编译总计花了约12小时才完成,慢慢等吧,要不在使用电脑配置交叉编译环境。
tar zxvf PyQt5-5.15.2.tar.gz
cd ./PyQt5-5.15.2
sudo python3.8 configure.py
sudo make -j4
sudo make install
PyQt5编译后的程序最后安装到了/usr/lib/python3/dist-packages/PyQt5
3.4 测试PyQt5
运行python3.8环境,在里面import QtGui无任何报错即可以。
这里测试的应用程序是pycom程序,可以参考我的文章(62条消息) 分享自己使用python+pyserial+pyQT5写的串口调试助手_pywinusb_fhqlongteng的博客-CSDN博客
把pycom代码复制到RK3568平台上面,直接执行sudo python3.8 pycom1.3(注意要在RK3568设备上的运行,通过远程ssh不行),如下图。pycom串口软件可以愉快的在RK3568平台上使用了。