继上一篇文章打包后 发现包太大了 我们现在开始进行瘦身优化。
本项目的所有演示代码 github可在这里下载。
打包只用的工具为PyInstaller。
下图中 我们可以看到 我们只是简单的添加了两个ui文件 包大小就显示有98.5 MB。完全不可理解。
进入exe同级目录后发现 主要控件贡献最大的是 Qt的各种ui库 占了80%的内存。目前自己测试了 优化有效的方法有三种加一种失败的方法。
打包成单文件 顾名思义就是把所有的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:UsersAdministratordocumentsPyDemo 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:UsersAdministratordocumentsPyDemopymain.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:UsersAdministratordocumentsPyDemobuildpymainrunw.exe.e4rzbi26 10812 INFO: Updating resource type 24 name 1 language 0 10818 INFO: Appending archive to EXE C:UsersAdministratordocumentsPyDemodistpymain.exe 18313 INFO: Building EXE from EXE-00.toc completed successfully.
打包成功后 进入dist 目录查看只有pymain.exe一个文件 显示大小为39.4M
双击 可以运行 但是发现启动速度稍微慢了一点点。
除了打包成单个文件外 我们还可以借助压缩工具将我们的依赖库进一步进行压缩。
首先去官网进行下载并解压。
我们将解压后文件夹放入随便一个本地地址 如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:UsersAdministratordocumentsPyDemo 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:UsersAdministratordocumentsPyDemopymain.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。
添加到环境变量后方便一下 不用每次都赋值地址。
我们将第二章的UPX添加到环境变量后 再次运行打包单文件的命令试试。
pyinstaller -w -F pymain.py --add-data formmain.ui;.
输出
(packenv) C:UsersAdministratordocumentsPyDemo 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:UsersAdministratordocumentsPyDemopymain.spec 162 INFO: UPX is available. 163 INFO: Extending PYTHonPATH with paths ...... 8771 INFO: Appending archive to EXE C:UsersAdministratordocumentsPyDemodistpymain.exe 15165 INFO: Building EXE from EXE-00.toc completed successfully.
然后我们惊喜的发现 生成的pymain.exe大小仅有31M。
速度比前两个稍微更慢一点点。
在第二章upx压缩后确实发现 qt将所有有用无用的依赖库都加进来了 然而想要删除部分无用的依赖库后 运行exe 报依赖缺失的弹窗。
其他参考网站说可以删除 但是测试失败。不知道是哪个步骤不对。
综述
包占用最多的是qt的ui库的依赖各种压缩方法都有优缺点 需要结合项目实际使用。其他章节
Pyside2 学习系列一 创建包含ui文件的项目 超详细的Pyside2 攻略
Pyside2 学习系列二 PyInstaller打包项目exe 超详细的Pyside2 攻略
Pyside2 学习系列三 PyInstaller打包项目瘦身 超详细的Pyside2 攻略



