linux下Python2.7编译安装PyQt5

时间:2022-09-08 23:04:43

---作者吴疆,未经允许,严禁转载,违权必究---

---欢迎指正,需要源码和文件可站内私信联系---

-----------点击此处链接至博客园原文-----------

 

功能说明:在ubuntu系统Python2.7下安装QT库、sip、PyQt5、qt-designer、pyuic等,搭建Python GUI编程环境

运行环境:ubuntu14.04、Python2.7、sip-4.16.8、PyQt-gpl-5.2.1、pycharm中qt5-designer和pyuic5,仅在以上环境中验证过本博客有效性

 

一、相关介绍

由于之前在windows7系统Python3.7下搭建过PyQt5环境(点击这里),相比于PyQt4,对PyQt5更为熟悉,因此,这次在ubuntu14.04系统Python2.7下也着手搭建PyQt5环境。然而,发现不是那么轻松,Python3中提供了PyQt5包(python3-pyqt5),直接pip安装即可,而Python2若想安装PyQt5必须利用源码编译安装,且在编译安装PyQt5需安装相关QT库、sip等,此外,qt-designer和pyuic的作用在这篇博客中已经提及。

二、环境搭建

参考链接:在ubuntu14.04 64bit上安装python-pyqt5软件包(Python2.7)(极重要参考,强烈建议阅读)、sip-4.16.8下载PyQt-gpl-5.2.1下载配置PyQt5环境for Python3.4

(1)安装QT库,相比于自己编译QT库,执行以下命令进行安装比较简单

sudo apt-get install qt-sdk

(2)安装sip-4.16.8

sip是Python调用C/C++库的必备模块,类似于swig,sip作为PyQt的依赖工具,安装PyQt之前必须先安装对应版本的sip,同时,PyQt编译时使用的sip版本必须与Python默认调用的sip保持一致,否则Python中无法调用PyQt。ubuntu14.04中一般自带安装sip-4.15.5,终端输入sip -V命令查看已安装的sip版本,若为其他版本,查看/usr/lib/python2.7/dist-packages/目录下是否存在sip相关文件,将其删除,执行删除命令:

#若存在sip相关目录,还需执行第1条删除命令,否则只执行第2条命令
sudo rm -rf /usr/lib/python2.7/dist-packages/sip目录名
sudo rm /usr/lib/python2.7/dist-packages/sip* 

 根据提供的参考链接下载sip-4.16.8.tar.gz,拷贝至工程目录下(本文为/home/rcnn/HK_Double_Camera)执行以下命令:

tar -xzvf sip-4.16.8.tar.gz
cd sip-4.16.8
python configure.py
make
sudo make install

安装完成后,可分别在终端和Python中查验sip版本是否一致

#终端查看sip版本
sip -V
#查看Python调用的sip版本(通过上述编译安装操作得到的)
python
import sip
print(SIP_VERSION_STR)

如不一致,需要重新执行上述删除、编译安装过程,版本不一致意味着后面编译PyQt所使用的sip和Python2.7调用的sip不一致,导致在Python2.7中调用PyQt的相关模块出现如下类似错误:

the sip module implements API v11.0 but the PyQt5.QtCore module requires API v11.1 

make install与查验版本截图:

linux下Python2.7编译安装PyQt5

linux下Python2.7编译安装PyQt5

(3)PyQt5编译安装

根据提供的参考链接下载PyQt-gpl-5.2.1.tar.gz,拷贝至工程目录下(本文为/home/rcnn/HK_Double_Camera)执行以下命令:

tar -xzvf PyQt-gpl-5.2.1.tar.gz
cd PyQt-gpl-5.2.1
python configure.py --sip-incdir=/usr/include/python2.7
make -j4
sudo make install

执行make时,若报错strip:/usr/bin/pyuic5:不可识别的文件格式,则利用gedit打开Makefile文件,注释该句后重新sudo make install(也有博客提出将PyQt5路径加入到PythonPath即可,但我照做却未成功,经验证此处注释不影响后续pycharm中配置pyuic5及其使用)

linux下Python2.7编译安装PyQt5

gedit Makefile
#注释 -strip $(INSTALL_ROOT)/usr/bin/pyuic5

linux下Python2.7编译安装PyQt5

以上编译安装过程截图:

linux下Python2.7编译安装PyQt5

linux下Python2.7编译安装PyQt5

linux下Python2.7编译安装PyQt5

验证PyQt5是否安装成功,可戳例子1例子2

(4)在pycharm中配置qt5-designer和pyuic5

