【已解决】pyinstaller打包瘦身,变小 exe 的通用和终极解决方案!

您所在的位置:网站首页 流程图太大怎么缩小尺寸 【已解决】pyinstaller打包瘦身,变小 exe 的通用和终极解决方案!

【已解决】pyinstaller打包瘦身,变小 exe 的通用和终极解决方案!

2024-07-15 15:21| 来源: 网络整理| 查看: 265

我通过下面的办法,成功将一个 270M 的 exe,降低到了 33M。下面分享给大家。参考目录。

如果你打包 PyQt 的项目,打包超过 100M ,那么铁定是可以更小的。 一般 PyQt界面也就是20-40M左右,图片多一张可以按照增加1M估算。

怎么把容量降下来?有通用方法和终极方案(一天包你瘦!成功了请点赞,没成功请留言骂我,谢谢!)。

1.UPX 压缩

打包命令:

pyinstaller main.spec

UPX 一般是不可用的: 提示UPX不可用 因为默认是没有安装 UPX 的。 但是 main.spec 里面是默认会查找的:

upx=True, upx_exclude=[],

upx_exclude 的作用排除一些特殊的包,如果你不希望这些包被压缩的话。

UPX 下载:https://upx.github.io

解压后只需要复制其中的 upx.exe 存放到 pyinstaller.exe 所在目录即可。

一般在 script 目录: 在这里插入图片描述 再次运行命令: 在这里插入图片描述 凭借这个技巧 ,我成功让一个 270M的包,减少到了261M,整整少了9M!,好吧,确实,很看运气。光靠压缩达不到理想效果。

2. 失败方案:明确 import 内容(这个不要学)

这是我自作聪明的办法,引以为戒。 我将类似

import openxyxl

全部改为具体的方法

from openpyxl import load_workbook ... load_workbook('../xx.xlsx')

我不仅修改代码,还清空了缓存。 删除了 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 中设置的 python.exe 位置,我的版本为 python3.9,所以Lib 中的 python.exe 版本也是 3.9(复制来源) 你可以用 > python --version 命令查看当前版本,如果想要安装指定的python版本,参考:指定python版本安装虚拟环境

c. 激活虚拟环境 > cd package_venv\Scripts > activate.bat

请注意,此时的命令行开头变了: 进入虚拟环境的标志 注意,有(pachage_venv) 标志在开头(虚拟环境文件夹名),才说明你进入了虚拟环境,可以为所欲为了。 再执行 pip install 命令都会安装在虚拟环境而不是你的全局环境中。

d.测试一下

为了保险起见,我们先测试一下虚拟环境里面有几个包:

pip list

所有包 只有三个包,整个 Lib 文件夹也只有 14.5M

e. 配置 pycharm

刚才我们只是创建了一个虚拟环境,只是刚好放在我的项目同级目录下而已。接下来,我们要让虚拟环境和pycharm发生关系。让 package_venv 为 pycharm 所用。

不消多说,settings 配置一下,然后 Edit configuration… 一下就行了。

1.settings:输入 interpreter 搜索: 在这里插入图片描述 点击 “+” 号,然后选择 Existing environment,默认就是刚才设置的 package_venv(没有你就找到它)。

于是,我们的解释器环境就变成了: 在这里插入图片描述 2. 配置中也改为虚拟环境目录的 python.exe 在这里插入图片描述

ok 以后,此时如果你再次运行项目,就会发现有了类似的报错:

ModuleNotFoundError: No module named ‘PyQt5’

因为我们的虚拟环境中现在,啥!包!也!没!有!要一个个装上。。。嘤嘤嘤,哭唧唧。

2.安装包

小心!开始一个个安装包进来。盯着自己的 site-package,不能让她胖起来。

法一: 项目中维护了 requirement.txt 文件。 检查 requirements.txt 的包是否多余,尤其是 numpy,pands, SciPy 等,这些包每个至少 50M 以上。

cd ../../ pip install -r requirements.txt

法二:从每个代码文件开头找到 import 的包名,或者运行项目,缺啥就 install 啥。

我的做法是先用 法一,然后多余的包 pip unstall xxx,我只删掉了最大三个包:numpy,pands, scipy 。如果你代码中只是有一些小计算,替换为其它包吧。

我的安装包过程大致如下,requirements.txt 完了之后 site-package 文件夹有270M,删除上面三个包剩下34M,然后安装了 PyQt5,容量到了181M。(其实不删除多余包也未必就会打进去,但我还是先删除它们保险)

测试运行无报错。

3. 打包啦

激动人心的时刻终于来了。

我现在一共只有 181M 的第三方库,我就不信能打出 270M 来!果然: 33M 33M!啊,你敢信?!我测试了程序的功能,完全没毛病!

从270M到33M,做梦一般。

ps: 这里应该没有用上 UPX ,如果用上,估计还能少几M。

如果你也按照上面的方法压缩成功的话,就点个赞吧。如果有哪个步骤不清楚的,可以留言。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3