嵌入式ARM 64位平台源码编译安装PyQt5及其在虚拟环境中的调用配置

您所在的位置:网站首页 乐摩吧在哪里有卖 嵌入式ARM 64位平台源码编译安装PyQt5及其在虚拟环境中的调用配置

嵌入式ARM 64位平台源码编译安装PyQt5及其在虚拟环境中的调用配置

2023-11-18 03:55| 来源: 网络整理| 查看: 265

文章目录 前言一、PyQt5及SIP简介二、开发部署环境三、PyQt5及SIP安装步骤1.安装qt5-default2.配置好python和虚拟环境3.源码编译安装SIP包4.源码编译安装PyQt5包 四、虚拟环境中调用PyQt5的配置五、测试PyQt5的版本和功能总结

前言

在嵌入式ARM 64位平台上,pip方式安装PyQt5时因pip源无编译好的aarch64的whl包,需要下载PyQt5和sip的源码包进行自动编译,通常会编译失败。 虽然sudo apt-get install python3-pyqt5可以安装成功,但apt方式安装的PyQt5包默认安装在usr/bin/python3/dist-packages下,且在多Python版本环境下编译成系统默认python版本的PyQt5库文件,当在virtualenv创建的不同Python版本的虚拟环境中时无法调用,故在嵌入式平台上采用源码编译方式安装PyQt5。

提示:以下是本篇文章正文内容,仅供参考

一、PyQt5及SIP简介

PyQt5 是Riverbank 公司的产品,分为开源版本和商业版本,开源版本就包含全部的功能。 SIP 是一个将C/C++库转换为Python 绑定的工具,SIP本来是为了开发PyQt 而开发的,现在也可以用于将任何C/C++库转换为Python 绑定。PyQt5依赖于SIP包。

二、开发部署环境 开发环境软件版本/配置开发板型号Firefly AIO-3399 ProC开发板 (3+16GB)开发板操作系统Ubuntu 18.04LTS开发板固件版本AIO-RK3399PROC-UBUNTU18.04-GPT-20200525-1016.imgPython版本Python 3.7.10PyQt5版本5.15.2SIP版本4.19.25电脑远程软件Xshell 7&Xftpd 7

注:PyQt5版本需与SIP版本对应,直接从pip源下载的源码包编译时会出错, 需从riverbank官网下载:SIP包下载链接,PyQt5包下载链接

三、PyQt5及SIP安装步骤 1.安装qt5-default

源码编译PyQt5时需要系统的/usr/lib/qt5/bin/路径下有qmake,需先安装qt5-default包,此时默认会安装qmake。

user@admin:~$ sudo apt-get install qt5-default ... 下列【新】软件包将被安装: libdrm-dev libegl1-mesa-dev libgl1-mesa-dev libgles1 libgles2-mesa-dev libglu1-mesa-dev libglvnd-core-dev libglvnd-dev libopengl0 libqt5concurrent5 libqt5opengl5-dev libqt5sql5 libqt5sql5-sqlite libqt5test5 libqt5xml5 libwayland-bin libwayland-dev libx11-xcb-dev libxcb-dri2-0-dev libxcb-dri3-dev libxcb-glx0-dev libxcb-present-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxshmfence-dev libxxf86vm-dev mesa-common-dev qt5-default qt5-qmake qt5-qmake-bin qtbase5-dev qtbase5-dev-tools qtchooser x11proto-xf86vidmode-dev ... #验证qmake是否已安装 user@admin:~$ qmake --version QMake version 3.1 2.配置好python和虚拟环境

按照《Firefly AIO-3399ProC开发板安装RKNN Toolkit 1.6.0开发环境》文章配置python和虚拟环境。 命令行切换到虚拟环境:

user@admin:~$ virtualenv -p /usr/bin/python3.7 pyqt5 user@admin:~$ source pyqt5/bin/activate (pyqt5) user@admin:~$ pip3 list Package Version ------------- ------- pip 21.3.1 pkg_resources 0.0.0 setuptools 59.2.0 wheel 0.37.0 3.源码编译安装SIP包

安装编译所需软件包

sudo apt-get install cmake gcc g++ pip3 install --upgrade pip pip3 install wheel setuptools

