公共用例库计划--个人版(八)pyinstaller打包pyqt6,从168 MB到40.2 MB

news2024/11/17 14:23:55

1、任务概述

  本次计划的核心任务是开发一个,个人版的公共用例库,旨在将各系统和各类测试场景下的通用、基础以及关键功能的测试用例进行系统性地归纳整理,并以提高用例的复用率为目标,力求最大限度地减少重复劳动,提升测试效率。
  计划内容:完成公共用例库的开发实施工作,包括需求分析、系统设计、开发、测试、打包、运行维护等工作。

1.1、 已完成:

  需求分析、数据库表的设计:公共用例库计划–个人版(一)
  主体界面与逻辑设计:公共用例库计划–个人版(二)
  导出Excel功能:公共用例库计划–个人版(三)
  模块选择功能改造与性能优化:公共用例库计划–个人版(四)
  QtCharts制作首页饼图与柱状图:公共用例库计划–个人版(五)
  典型Bug页面设计与开发:公共用例库计划–个人版(六)
  Excel导入功能开发与导出功能改造:公共用例库计划–个人版(七)

1.2、 本次待完成:

  把Python代码打包成exe文件

打包完成后,公共用例库开发就差不多完成了。后续可能会有需求增改,还有维护的事情了。

2、打包计划

使用第三方库PyInstaller:
  PyInstaller支持Python 2.7和Python 3.3+。可以在Windows、Mac OS X和Linux上使用,但是并不是跨平台的,而是说你要是希望打包成.exe文件,需要在Windows系统上运行PyInstaller进行打包工作;打包成mac app,需要在Mac OS上使用。

2.1、安装使用

安装命令

pip install pyinstaller

打包命令

pyinstaller [options] script[.py]

常用命令说明

命令说明
-h,–help查看该模块的帮助信息
-F,-onefile产生单个的可执行文件
-D,–onedir产生一个目录(包含多个文件)作为可执行程序
-a,–ascii不包含 Unicode 字符集支持
-d,–debug产生 debug 版本的可执行文件
-w,–windowed,–noconsolc指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c,–nowindowed,–console指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR,–out=DIR指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR,–path=DIR设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n NAME,–name=NAME指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字

本次打包命令,还需要测试一下:

pyinstaller -D -w -i favicon2.ico TestCase.py	# 打包一个不带控制台、指定图标的多个文件exe
或者
pyinstaller -F -w -i favicon2.ico TestCase.py	# 打包一个不带控制台、指定图标的单个exe文件

2.2、执行打包命令

2.2.1、本地环境执行打包

  • 执行命令

     pyinstaller -D -w -i favicon2.ico TestCase.py
    

  提示成功后,代码文件夹生成了build、dist、TestCase.spec文件

在这里插入图片描述
可执行文件在dist文件夹内
在这里插入图片描述
  双击打开,可以运行。但是有个问题是pyqt6打包出来的程序太大了,去网上搜索方法解决。
  就那么点功能,占用168 MB,有点点坑了。
在这里插入图片描述

3、打包优化

3.1、使用vitrualenv虚拟环境

1.安装

pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple

2.创建一个virtualenv环境,要空文件夹

virtualenv 路径

3.激活

# windows
cd myenv/Scripts        # 进入Scripts文件夹下
activate                # 运行activate

4.安装项目所需要的包
安装完包后,虚拟环境大小达到了213 MB,那看看打包后文件大小。
在这里插入图片描述

3.1.2、虚拟环境打包

1.pycharm中切换解释器,打开虚拟环境的终端,执行打包命令
在这里插入图片描述
2.执行打包结果:

	大小:168 MB——>92.8 MB
	文件数:216——>196个
	文件夹:19——>13

优化效果还是很明显,减少了75.2 MB体积。

在这里插入图片描述

3.2、使用UPX压缩

1.UPX压缩的技术原理:

加壳:其实是利用特殊的算法,对EXE、DLL文件里的资源进行压缩。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。
解压原理:是加壳工具在文件头里加了一段指令,告诉CPU,怎么才能解压自己。当加壳时,其实就是给可执行的文件加上个外衣。用户执行的只是这个外壳程序。当执行这个程序的时候这个壳就会把原来的程序在内存中解开,解开后,以后的就交给真正的程序。

2.下载

https://upx.github.io/
https://github.com/upx/upx

3.使用
  下载后,解压得到upx.exe
  将upx.exe放到虚拟环境的Scripts目录下
在这里插入图片描述

3.2.2、虚拟环境+UPX打包

1.还是在pycharm中切换虚拟环境解释器,打开虚拟环境的终端,执行打包命令

pyinstaller -D -w -i favicon2.ico TestCase.py

2.执行,pyinstaller自己会使用UPX压缩
在这里插入图片描述