参考链接:ubuntu下pycharm中配置qt designerlinux安装qt5-designer并集成到pycharm利用PyQt GUI显示图片、实时播放视频

各自作用:qt5-designer用于设计ui界面,产生相应.ui文件,pyuic5用于将qt5-designer产生的.ui文件转换为.py文件以供继承

安装qt5 tools,执行命令sudo apt-get install qttools5-dev-tools

pycharm中配置qt designer(pycharm中File--Settings---Tools---External Tools----+添加)

linux下Python2.7编译安装PyQt5

program中为qt5 designer路径:/usr/lib/x86_64-linux-gnu/qt5/bin/designer

working directory:$FileDir$  (注意与$ProjectFileDir$是有区别的,FileDir表示仅工作在.ui文件目录下,ProjectFileDir表示工作在大工程目录下,若.ui文件存在于大工程目录中的某个文件夹中,则会报错,解决方法是pycharm打开该文件夹,而非整个工程)

pycharm中配置pyuic(pycharm中File--Settings---Tools---External Tools----+添加)

linux下Python2.7编译安装PyQt5

program中为pyuic5的路径:/usr/bin/pyuic5

Arguments为解析命令的参数:-o $FileNameWithoutExtension$.py $FileName$(也可以在-o前加上-m PyQt5.uic.pyuic之类的,这样就可以不用在program中具体指定pyuic路径,具体可查参考博客,WithoutExtension表示生成.py文件不需要.ui的扩展名,即1.ui文件经过pyuic处理后生成1.py文件,而不是1.ui.py文件,另上述PyQt5编译阶段产生与pyuic5有关的报错不影响此处pycharm中pyuic5的配置)

working directory:$FileDir$  

注意:上述相关参数可视情调整,具体可参考以上博客和自查有关博客

三、报错与解决

本人安装过程比较顺利,除以上提到的一个error外,只遇到一个因版本问题引起的大坑:按照上文参考博客安装了sip官网(https://riverbankcomputing.com/software/sip/download)最新的sip-4.19.15.tar.gz和PyQt官网(https://riverbankcomputing.com/software/pyqt/download5)最新的PyQt5_gpl-5.12.1.tar.gz,在查看了Readme相关说明,发现满足版本要求,但依然会在PyQt5编译阶段报错:

make[1]:*** [sipQtCoreQLoggingCategory.o] 错误 1

make[1]:正在离开目录  ‘/home/rcnn/HK_Double_Camera/PyQt5_gpl-5.12.1/QtCore’

make:*** [sub-QCore-make_first-ordered] 错误2

error: const class QLoggingCategory has no member named 'isInfoEnabled'

error: no matching function for call to 'QLoggingCategory::QLoggingCategory(const char*&, QtMsgType&)' 

linux下Python2.7编译安装PyQt5

linux下Python2.7编译安装PyQt5

linux下Python2.7编译安装PyQt5

根据error信息,发现1个错误是因为未定义isInfoEnabled()函数引起,另1个错误是因为本该接收1个参数输入,但接收了2个,对相应.cpp文件注释/修改后make将不再报错,但最终却不能生成PyQt5的相关模块,具体原因不明,待填坑,暂时解决办法为卸载重装上文版本。由于官网不再提供老版本的sip和PyQt5,搜了很久在SourceForge.net找到了。

四、其他

(1)SourceForge.net

摘自百度百科:SourceForge.net,又称SF.net,是开源软件开发者进行开发管理的集中式场所。SourceForge.net由VA Software提供主机,并运行SourceForge软件。大量开源项目在此落户(截至2009年2月,超过23万的软件项目已经登记使用超过200万注册用户的服务,使SourceForge.net开放源码的工具和网络应用的最大集合),包括*使用的MediaWiki,但也包含很多停止开发和一人开发的项目。SourceForge 是全球最大开源软件开发平台和仓库,网站建立的宗旨,就是为开源软件提供一个存储、协作和发布的平台。SourceForge 上拥有大量非常优秀的开源软件,事实上,这些软件完全可以代替一些商业软件。

(2)PyQt4安装

参考链接:ubuntu安装PyQt4

实践过程中,PyQt5安装了很久没成功,一度懊恼,便尝试安装PyQt4,想着把基于PyQt5的代码改成PyQt4的应该也可行。因此参考了上述博客安装PyQt4的过程,由于有包,利用apt-get或pip安装十分方便,就像python3安装PyQt5一样的简单,安装命令如下:

linux下Python2.7编译安装PyQt5