编译SIP包

(pyqt5) user@admin:~$ cd ./pyqt5/ (pyqt5) user@admin:~$ tar zxvf sip-4.19.25.tar.gz pyqt5) user@admin:~/pyqt5$ cd ./sip-4.19.25 (pyqt5) user@admin:~/pyqt5/sip-4.19.25$ sudo python3 configure.py --sip-module PyQt5.sip This is SIP 4.19.25 for Python 3.7.12 on linux. The SIP code generator will be installed in /usr/bin. The sip.h header file will be installed in /usr/include/python3.7m. The PyQt5.sip module will be installed in /usr/lib/python3/dist-packages/PyQt5. The sip.pyi stub file will be installed in /usr/lib/python3/dist-packages/PyQt5. The default directory to install .sip files in is /usr/share/sip. Creating sipconfig.py... Creating top level Makefile... Creating sip code generator Makefile... Creating sip module Makefile... (pyqt5) user@admin:~/pyqt5/sip-4.19.25$ sudo make ... (pyqt5) user@admin:~/pyqt5/sip-4.19.25$ sudo make install make[1]: 进入目录“/home/user/pyqt5/sip-4.19.25/sipgen” cp -f sip /usr/bin/sip cp -f /home/user/pyqt5/sip-4.19.25/siplib/sip.h /usr/include/python3.7m/sip.h make[1]: 离开目录“/home/user/pyqt5/sip-4.19.25/sipgen” make[1]: 进入目录“/home/user/pyqt5/sip-4.19.25/siplib” cp -f sip.so /usr/lib/python3/dist-packages/PyQt5/sip.so strip /usr/lib/python3/dist-packages/PyQt5/sip.so cp -f /home/user/pyqt5/sip-4.19.25/sip.pyi /usr/lib/python3/dist-packages/PyQt5/sip.pyi make[1]: 离开目录“/home/user/pyqt5/sip-4.19.25/siplib” cp -f sipconfig.py /usr/lib/python3/dist-packages/sipconfig.py cp -f /home/user/pyqt5/sip-4.19.25/sipdistutils.py /usr/lib/python3/dist-packages/sipdistutils.py /usr/bin/python3 /home/user/pyqt5/sip-4.19.25/mk_distinfo.py "" /usr/lib/python3/dist-packages/PyQt5_sip-4.19.25.dist-info installed.txt 4.源码编译安装PyQt5包

源码编译PyQt5时时间较长,若无报错耐心等待即可。

