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

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

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

功能说明:在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与查验版本截图:

(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及其使用)

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

以上编译安装过程截图:

验证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----+添加)

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----+添加)

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&)'

根据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的更多相关文章

  1. Linux下指定版本编译安装LAMP

    说明: 操作系统:CentOS 6.5 64位 需求: 编译安装LAMP运行环境 各软件版本如下: MySQL:mysql-5.1.73 Apache:httpd-2.2.31 PHP:php-5.2 ...

  2. Linux下源码编译安装rpy2

    R(又称R语言)是一款开源的跨平台的数值统计和数值图形化展现工具.rpy2是Python直接调用R的第三方库,它可以实现使用python读取R的对象.调用R的方法以及Python与R数据结构转换等.这 ...

  3. Linux 下源码编译安装 vim 8.1

    前言 目前 linux 的各个发行版基本上都是带了一个 vi 编辑器的,而本文要说的 vim 编辑器对 vi 做了一些优化升级,更好用.当我们需要远程操作一台 linux 服务器的时候,只能使用命令行 ...

  4. 1、Linux下源码编译安装PostgreSQL

    操作系统:Centos7 说明:postgresql必须在postgres用户下初始化数据库和启动,否则报错. PostgreSQL的特性 PostgreSQL是一种几乎可以运行在各种平台上的免费的开 ...

  5. linux下源码编译安装mysql

    1.安装依赖的包: yum install -y gdb cmake ncurses-devel bison bison-devel 2.创建mysql安装目录和数据文件目录 mkdir -p /us ...

  6. 在Linux下源码编译安装GreatSQL/MySQL

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 本 ...

  7. 在 Linux 下用 CMAKE 编译安装 OpenCV 3.2.0

    [安装相关软件和库] 1.安装CMAKE:这里使用apt-get来安装; CMAKE 是一个跨平台编译工具,能够输出各种makefile,和project 文件,指导编译器编译,对CMAKE具体的可以 ...

  8. Linux下源码编译安装MySql,centeros7

    1. 安cmake工具 # yum install -y cmake 2. 创建mysql用户  #useradd -s /sbin/nologin mysql  //设置为非登陆用户(安全) 3. ...

  9. linux下rocksdb的编译安装

    RocksDB起源于Facebook的实验室项目,实现了一个高性能的快速存储器,是基于C++编写的key value数据库,很多软件都是采用内置rocksdb的方式运行,所以需要我们提前安装rocks ...

随机推荐

  1. ASP.NET MVC 之各种jQuery提交模式实例

    1.$.ajax提交 var _data = { "dictItemID": dictItemID, "itemType": itemType, "i ...

  2. 利用python下载视频

    我们知道,有些网页上的视频,没有下载的按钮,并且有些视频需要付费下载,很多同学因此很苦恼.不怕,有问题找我,我试试用程序员的方式通俗易懂教会大家. 1.你先下载一个Python,不会下载的同学可以看这 ...

  3. P1556 幸福的路

    题意:平面内有N头牛$N\le 10$john从(0,0)出发,最后回到(0,0) 只有走到牛那里john才可以改变方向,否则沿着直线走 问john经过每一头牛并且在每一头牛出恰好改变方向一次的方案( ...

  4. storm本地可以运行集群出错遇到的问题

    storm本地运行和集群运行是存在区别的: 本地可以读取本地文件系统及java项目中的文件,但是提交集群后就不能读取了,storm只是将topology提交到了集群,所以只能在main方法中将需要读取 ...

  5. the swap trick用于锐减过剩容量

    1.由于vector的复制构造函数只为被复制的vector分配它所需要的空间,故可以用如下的方式来削减vector v中过剩的容量:vector<int>(v).swap(v) 2.the ...

  6. shared_ptr 和auto_ptr智能指针

    shared_ptr:计数的智能指针 它是一个包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针 ,可以被自由地拷贝和赋值,在任意的地方共享它,当没有代码使用(引用计数为0)它时 ...

  7. Opencv常用函数讲解

    1.approxPolyDP(Mat(ps), poly, 5, true);//根据点集,拟合出多边形 2.fillConvexPoly(mask, Mat(ps), Scalar(255));根据 ...

  8. P4213 【模板】杜教筛

    [题目链接] https://www.luogu.org/problemnew/show/P4213 给定一个正整数\(N(N\le2^{31}-1)\) 求 \(ans_1=\sum_{i=1}^n ...

  9. 8.10zju集训日记

    今天的题目比昨天的简单,一开始自己看了一道题意比较难懂的题目,然后看到榜上有人做出的两道不同的题目,然后马上改变目标,金大佬看的题目是一道比较裸的高斯消元,基本上只要模板正确就可以对,于是很快就开始打 ...

  10. python 编程基础-字典类型和方法(课后习题)

    #创建一个字典 dic = {'k1':'v1','k2':'v2','k3':'v3'} #1.请循环遍历出所有的KEY for k in dic: print(k) #2请循环遍历出所有的valu ...