Pyside2 学习系列三:PyInstaller打包项目瘦身(超详细的Pyside2 攻略)
继上一篇文章打包后,发现包太大了,我们现在开始进行瘦身优化。
本项目的所有演示代码:github可在这里下载。
打包只用的工具为PyInstaller
。
不想细看的朋友 可以直接跳到 最后 方法对比
查看瘦身结果比较。~~
优化
- 1 简单查看包构成
- 2 瘦身方法
- 2.1 打包成单文件
- 2.2 UPX压缩
- 2.2.1 命令行添加地址
- 2.2.2 将UPX路径添加到环境变量
- 2.3 打包成单文件并UPX压缩
- 2.4 打包成多文件后,删除无用的依赖库(未成功)
- 3 方法对比
1 简单查看包构成
下图中,我们可以看到,我们只是简单的添加了两个ui文件,包大小就显示有98.5 MB
。完全不可理解。
进入exe同级目录后发现,主要控件贡献最大的是 Qt的各种ui库,占了80%的内存。目前自己测试了,优化有效的方法有三种加一种失败的方法。
2 瘦身方法
2.1 打包成单文件
打包成单文件,顾名思义就是把所有的dll等库和依赖都打包到exe文件里面去。
我们通过 pyinstaller -h
可以看到,有这么个命令 -F
, 默认是-D
-D, --onedir Create a one-folder bundle containing an executable(default)-F, --onefile Create a one-file bundled executable.
好的,将我们的打包命令修改为:
pyinstaller -w -F pymain.py --add-data="formmain.ui;."
(packenv) C:\Users\Administrator\Documents\PyDemo>pyinstaller -w -F pymain.py --add-data="formmain.ui;."
71 INFO: PyInstaller: 4.5.1
71 INFO: Python: 3.6.7
72 INFO: Platform: Windows-10-10.0.19041-SP0
79 INFO: wrote C:\Users\Administrator\Documents\PyDemo\pymain.spec
82 INFO: UPX is not available.
82 INFO: Extending PYTHONPATH with paths
['C:\\Users\\Administrator\\Documents\\PyDemo','C:\\Users\\Administrator\\Documents\\PyDemo']
......
10811 INFO: Updating manifest in C:\Users\Administrator\Documents\PyDemo\build\pymain\runw.exe.e4rzbi26
10812 INFO: Updating resource type 24 name 1 language 0
10818 INFO: Appending archive to EXE C:\Users\Administrator\Documents\PyDemo\dist\pymain.exe
18313 INFO: Building EXE from EXE-00.toc completed successfully.
打包成功后,进入dist
目录查看只有pymain.exe
一个文件,显示大小为39.4M
双击,可以运行,但是发现启动速度稍微慢了一点点。
2.2 UPX压缩
除了打包成单个文件外,我们还可以借助压缩工具将我们的依赖库进一步进行压缩。
首先去官网进行下载并解压。
我们将解压后文件夹放入随便一个本地地址,如C:\upx-3.96-win64
。
PyInstaller
打包默认是开了UPX
压缩的,我们可以从打包的log – 82 INFO: UPX is not available.
或者 .spec - upx=True,
文件里面发现。下面介绍两种进行压缩的命令方法
2.2.1 命令行添加地址
我们使用--upx-dir
命令,并且后面接的地址为upx的文件夹地址,不是exe地址。
pyinstaller -w pymain.py --add-data="formmain.ui;." --upx-dir="C:\upx-3.96-win64"
可以看到下面log里面的upx也变更为了167 INFO: UPX is available.
(packenv) C:\Users\Administrator\Documents\PyDemo>pyinstaller -w pymain.py --add-data="formmain.ui;." --upx-dir="C:\upx-3.96-win64"
71 INFO: PyInstaller: 4.5.1
71 INFO: Python: 3.6.7
73 INFO: Platform: Windows-10-10.0.19041-SP0
75 INFO: wrote C:\Users\Administrator\Documents\PyDemo\pymain.spec
167 INFO: UPX is available.
......
766 INFO: checking COLLECT
3396 INFO: Building COLLECT COLLECT-00.toc
4184 INFO: Building COLLECT COLLECT-00.toc completed successfully.
查看dist
的大小为44.2M
, 运行起来发现启动速度稍微慢了一点点。
2.2.2 将UPX路径添加到环境变量
将本地的C:\upx-3.96-win64
添加到环境变量并生效后。
重新运行命令
pyinstaller -w pymain.py --add-data="formmain.ui;."
或者运行
pyinstaller pymain.spec
都可以,生成的dist
大小同样为为44.2M
。
添加到环境变量后方便一下,不用每次都赋值地址。
2.3 打包成单文件并UPX压缩
我们将第二章的UPX添加到环境变量后,再次运行打包单文件的命令试试。
pyinstaller -w -F pymain.py --add-data="formmain.ui;."
输出
(packenv) C:\Users\Administrator\Documents\PyDemo>pyinstaller -w -F pymain.py --add-data="formmain.ui;."
72 INFO: PyInstaller: 4.5.1
72 INFO: Python: 3.6.7
73 INFO: Platform: Windows-10-10.0.19041-SP0
75 INFO: wrote C:\Users\Administrator\Documents\PyDemo\pymain.spec
162 INFO: UPX is available.
163 INFO: Extending PYTHONPATH with paths
......
8771 INFO: Appending archive to EXE C:\Users\Administrator\Documents\PyDemo\dist\pymain.exe
15165 INFO: Building EXE from EXE-00.toc completed successfully.
然后我们惊喜的发现,生成的pymain.exe
大小仅有31M
。
速度比前两个稍微更慢一点点。
2.4 打包成多文件后,删除无用的依赖库(未成功)
在第二章upx压缩后确实发现,qt将所有有用无用的依赖库都加进来了,然而想要删除部分无用的依赖库后,运行exe,报依赖缺失的弹窗。
其他参考网站说可以删除,但是测试失败。不知道是哪个步骤不对。
3 方法对比
方法 | 大小 | 启动速度 | 结论 |
---|---|---|---|
多文件不压缩默认 | 98.5M | 最快 | 默认选项 |
单文件不压缩 | 39.4M | 速度比较快 | 适合小工程,只生成一个文件。不能查看依赖库 |
多文件UPX压缩 | 44.2M | 速度有点慢 | 多文件适合大工程,但是启动速度比较慢 |
单文件UPX压缩 | 31M | 速度有点慢 | 只有一个文件,包最小,启动速度也比较慢 |
多文件UPX压缩(删除无用依赖) | — | — | 测试失败,移除任何依赖都无法运行 |
综述:
- 包占用最多的是qt的ui库的依赖
- 各种压缩方法都有优缺点,需要结合项目实际使用。
其他章节:
Pyside2 学习系列一:创建包含ui文件的项目 (超详细的Pyside2 攻略)
Pyside2 学习系列二:PyInstaller打包项目exe (超详细的Pyside2 攻略)
Pyside2 学习系列三:PyInstaller打包项目瘦身(超详细的Pyside2 攻略)
Pyside2 学习系列三:PyInstaller打包项目瘦身(超详细的Pyside2 攻略)相关推荐
- Pyside2 学习系列二:PyInstaller打包项目exe (超详细的Pyside2 攻略)
继上一篇文章创建了项目后,本章我们进行项目的打包工作. 本项目的所有演示代码:github可在这里下载. 打包只用的工具为PyInstaller. 打包步骤 1 准备环境 1.1 安装`PyInsta ...
- caffe学习系列:训练自己的图片集(超详细教程)
学习的caffe的目的,不是简单的做几个练习,而是最终落实到自己的项目或科研中去.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测试的整个流程. 一.数据的准备 有条件的同学,可以去I ...
- python pyinstaller 打包项目
文章目录 一.pyinstaller 打包项目 1.1 安装pyinstaller 1.2 简单打包命令 1.3 命令行指定参数选项方式打包: 1.4 数据绑定和搜索相关的参数选项: 1.5 程序的运 ...
- Vue+Electron学习系列 (三) -- 自动更新
Vue+Electron学习系列 1️⃣Vue+Electron学习系列 (一) -- 初识 2️⃣ Vue+Electron学习系列 (二) -- 打包发布 3️⃣ Vu ...
- idea学习系列三之版本管理工具
idea学习系列三之版本管理工具 上一篇文章主要介绍了将idea中常用的快捷键,快捷键要想熟练那就得在实际的工作中多使用,刚开始可能很麻烦经常去笔记中找,不过用多了自然就熟练了. 这篇文件将会介绍一下 ...
- 数据库MYSQL学习系列三
数据库MYSQL学习系列三 三.MYSQL事务与存储引擎 3.1-数据库事务 什么是事务 一系列有序的数据库操作: o要么全部成功 o要么全部回退到操作前的状态 o中间状态对其他连接不可见 事务的 ...
- pyinstaller打包项目,运行exe找不到指定模块(自定义/python39.dll等)
使用pyinstaller打包项目时,遇到了如题所示的问题,于是在网络上查询答案.如果项目仅能编译成功而不能运行为exe文件,那么可移植性.实用性都是不高的,所以这个问题首先需要解决. 浏览多方答案之 ...
- SpringBoot-Maven打包压缩瘦身
SpringBoot-Maven打包压缩瘦身 一.Spring Boot 可执行 jar 分析 1.1 打包 1.2 两种 jar 的比较 1.3 一次打包两个 jar 二.SpringBoot迭代发 ...
- 【轻量化网络系列(2)】MobileNetV2论文超详细解读(翻译 +学习笔记+代码实现)
前言 上一篇我们介绍了MobileNetV1,主要是将普通Conv转换为dw和pw,但是在dw中训练出来可能会很多0,也就是depthwise部分得到卷积核会废掉,即卷积核参数大部分为0,因为权重数量 ...
最新文章
- 如何设计复用性较好的类?
- linux不自动创建sda1,linux下头挂载新硬盘(转)
- 汽车产业云上多地域高可用消息系统构建
- UNIX环境高级编程——pthread_create的问题
- 2018.6.5今天跟着视频做了一个提交Todolist
- mysql 命令备忘
- python怎么和数据库连接_Java和Python都怎么连接数据库
- 命令行模式下几个网络命令详解
- 13muduo_base库源码分析(四)
- linux下redis开机自启动
- 【21天python打卡】第15天 python经典案例(1)
- 使用git可视化工具上传你修改的代码
- 脉动风时程matlab程序,脉动风时程matlab程序.doc
- hp服务器3c认证证书,戴尔 Dell PowerEdge R720 服务器3C认证证书,节能认证证书
- python删除word表格中的某一行_python读取word 中指定位置的表格及表格数据
- NLP入门(十)使用LSTM进行文本情感分析
- win10通过开启teredo访问ipv6
- composer错误
- 教你一招让你高效搞定高品质的H5交互动画
- 个人建站赚钱的5种常见方法
热门文章
- 户外露营冷藏箱的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 斐乐第五家高尔夫独立店东莞开业;康莱德酒店及度假村签约西安、南京和成都三家酒店 | 美通企业日报...
- Excel如何生成条形码图片?
- c语言游戏代码(c语言制作小游戏)
- 美国J1签证面签需要准备哪些材料?
- 三-五功能/半亮/25%亮/全亮/爆闪/SOS_专用应急灯手电筒IC方案
- 微信小程序——弹出并隐藏键盘(带有输入框,可编辑)
- 不经意传输协议快速入门
- pdf文件转换ppt可编辑_创建,转换和编辑PDF文件的免费工具
- 基于BP神经网络的多因素房屋价格预测matlab仿真