(pyqt5) user@admin:~$ cd ./pyqt5/ (pyqt5) user@admin:~$ tar zxvf PyQt5-5.15.2.tar.gz (pyqt5) user@admin:~/pyqt5$ cd ./PyQt5-5.15.2 (pyqt5) user@admin:~/pyqt5/PyQt5-5.15.2$ sudo python3 configure.py Querying qmake about your Qt installation... Determining the details of your Qt installation... This is the GPL version of PyQt 5.15.2 (licensed under the GNU General Public License) for Python 3.7.12 on linux. Type 'L' to view the license. Type 'yes' to accept the terms of the license. Type 'no' to decline the terms of the license. Do you accept the terms of the license? yes ... (pyqt5) user@admin:~/pyqt5/PyQt5-5.15.2$ sudo make -j4 ... g++ -Wl,--version-script=pyrcc.exp -Wl,-O1 -shared -o libpyrcc.so sippyrccRCCResourceLibrary.o sippyrcccmodule.o rcc.o -lQt5Xml -lQt5Core -lpthread cp -f libpyrcc.so pyrcc.so make[1]: 离开目录“/home/user/pyqt5/PyQt5-5.15.2/pyrcc” cd Qt/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /home/user/pyqt5/PyQt5-5.15.2/Qt/Qt.pro ) && make -f Makefile make[1]: 进入目录“/home/user/pyqt5/PyQt5-5.15.2/Qt” gcc -c -pipe -O2 -fno-exceptions -Wall -W -D_REENTRANT -fPIC -DSIP_PROTECTED_IS_PUBLIC -Dprotected=public -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_PLUGIN -I. -I. -isystem /usr/include/python3.7m -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o sipQtcmodule.o sipQtcmodule.c rm -f libQt.so g++ -Wl,--version-script=Qt.exp -Wl,-O1 -shared -o libQt.so sipQtcmodule.o -lpthread cp -f libQt.so Qt.so make[1]: 离开目录“/home/user/pyqt5/PyQt5-5.15.2/Qt” (pyqt5) user@admin:~/pyqt5/PyQt5-5.15.2$ sudo make install ... /usr/lib/qt5/bin/qmake -install qinstall /home/user/pyqt5/PyQt5-5.15.2/QtPrintSupport.pyi /usr/lib/python3/dist-packages/PyQt5/QtPrintSupport.pyi /usr/lib/qt5/bin/qmake -install qinstall /home/user/pyqt5/PyQt5-5.15.2/QtSql.pyi /usr/lib/python3/dist-packages/PyQt5/QtSql.pyi /usr/lib/qt5/bin/qmake -install qinstall /home/user/pyqt5/PyQt5-5.15.2/QtTest.pyi /usr/lib/python3/dist-packages/PyQt5/QtTest.pyi /usr/lib/qt5/bin/qmake -install qinstall /home/user/pyqt5/PyQt5-5.15.2/QtWidgets.pyi /usr/lib/python3/dist-packages/PyQt5/QtWidgets.pyi /usr/lib/qt5/bin/qmake -install qinstall /home/user/pyqt5/PyQt5-5.15.2/QtXml.pyi /usr/lib/python3/dist-packages/PyQt5/QtXml.pyi /usr/lib/qt5/bin/qmake -install qinstall /home/user/pyqt5/PyQt5-5.15.2/QtDBus.pyi /usr/lib/python3/dist-packages/PyQt5/QtDBus.pyi /usr/bin/python3 /home/user/pyqt5/PyQt5-5.15.2/mk_distinfo.py "" /usr/lib/python3/dist-packages/PyQt5-5.15.2.dist-info installed.txt ... 四、虚拟环境中调用PyQt5的配置

进入PyQt5源码编译安装的路径,打包后移动至虚拟环境的dist-packages下并解压。