2.执行打包结果:

	大小:92.8 MB——>58.9 MB
	文件数:196——>196个
	文件夹:13——>13

优化效果还是比较明显,减少了33.9 MB体积。
在这里插入图片描述

3.3、土办法优化–删除不必要文件

1.多语言支持文件夹,不需要。删了省5.64 MB

_internal\PyQt6\Qt6\translations

2.联网、PDF、OpenGL 动态链接库,没用到。删了省11.9 MB

_internal\PyQt6\Qt6\bin:
Qt6Network.dll
Qt6Pdf.dll
opengl32sw.dll

3.图像格式支持,部分用不到。删了省1.1 MB

_internal\PyQt6\Qt6\plugins\imageformats:
qwebp.dll
qtiff.dll
qgif.dll
qicns.dll
qpdf.dll
qtga.dll

4.删除后测试功能可用,体积还是小好多。

	大小:58.9 MB——>40.2 MB
	文件数:196——>98个
	文件夹:13——>12

在这里插入图片描述

3.4、虚拟环境+UPX打包成单文件

1.命令

pyinstaller -F -w -i favicon2.ico TestCase.py

2.打包成单文件,就不能删除无用文件了,但是压缩了还是小很多。
  缺点是打开速度比上面多文件慢1秒左右(应该是解压缩时间)。多文件打开需要3秒左右,单文件打开需要4秒左右。

在这里插入图片描述

4、总结

经过一系列优化,打包成多文件的exe程序,大小到了40.2 MB,单文件32.7 MB虽然小7.5 MB,但是文件不透明,启动慢一点。后续应该会使用多文件。

优化幅度:(168-40.2)/168*100%=76.07%

	大小:168 MB——>40.2 MB
	文件数:216——>98个
	文件夹:19——>12

打包文件放度盘了
链接:https://pan.baidu.com/s/16XlLXKi0MN648UBWnkJ1iQ?pwd=tvfj
提取码:tvfj

最后还在编写各用例中:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1462632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Maven私服搭建Nexus3

第一部分:仓库部署 下载地址:https://help.sonatype.com/en/download.html 备用下载链接,部分已经失效了 解压后会有两个文件夹: nexus-3.20.1-01 sonatype-work 访问地址配置路径 \nexus-3.20.1-01\bin\nexus.vmoptions -Xms1…

企业为何选择芯片运营管理ERP?

随着科技的飞速发展和市场竞争的加剧,企业对于运营管理的需求也日益增强。在这一背景下,越来越多的企业开始选择芯片运营管理ERP(企业资源规划)系统,以提升自身的运营效率和竞争力。那么,企业为何选择芯片运营管理ERP呢? 芯片运营…

【快速上手QT】04-定时器Timer

先来个小示例 我们先简单的来触发一下定时器。 #include "Zhetu.h"#include <qdebug.h>void Zhetu::timerEvent(QTimerEvent* event) { //定时器触发函数qDebug() << "Hello world"; }Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){t…

实现可拖拽的页面元素排序更新数据库排序

摘要&#xff1a; 拖拽列表改变路边排序&#xff0c;并且更新后台数据库列表的排序&#xff0c;重新请求的时候获取拖拽后的排序&#xff01; Layui&#xff1a; // 拖拽内页顺序list document.querySelector(#view_side_tab);// 创建cruentItem存放将要拖动的元素let cruen…

JUC并发编程学习与实践

文章目录 学习资料创建和运行线程方法一&#xff1a;直接使用Thread方法二&#xff1a;使用Runnable配合Thread方法三&#xff1a;FutureTask配合Thread 线程的常见方法start与runsleep与yield线程的优先级 join方法详解interrupt线程打断interrupt线程打断后&#xff0c;线程不…

【成都游戏业:千游研发之都的发展与机遇】

成都游戏业&#xff1a; 千游研发之都的发展与机遇 作为我国西部游戏产业的龙头&#xff0c;成都这座城市正在高速发展&#xff0c;目标是崛起成为千亿级游戏研发之都。多年来&#xff0c;在政策扶持、人才汇聚以及文化底蕴等助力下&#xff0c;成都游戏业已经形成完整的产业链…

SAP MIGO发货过账的时候批次库存确定:事务码MBC1进行激活即可

事务码&#xff1a; MBC1 ~ MBC3 使用MBC1按照工厂层级进行激活 接下来MIGO发货过账的时候就可以使用批次库存确定了&#xff0c;点击下图中圈出来的库存确定按钮

Spring AOP 实现原理详解之 JDK 动态代理

目录 一. 前言 二. JDK 代理的示例 2.1. 不需要 Maven 依赖 2.2. 定义实体 2.3. 被代理的类和接口 2.4. JDK 代理类 2.5. 使用代理 三. JDK 代理的流程 3.1. ProxyGenerator 生成代码 3.2. 从生成的 Proxy 代码看执行流程 四. Spring AOP 中 JDK代理的实现 4.1. Sp…

