【已解决】pyinstaller打包瘦身,变小 exe 的通用和终极解决方案! |
您所在的位置:网站首页 › 流程图太大怎么缩小尺寸 › 【已解决】pyinstaller打包瘦身,变小 exe 的通用和终极解决方案! |
我通过下面的办法,成功将一个 270M 的 exe,降低到了 33M。下面分享给大家。参考目录。 如果你打包 PyQt 的项目,打包超过 100M ,那么铁定是可以更小的。 一般 PyQt界面也就是20-40M左右,图片多一张可以按照增加1M估算。 怎么把容量降下来?有通用方法和终极方案(一天包你瘦!成功了请点赞,没成功请留言骂我,谢谢!)。 1.UPX 压缩打包命令: pyinstaller main.specUPX 一般是不可用的: 因为默认是没有安装 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_venvpackage_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!啊,你敢信?!我测试了程序的功能,完全没毛病! 从270M到33M,做梦一般。 ps: 这里应该没有用上 UPX ,如果用上,估计还能少几M。 如果你也按照上面的方法压缩成功的话,就点个赞吧。如果有哪个步骤不清楚的,可以留言。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |