参考链接:

https://www.zhihu.com/question/281858271
https://mp.weixin.qq.com/s/7jNrnC_XdF9q9N5GWyfW6Q

Python 打包成 exe
运行命令:

python naughtyconfession.py

按照之前的教程,不把音乐,字体,图片等文件打包进exe文件的话,只需要在终端执行:

pyinstaller -F naughtyconfession.py -w

效果如下:
在这里插入图片描述
打包后的程序大小为:
在这里插入图片描述
可以发现,pyinstaller会自动收集打包过程所需的一些py依赖包,不过大家有没有发现一些问题:
在这里插入图片描述
我一个整蛊小程序和numpy还有scipy这些库有半毛钱关系啊???

为了解决这个问题,我们可以修改刚刚运行打包命令时生成的:

naughtyconfession.spec

这个文件在之前的文章里介绍过,打开之后是这样子的:
在这里插入图片描述
你可以在第十三行添加你认为打包过程中不需要的包,这样pyinstaller在打包的过程中就不会再使用这些包了。重新运行一下命令:

pyinstaller -F naughtyconfession.spec
注意这次是naughtyconfession.spec而不是naughtyconfession.py啦!!!

效果如下:
在这里插入图片描述
可以发现打包后的程序体积从48.5MB下降到了15.1MB!!!

显然,删除这两个包并不影响打包后的程序的正常运行,但是每次去终端找所有不必要使用的py包也挺麻烦的,有时候也容易弄错,比如一些包存在依赖关系,你盲目地去掉一个之后是会报错的。那么,如何才能更高效地缩小pyinstaller打包后的程序体积呢?别急,我们接着看。

2.使用虚拟环境

显然,一个最直接的想法是新建一个虚拟环境,里面只装我们需要的py包,这样打包过程中就不会搞进去一些没用的py包了。首先,我们安装一下pipenv这个包,方便我们创建虚拟环境:

pip install pipenv

在这里插入图片描述
然后执行如下命令建立虚拟环境:

pipenv install

效果如下:
在这里插入图片描述
接着执行如下命令进入虚拟环境:

pipenv shell

效果如下:
在这里插入图片描述
安装运行我们程序所需要的依赖包:

pip install pygame

以及打包我们程序所需要的依赖包:

pip install pyinstaller

然后,重新运行一下我们的打包命令:

pyinstaller -F naughtyconfession.py -w

效果如下:
在这里插入图片描述
可以发现,程序已经从一开始的48.5MB下降到了11.4MB了,还是比较成功的。
没啥大问题,那么能不能进一步压缩程序体积呢?

3.upx压缩

查找资料的过程中,我发现了一个好东西:

https://github.com/upx/upx

详细的介绍自己去网站上看,简单概括一下就是(内容来自百度词条):

UPX (the Ultimate Packer for eXecutables)
是一款先进的可执行程序文件压缩器,压缩过的可执行文件体积缩小50%-70% ,
这样减少了磁盘占用空间、网络上传下载的时间和其它分布以及存储费用。
通过 UPX 压缩过的程序和程序库完全没有功能损失和压缩之前一样可正常地运行,
对于支持的大多数格式没有运行时间或内存的不利后果。 

具体使用起来十分方便,首先,去官网下载对应版本的upx文件:

https://github.com/upx/upx/releases/tag/v3.96

在这里插入图片描述

显然,一般大家要的是:

https://github.com/upx/upx/releases/download/v3.96/upx-3.96-win64.zip

下载完成后将其放在我们需要打包的py文件所在的目录:
在这里插入图片描述
然后运行如下命令就ok啦:

pyinstaller -F naughtyconfession.py -w --upx-exclude=vcruntime140.dll

这里禁用vcruntime140.dll的原因是参考了这里:

https://github.com/pyinstaller/pyinstaller/issues/1565

最终打包的效果如下:

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