(pyqt5) user@admi:~/pyqt5/PyQt5-5.15.2$ cd /usr/lib/python3/dist-packages/ (pyqt5) user@admin:/usr/lib/python3/dist-packages$ sudo tar zcvf pyqt5.tar.gz ./PyQt5/ ./PyQt5/ ./PyQt5/pyrcc.so ./PyQt5/QtDBus.pyi ./PyQt5/QtSql.so ./PyQt5/pyrcc_main.py ./PyQt5/QtSql.pyi ./PyQt5/QtNetwork.pyi ./PyQt5/QtNetwork.so ./PyQt5/sip.so ./PyQt5/QtGui.so ./PyQt5/_QOpenGLFunctions_4_1_Core.so ./PyQt5/QtDBus.so ./PyQt5/QtWidgets.pyi ./PyQt5/QtTest.so ./PyQt5/QtOpenGL.so ./PyQt5/QtOpenGL.pyi ./PyQt5/pylupdate.so ./PyQt5/_QOpenGLFunctions_2_1.so ./PyQt5/uic/ ./PyQt5/uic/properties.py ./PyQt5/uic/exceptions.py ./PyQt5/uic/Loader/ ./PyQt5/uic/Loader/loader.py ./PyQt5/uic/Loader/qobjectcreator.py ./PyQt5/uic/Loader/__init__.py ./PyQt5/uic/pyuic.py ./PyQt5/uic/Compiler/ ./PyQt5/uic/Compiler/misc.py ./PyQt5/uic/Compiler/qtproxies.py ./PyQt5/uic/Compiler/qobjectcreator.py ./PyQt5/uic/Compiler/indenter.py ./PyQt5/uic/Compiler/proxy_metaclass.py ./PyQt5/uic/Compiler/__init__.py ./PyQt5/uic/Compiler/compiler.py ./PyQt5/uic/port_v2/ ./PyQt5/uic/port_v2/proxy_base.py ./PyQt5/uic/port_v2/string_io.py ./PyQt5/uic/port_v2/as_string.py ./PyQt5/uic/port_v2/__init__.py ./PyQt5/uic/port_v2/ascii_upper.py ./PyQt5/uic/driver.py ./PyQt5/uic/icon_cache.py ./PyQt5/uic/__init__.py ./PyQt5/uic/widget-plugins/ ./PyQt5/uic/widget-plugins/qtcharts.py ./PyQt5/uic/widget-plugins/qaxcontainer.py ./PyQt5/uic/widget-plugins/qtwebkit.py ./PyQt5/uic/widget-plugins/qtquickwidgets.py ./PyQt5/uic/widget-plugins/qtwebenginewidgets.py ./PyQt5/uic/widget-plugins/qtprintsupport.py ./PyQt5/uic/widget-plugins/qscintilla.py ./PyQt5/uic/port_v3/ ./PyQt5/uic/port_v3/proxy_base.py ./PyQt5/uic/port_v3/string_io.py ./PyQt5/uic/port_v3/as_string.py ./PyQt5/uic/port_v3/__init__.py ./PyQt5/uic/port_v3/ascii_upper.py ./PyQt5/uic/uiparser.py ./PyQt5/uic/objcreator.py ./PyQt5/_QOpenGLFunctions_2_0.so ./PyQt5/QtPrintSupport.so ./PyQt5/QtXml.so ./PyQt5/__init__.py ./PyQt5/sip.pyi ./PyQt5/pylupdate_main.py ./PyQt5/QtGui.pyi ./PyQt5/QtXml.pyi ./PyQt5/QtWidgets.so ./PyQt5/QtCore.pyi ./PyQt5/QtPrintSupport.pyi ./PyQt5/QtTest.pyi ./PyQt5/Qt.so ./PyQt5/QtCore.so (pyqt5) user@admin:/usr/lib/python3/dist-packages$ sudo cp ./pyqt5.tar.gz /home/user/pyqt5/lib/python3.7/site-packages/ (pyqt5) user@admin:~$ cd /home/user/pyqt5/lib/python3.7/site-packages/ (pyqt5) user@admin:~/pyqt5/lib/python3.7/site-packages$ tar zxvf pyqt5.tar.gz ... 五、测试PyQt5的版本和功能 (pyqt5) user@admin:~$ python3 Python 3.7.12 (default, Sep 10 2021, 00:21:48) [GCC 7.5.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import PyQt5 >>>

以下为两个python脚本,分别用于测试PyQt5的版本和功能

#测试Qt5,SIP及PyQt5的版本 from PyQt5.QtWidgets import QApplication from PyQt5.QtCore import QT_VERSION_STR from PyQt5.Qt import PYQT_VERSION_STR from sip import SIP_VERSION_STR if __name__=='__main__': import sys app=QApplication(sys.argv) print("Qt5 Version Number is: {0}".format(QT_VERSION_STR)) print("PyQt5 Version is: {}".format(PYQT_VERSION_STR)) print("Sip Version is: {}".format(SIP_VERSION_STR)) sys.exit(app.exec_())

保存成pyqt5version.py文件后在终端中执行:

(pyqt5) user@admin:~/pyqt5$ python3 pyqt5version.py Qt5 Version Number is: 5.9.5 PyQt5 Version is: 5.15.2 Sip Version is: 4.19.25 #测试PyQt5的功能 import sys from PyQt5 import QtWidgets, QtCore app = QtWidgets.QApplication(sys.argv) widget = QtWidgets.QWidget() widget.resize(360, 360) widget.setWindowTitle("Hello, World") widget.show() sys.exit(app.exec_())

保存成pyqt5test.py文件后在终端中执行后,出现以下窗口,代表PyQt5功能正常。 在这里插入图片描述

总结

至此,按照以上步骤完成了在嵌入式ARM 64位平台上源码编译安装PyQt5,并成功在virtualenv创建的虚拟环境中调用PyQt5完成GUI设计。 参考文章: 《树莓派raspbian手动编译安装pyqt5,pyqt5.sip》 《python3.9 源码编译安装pyqt5》 《Python Qt GUI与数据可视化编程》



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3