【Ubuntu+python2】编译并运行PyQt5程序

2023-11-19

前言

老规矩,先来个前言。最近用python3和pyqt5写了个程序,考虑到和其他同事要开发环境一致,需要将程序运行环境切换成python2。但直接用python2肯定是跑不通的,因为pyqt5不支持python2……查了下只能对pyqt5源码重新编译。过程也满满都是坑……废话少说,直接上操作。


一、环境搭建

1、下载sip和PyQt5

本机运行环境:Ubuntu18.04、Python2.7

如果说你的系统默认调用的是python3的话,那记得先切回python2.7

另外需要下载sip和PyQt5的源码包,我用的版本为:
sip-4.19.8
PyQt5-5.10.1
上面两个都是官网链接。这里推荐直接去官网下载,照网上其他人说的好像github的编译会出问题,因此我就没尝试。

说明:sip是RiverBank(也就是PyQt的开发商)开发的用于PyQt的Python/C++混合编程解决方案。由于Qt框架的复杂性,PyQt并没有使用Cython、SWIG的混合编程方案,而是自己单独做了一套框架。如果PyQt想正常运行,sip的版本和PyQt5的版本必须对应上,但是他们之间的版本在字面上并没有什么关联性,也就是你根本不知道你这个PyQt5对用的sip版本是什么,这个可是坑了我特别久,可以说在编译过程产生的所有问题都是因为版本不匹配导致的,并且无论是官方还是民间都没有给出两者匹配的版本说明。。


这里也提供下其他版本的下载地址,欢迎尝试:
sip各个版本的下载链接
PyQt5各个版本的下载链接
我前前后后试了N个版本,最后只有两个可行:

PyQt版本 sip版本
5.10.1 4.19.8
5.11.3 4.19.14

2、移除本机自带sip

先查看有没有sip,防止后续安装失败:

ls /usr/lib/python2.7/dist-packages/sip*

在这里插入图片描述
如果有的话,直接sudo rm删除:

sudo rm -rf /usr/lib/python2.7/dist-packages/sip*

在这里插入图片描述

二、解压编译

1、sip解压编译

进入sip下载好的路径,打开终端,执行下面指令,一般sip的编译不会出现啥报错。

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

查看是否安装上了,两者输出版本号即可

sip -V #终端查看sip版本
python #进入python命令行查看
import sip
print(sip.SIP_VERSION_STR)

在这里插入图片描述

2、PyQt5解压编译

同理,进入下载目录打开终端执行:

tar -xzvf PyQt5_gpl-5.10.1.tar.gz
cd PyQt5_gpl-5.10.1
python configure.py --sip-incdir=/usr/include/python2.7
# 根据提示输入yes回车,在这里如果版本不匹配会提示出错
make -j4 #这里会报错,解决方法在下面
sudo make install

make -j4编译过程出现报错error: ‘waitForEvents’ is not a member of ‘QTest’

在这里插入图片描述

这个函数自从5.10 / 5.11版本之后,去掉了。所以这里找不到,简单的办法就是按照提示找到调用该函数的地方,将其注释掉。
这个函数不重要,只有一个地方调用了,所以直接注释掉就OK了。就像这样在前面加两个斜杠
如果出现其他错误,不用怀疑,就是版本不匹配导致的!!!

测试

进入python命令行导入PyQt5库

python
import PyQt5 #没报错,ok

将原程序更换成python2运行,将第一行的

#!/usr/bin/env python3换成python2

在这里插入图片描述

报错1:ImportError: No module named sip

这种是版本不匹配,编译的时候没报错通过了,但是运行就不行了。PyQt5调用不到sip库导致的。

报错2:Segmentation fault (core dumped)

还是版本不匹配。

报错3:出现TypeError: super() takes at least 1 argument (0 given)

原因是super().init()函数在python3中支持,是正确的,但是放到python2中会出现问题;
如果在python2想要继承父类的构造方法,则需要给super参数中传入参数:super(base_model,self).init();

