我通过下面的办法,成功将一个 270M 的 exe,降低到了 33M。下面分享给大家。参考目录。
如果你打包 PyQt 的项目,打包超过 100M ,那么铁定是可以更小的。
一般 PyQt界面也就是20-40M左右,图片多一张可以按照增加1M估算。
怎么把容量降下来?有通用方法和终极方案(一天包你瘦!成功了请点赞,没成功请留言骂我,谢谢!)。
压缩
打包命令:
pyinstaller
UPX 一般是不可用的:
因为默认是没有安装 UPX 的。
但是 里面是默认会查找的:
upx=True,
upx_exclude=[],
upx_exclude 的作用排除一些特殊的包,如果你不希望这些包被压缩的话。
UPX 下载:
解压后只需要复制其中的 存放到 所在目录即可。
一般在 script 目录:
再次运行命令:
凭借这个技巧 ,我成功让一个 270M的包,减少到了261M,整整少了9M!,好吧,确实,很看运气。光靠压缩达不到理想效果。
2. 失败方案:明确 import 内容(这个不要学)
这是我自作聪明的办法,引以为戒。
我将类似
import openxyxl
全部改为具体的方法
from openpyxl import load_workbook
...
load_workbook('../')
我不仅修改代码,还清空了缓存。
删除了 build 文件夹和 _pycache_ 缓存文件夹。
然而并没有用,最终的exe连1个bit都没减少。
理论上这个方案应该起作用的,但可能因为用的是 Anaconda 环境的原因,导致内部的包还是被关联了进来。
3.虚拟环境。
虚拟环境就是给这个项目单独配置一个python环境。
可以避免环境中包含多余的包。(不想配置虚拟环境的话,也可以通过原本环境的 pip uninstall 掉多余的包,但不建议这么做,毕竟其它项目还得做。。。)。
接下来详细说明在 windows 系统上的 pycharm 中设置虚拟环境,达到打包瘦身的全过程。
注:构造纯净环境虽然可以降低容量,但是操作稍复杂,如果完全小白,遇到问题评论区留言,我两天内会看到。如果你对环境变量,pip 安装有一定了解,肯定没问题。
1.配置虚拟环境
虚拟环境可以避免 Anaconda 环境影响,也能避免对全局环境的删改影响别的项目的环境。虚拟环境 yyds!
希望大家都学会配置虚拟环境,毕竟以后还要开发很多项目。
a.安装虚拟环境工具
virtualenv 是一个专门用来安装虚拟环境的第三方工具,我们先安装它。
在 pycharm 中打开 Terminal 终端,直接输入命令:
pip install virtualenv
安装能够创建虚拟环境的工具。
b.创建一个虚拟环境
virtualenv package_venv
package_venv 是需要新建的虚拟环境存放目录,随意取名。可加个 venv 后缀表示虚拟环境,你要写成 “xxx" 也行。
此时,当前项目下(Terminal 当前指示的目录下)就会出现一个 package_venv 文件夹,里面的内容如下:
Lib: 第三方库,会默认下载的包类似 : pip , setuptools , wheel
Scripts: 一些脚本。虚拟环境的激活,失效等脚本。
注:此时的命令依然是在全局环境下运行,所以安装的 python 版本来自环境变量 path 中设置的 位置,我的版本为 python3.9,所以Lib 中的 版本也是 3.9(复制来源)
你可以用 > python --version 命令查看当前版本,如果想要安装指定的python版本,参考:指定python版本安装虚拟环境
c. 激活虚拟环境
> cd package_venv\Scripts
>
请注意,此时的命令行开头变了:
注意,有(pachage_venv) 标志在开头(虚拟环境文件夹名),才说明你进入了虚拟环境,可以为所欲为了。
再执行 pip install 命令都会安装在虚拟环境而不是你的全局环境中。
d.测试一下
为了保险起见,我们先测试一下虚拟环境里面有几个包:
pip list
只有三个包,整个 Lib 文件夹也只有 14.5M
e. 配置 pycharm
刚才我们只是创建了一个虚拟环境,只是刚好放在我的项目同级目录下而已。接下来,我们要让虚拟环境和pycharm发生关系。让 package_venv 为 pycharm 所用。
不消多说,settings 配置一下,然后 Edit configuration… 一下就行了。
:输入 interpreter 搜索:
点击 “+” 号,然后选择 Existing environment,默认就是刚才设置的 package_venv(没有你就找到它)。
于是,我们的解释器环境就变成了:
2. 配置中也改为虚拟环境目录的
ok 以后,此时如果你再次运行项目,就会发现有了类似的报错:
ModuleNotFoundError: No module named ‘PyQt5’
因为我们的虚拟环境中现在,啥!包!也!没!有!要一个个装上。。。嘤嘤嘤,哭唧唧。
2.安装包
小心!开始一个个安装包进来。盯着自己的 site-package,不能让她胖起来。
法一: 项目中维护了 文件。
检查 的包是否多余,尤其是 numpy,pands, SciPy 等,这些包每个至少 50M 以上。
cd ../../
pip install -r
法二:从每个代码文件开头找到 import 的包名,或者运行项目,缺啥就 install 啥。
我的做法是先用 法一,然后多余的包 pip unstall xxx,我只删掉了最大三个包:numpy,pands, scipy 。如果你代码中只是有一些小计算,替换为其它包吧。
我的安装包过程大致如下, 完了之后 site-package 文件夹有270M,删除上面三个包剩下34M,然后安装了 PyQt5,容量到了181M。(其实不删除多余包也未必就会打进去,但我还是先删除它们保险)
测试运行无报错。
3. 打包啦
激动人心的时刻终于来了。
我现在一共只有 181M 的第三方库,我就不信能打出 270M 来!果然:
33M!啊,你敢信?!我测试了程序的功能,完全没毛病!
从270M到33M,做梦一般。
ps: 这里应该没有用上 UPX ,如果用上,估计还能少几M。
如果你也按照上面的方法压缩成功的话,就点个赞吧。如果有哪个步骤不清楚的,可以留言。