前言
用anaconda安装的python写了一个简短的程序打包发布exe,发现体积200多M,从网上吸取了经验,使用pipenv重新打包到10M以下。
一、问题:python生成的exe体积过大
笔者写了个小的程序,在引入一个外部依赖包后,生成的exe体积直接增大几十倍到了数百M,显然是不合理的。
二、问题解决
善用百度必应谷歌的我开始在网上搜,发现这也只是一个小问题,网上已经有了很多解决方案,在此记录一下,留作以后备用。
1.使用from … import
上面提到的将 import xxx
改为 from xxx import xxx
虽然在此无效,但对于一些动辄几百M的依赖包(比如numpy
、Pandas
)是有用的。
2.使用压缩工具UPX
UPX是一款非常不错的程序文件压缩工具,使用upx压缩过的可执行文件体积缩小50%-70% ,可以大大减少了磁盘占用空间。
但是我懒不想装新程序 但是我觉得自己面对的问题应该是哪里没处理好,而不是代码写的太多导致程序很大,用这个治标不治本。
以及我看到了第三个方法:
3.在anaconda下使用pipenv重新打包exe
看起来这个才是最靠谱的,因为我在pycharm中直接用的conda里的python (因为懒没装本地环境)。
“而在anaconda环境下打包时会引入很多不必要的文件,导致在生成exe文件过大,而在虚拟纯净环境里打包程序可以有效避免。”对比自己的情况,非常契合。
以下为操作步骤:
- 首先在需要作为虚拟环境的文件夹内执行
pip install pipenv
命令 - 在安装成功后使用
pipenv shell
命令,进入虚拟环境(pipenv建的虚拟环境名好像是随机的) - 进入虚拟环境后,先使用
pipenv install pyinstaller
安装pyinstaller(这是在虚拟环境内安装,和外面环境安装的互不干涉) - 安装你python文件需要的库,安装命令是
pipenv install 包名
,和原来pip安装库的命令差不多,但要注意不是pip是pipenv - 最后就可以在虚拟环境内使用
pyinstaller -F 文件名
进行打包了,打包好的exe程序在当前目录下的dist文件夹内。
试了一下,回到10M以内,nice~
总结
以上就是本次笔记,除了做一份备忘之外,还有就是联系解决问题的思路(虽然靠百度也不是啥高深路子)
本文参考链接:https://www.zhihu.com/question/268397385/answer/2505930043