原代码:

class MyWin(QWidget):
    def __init__(self):
        super(self).__init__()

很简单,给super里传入类名即可:

class MyWin(QWidget):
    def __init__(self):
        super(MyWin,self).__init__()

成功
在这里插入图片描述


本文参考链接:
CSDN博主@雪峰流云
CSDN博主@爱发呆de白菜头
知乎:同时安装PyQt4和PyQt5之sip版本区分

欢迎补充,有错误请指正,有用请点个赞吧~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Ubuntu+python2】编译并运行PyQt5程序 的相关文章

  • 使用 Poppler Qt4 C++

    我需要在我的应用程序中使用 pdf 查看器库 我使用 C 和 QT 我下载了Poppler http poppler freedesktop org 和代码示例Poppler Qt4 界面库 http people freedesktop
  • 为一列中的多行生成不同的随机数

    我得到了一列带有整数值 n 行 的列 我想生成满足特定条件的值的正态分布范围内的随机数 我尝试使用下面的代码 但它们太慢了 df members bd df members bd apply lambda x np random norma
  • 为什么在 numpy 数组上使用 *= 会修改原始数组?

    下面的代码演示了使用a 3修改原始数据集 而a a 3才不是 data np array 1 0 3 4 a data 0 b data 1 a 3 b b 3 print data gives 3 0 3 4 the a 3语句修改了矩阵
  • 如何从 python 发布到 hipchat

    我有一些 python 工具 我想将它们的更新发送到 hipchat 房间 我在其他地方使用 shell 脚本执行此操作 因此我知道它在我们的环境中有效 但我似乎无法将令牌推送到 hipchat API 一定是简单的事情 首先 这会正确进行
  • 如何提取图像中的表格

    我想从图像中提取表格 这个 python 模块https pypi org project ExtractTable https pypi org project ExtractTable 与他们的网站https www extractta
  • 在Python中解析制表符分隔的文件

    我正在尝试在 Python 中解析一个制表符分隔的文件 其中与行开头分开的 k 个制表符的数字应该放入第 k 个数组中 除了逐行读取并执行简单解决方案将执行的所有明显处理之外 是否有内置函数可以执行此操作 或者有更好的方法 您可以使用the
  • python 命令行应用程序的最佳布局是什么?

    什么是正确的方法 或者我会满足于good方式 布置一个中等复杂度的命令行 python 应用程序 我使用 Paster 创建了一个 Python 项目框架 它为我提供了一些文件 myproj init py MyProj egg info
  • Snakemake - 无法从输出文件中确定输入文件中的通配符

    我对snakemake很陌生 而且对python也不太熟悉 所以抱歉 这可能是一个非常基本的愚蠢问题 我目前正在构建一个管道来分析一组 bamfilesatlas https bitbucket org phaentu atlas wiki
  • 如何设置 1dCNN+LSTM 网络(Keras)的输入形状?

    我有以下想法要实施 Input gt CNN gt LSTM gt Dense gt Output 输入有 100 个时间步长 每个步长有一个 64 维特征向量 A Conv1D层将在每个时间步提取特征 CNN 层包含 64 个滤波器 每个
  • 当用户点击无框架 pygame 窗口时如何移动它?

    我想创建一个没有框架的 pygame 窗口 当用户单击它并移动鼠标时该窗口会移动 我尝试了这个脚本 但是当我单击窗口时 打印 0 而不是 1 我的脚本有问题 coding utf 8 import pygame from pygame lo
  • Python 中的 Socket.IO 客户端库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 谁能推荐一个 Python 的 Socket IO 客户端库 我环顾四周 但我能找到的唯一的要么是服务
  • 有没有办法隐藏所有子图的轴?

    我试图并排绘制两个图像 没有任何像网格线和轴这样的垃圾 我发现你可以关闭所有网格线plt rcParams axes grid False 但无法弄清楚轴是否有类似的选项 我知道你可以使用plt axis off 但随后您必须为每个子图单独
  • 使用 Python 发布 XML 文件

    我是 Python 新手 需要一些帮助 我的目标是向 URL 发送一些带有 post 请求的 XML 这将触发发送 SMS 我有一个小的 XML 文档 我想将其发布到 URL 我可以在需要发布的 python 代码中引用我的服务器上的 XM
  • ValueError: n_splits=10 不能大于每个类中的成员数

    我正在尝试运行以下代码 from sklearn model selection import StratifiedKFold X hey join now hello join today join us now not today jo
  • 屏幕截图中低分辨率文本的 OCR

    我正在编写一个 OCR 应用程序来从屏幕截图图像中读取字符 目前 我只关注数字 我的方法部分基于这篇博文 http blog damiles com 2008 11 basic ocr in opencv http blog damiles
  • 使用 python 从 hive 读取数据时的性能问题

    我在 hive 中有一个表 其中包含 351 837 110 MB 大小 记录 我正在使用 python 读取该表并写入 sql server 在此过程中 从 hive 读取数据到 pandas dataframe 需要很长时间 当我加载整
  • 如何在 Pandas 中叠加“一天”内的数据进行绘图

    我有一个数据框 里面有一些 更有意义 数据格式如下 In 67 df Out 67 latency timestamp 2016 09 15 00 00 00 000000 0 042731 2016 09 15 00 16 24 3769
  • 维基百科与 Python

    我有这个非常简单的 python 代码来读取 wikipedia api 的 xml import urllib from xml dom import minidom usock urllib urlopen http en wikipe
  • 在 Python 中计算时间(datetime.timedelta?)

    我相信这对很多人来说都是理所当然的事情 但我发现自己对整个 datetime timedelta 事情感到非常困惑 本质上我在开始时给一些东西加上时间戳startTime然后我为流程结束添加时间戳endTime我试图找出 HH MM SS
  • 与 IPython 内核分离而不终止它

    有人可以告诉我如何在不终止 IPython 内核的情况下分离它吗 我在文档中看到quit 有一个参数keep kernel 但不幸的是quit keep kernel True 行不通的 如果您通过 IPython 控制台客户端连接到内核并

