Pyside2 学习系列三:PyInstaller打包项目瘦身(超详细的Pyside2 攻略)

  • Post author:
  • Post category:其他




上一篇

文章打包后,发现包太大了,我们现在开始进行瘦身优化。

本项目的所有演示代码:

github

可在这里下载。

打包只用的工具为

PyInstaller

不想细看的朋友 可以直接跳到 最后

方法对比

查看瘦身结果比较。~~



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 攻略)



版权声明:本文为goldWave01原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。