【虚拟仿真】Unity3D中实现3DUI,并且实现Button、InputField、Toggle等事件绑定

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 最近在项目中需要用到3DUI的展示,之前一般会用TextMeshPro进行展示: 但是,后面又需要添加按钮、Toggle等…

[开源协议] 什么是MIT协议及其使用场景

什么是MIT协议? MIT协议是一种开放源代码软件授权协议&#xff0c;全称为Massachusetts Institute of Technology License。该协议允许自由地使用、复制、修改、合并、发布、分发、再授权和销售软件及其副本的任何部分。MIT协议要求在软件的所有副本中包含版权声明和许可声明…

Web基础②nginx搭建与配置

目录 一.Nginx概述 1.定义 2.Nginx模块作用 &#xff08;1&#xff09;main模块 &#xff08;2&#xff09;stream服务模块 &#xff08;3&#xff09;邮件服务模块 &#xff08;4&#xff09;第三方模块 &#xff08;5&#xff09;events模块 &#xff08;6&#xff…

WordPress如何将后台右上角管理员头像去除并调整注销位置及启用注销确认功能?

WordPress后台默认情况下右上角可以看到管理员昵称和头像&#xff0c;将鼠标移动到该昵称上还会出现一个下拉菜单&#xff0c;点击下拉菜单中的“注销”无需我们再次确认就会自动退出。 现在我想将WordPress后台右上角的管理员头像和管理员昵称子菜单去除&#xff0c;并将“注销…

探索亚马逊自养号测评的实际效果与使用感受

自养号在亚马逊测评中的应用给了我们一种全新的体验。通过使用亚马逊自养号&#xff0c;我们发现了许多令人满意的优势&#xff0c;这些优势不仅提升了我们的测评效率&#xff0c;还增加了我们的信誉度。 首先&#xff0c;自养号的质量可控性给了我们极大的信心。我们可以自行…

基于springboot+vue的高校学科竞赛系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Redis之缓存穿透问题解决方案实践SpringBoot3+Docker

文章目录 一、介绍二、方案介绍三、Redis Docker部署四、SpringBoot3 Base代码1. 依赖配置2. 基本代码 五、缓存优化代码1. 校验机制2. 布隆过滤器3. 逻辑优化 一、介绍 当一种请求&#xff0c;总是能越过缓存&#xff0c;调用数据库&#xff0c;就是缓存穿透。 比如当请求一…

利用LaTex批量将eps转pdf、png转eps、eps转png、eps转svg

1、eps转pdf 直接使用epstopdf命令&#xff08;texlive、mitex自带&#xff09;。 在cmd中进入到eps矢量图片的目录&#xff0c;使用下面的命令&#xff1a; for %f in (*.eps) do epstopdf "%f" 下面是plt保存eps代码&#xff1a; import matplotlib.pyplot as…

挑战6万月薪【三】Purple Pi OH开发板带你7天入门OpenHarmony!

现在为止&#xff0c;我们已经完成了Purple Pi OH主板的串口调试和部分配件的连接&#xff0c;接下来&#xff0c;让我们趁热打铁&#xff0c;完成剩余配件的连接&#xff01; 注&#xff1a;配件连接前请断开主板所有供电&#xff0c;避免敏感电路损坏&#xff01; 一. 接口…

计算机网络-局域网

文章目录 局域网局域网拓扑结构以太网以太网传输介质以太网时隙提高传统以太网带宽的途径以太网帧格式 局域网协议IEEE 802参考模型IEEE802.2协议LLC帧格式及其控制字段LLC提供的三种服务 IEEE 802.3协议IEEE 802.4协议IEEE 802.5协议 高速局域网100M以太网千兆以太网万兆以太网…

ubuntu22.04@Jetson Orin Nano之CSI IMX219安装

ubuntu22.04Jetson Orin Nano之CSI IMX219安装 1. 源由2. 安装2.1 硬件安装2.2 软件配置2.3 新增摄像头 3. 效果4. 参考资料 1. 源由 折腾半天时间&#xff0c;捣鼓这个套装摄像头(IMX219)的安装&#xff0c;死活就是没有这个设备。世界总是这么小&#xff0c;看看遇到问题的大…

吴恩达机器学习全课程笔记第三篇

目录 前言 P42-P48 神经元和大脑 神经网络中的层 更复杂的神经网络 前向传播&#xff08;做出预测&#xff09; P49-P53 代码中的推理 构建一个神经网络 P54-P60 矩阵乘法 TensorFlow框架实现神经网络 前言 这是吴恩达机器学习笔记的第三篇&#xff0c;第二篇笔记…