随机推荐

  • <Linux开发>linux开发工具- 之-开发使用linux命令记录

    Linux开发 linux开发工具 之 开发使用linux命令记录 本文章主要记录开发过程中涉及使用的linux命令 1 查看磁盘大小分区情况 命令 df hl 可查看分区的路径 及空间大小使用情况 以及挂在点位置 2 查看指定目录文件的大
  • unity点击按钮,弹出image和Text做的弹出框

    让弹出框开始不显示 点击按钮后显示 在Hierarchy面板上新建Image 下面我命名为win 再在上面放置Image和Text组成弹出框 如下图 建立一个Message脚本 using System Collections using
  • [毕业设计]C++程序类内聚度的计算与存储

    目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度
  • PLSQL 基础语法

    01 PLSQL 语法 变量 if loop cursor exception 1 语法 在数据库服务器上保存的打断可执行方法 供其他开发人员调用 可以有效的减少数据库端和服务端的数据交互 提高效率 降低带宽消耗 语法格式 declare
  • 网络工程毕业设计题目100例

    文章目录 0 简介 1 如何选题 2 最新网络工程选题 2 1 Java web SSM 系统 2 2 大数据方向 2 3 人工智能方向 2 4 其他方向 4 最后 0 简介 丹成学长 搜集分享最新的网络工程专业毕设毕设选题 难度适中 适合
  • Microsemi Libero系列教程(七)——SmartDebug的使用

    SmartDebug简介 SmartDebug的使用 ActiveProbe使用
  • VMware无法创建共享文件夹

    1 Linux安装VM 1 chmod x VMware Workstation Full 14 1 3 9474260 x86 64 1 bundle 赋予执行权限 2 VMware Workstation Full 14 1 3 947
  • 二面字节被问到VARCHAR(M) 到底占用多少个字节?我跟面试官硬刚了半小时

    前言 这个问题其实很有迷惑性 问的是字节 不是字符 我们知道在计算机中只能存储二进制数据 所以要搞清楚这个问题 就要搞清楚下面2个问题 1 字节和字符的对应关系 2 varchar 到底能存多少个字节 为了搞清楚上面两个问题 又必须搞清楚m
  • jenkins中使用git遇到的坑

    error src refspec master does not match any root c32e20fd20e8 var jenkins home workspace DataPlatform git push u DataPla
  • RK3568 Android12 RK628编译报错问题

    Platform RK3568 OS Android 12 Kernel v4 19 206 SDK Version android 12 0 mid rkr1 问题 在dts中配置rk628时遇到编译报错 提示找不到rk628的label
  • Kubernets原理分解

    主节点 master 快速介绍 master也要装kubelet和kubeproxy 前端访问 UI CLI kube apiserver scheduler controller manager etcd kubelet kubeprox
  • 高考失利,还适合选计算机专业吗??

    前言 高考落榜 人生陷入低谷 对于很多人来说 这意味着梦想的破灭和无尽的绝望 但是 对于我来说 这只是人生旅程的一个起点 我喜欢编程也热爱编程 虽然网上很多言论说计算机行业已经很卷了 但是我却认为无论再哪个行业 你不卷 也同样落后于人 所以
  • 微信小程序中上传图片添加水印功能

    功能实现 参考文章 https blog csdn net yynikki article details 101763718 遇到的问题 实现过程中主要遇到的问题有以下两个 1 在微信开发者工具上图片显示完全正常 但在真机上生成的图片不全
  • 理解一维卷积

    根据我个人的经验和偏好 理解数学概念的最好方式之一就是赋予其物理意义 把f t 看做输入 g t 看做系统的衰减系数 卷积就比较好理解了 在某一时刻n 该系统对f n 的响应值就是f n xg 0 但系统的总输出C n 不仅跟当前输入的f
  • HackBar 使用教程

    啥是Hackbar Hackbar是一个Firefox的插件 它的功能类似于地址栏 但是它里面的数据不受服务器的相应触发的重定向等其它变化的影响 有网址的载入于访问 联合查询 各种编码 数据加密功能 这个Hackbar可以帮助你在测试SQL
  • Pytorch环境配置——cuda、、cudnn、torch、torchvision对应版本(最全)及安装方法

    Pytorch环境配置 cuda cudnn torch torchvision对应版本 最全 及安装方法 一 查询可支持的最高cuda版本 二 查看cuda cudnn pytorch torchvision对应版本 三 安装 3 1 W
  • Python蓝桥杯 基础练习 十六进制转八进制

    def huan n n format int n 16 o print n x int input for i in range 1 x 1 n input huan n format o 将数据格式化为八进制 int n 16 返回字符
  • 攻防世界 pwn cgfsb writeup

    攻防世界pwn cgfsb 这一题是关于格式化字符串漏洞的题 是一个单一漏洞题 不需要太多的绕过 拿到题目首先查看一下保护 可以看到 这是一个32位的程序 并且开启了Canary保护和NX保护 我们看一下IDA 进入IDA 按下F5可以得到
  • 字节跳动最爱考的前端面试题:CSS 基础

    注意 每道题前面出现的 xx 数字代表这道题出现的频次 此 CSS 基础是基于 30 篇前端面经整理出的问题和对应的回答 参考链接等 文章内容为拿到 Offer 的本人整理 2 写代码 css div 垂直水平居中 并完成 div 高度永远
  • 【Ubuntu+python2】编译并运行PyQt5程序

    文章目录 前言 一 环境搭建 1 下载sip和PyQt5 2 移除本机自带sip 二 解压编译 1 sip解压编译 2 PyQt5解压编译 make j4编译过程出现报错error waitForEvents is not a member