Pyinstaller 打包的文件过大,根本原因在于包含了无用的依赖文件

发布时间:2024年01月06日

环境要求:Windows,Pyinstaller 6.3.0 (不是这个版本的话,请逐步校对以下我在运行过程中的截图)

本文所使用代码不开源,觉得本文的思路可行的话,请加?QQ - 1398173074?购买 (¥30,注明来意):

本文所使用的代码基于标准库 os、pathlib,共 130 行,包含一个名为 Installer 的类。有排查 exe 冗余依赖文件的函数 dump_exclude,有修改 .spec 文件的函数 modify_spec,提供源代码修改指引的函数 check_src。

该代码附有使用示例,如版本不兼容则要求使用者一定的代码能力,因本人学业繁忙不能帮忙调试,购买前请三思。

排查依赖文件

使用 pyinstaller -D 打包会生成一个 exe 和一个文件夹 _internal

使用 pyinstaller -F 打包则会生成一个 exe

但实际上,这个 exe 相当于 exe 和 _internal 的压缩包

在每次运行的时候,这个 exe 会解压到临时目录的一个文件夹中

而这个文件夹的内容与 _internal 文件夹是一致的,故可以研究 _internal 文件夹中的冗余内容,进而对 pyinstaller -F 打包的 exe 进行瘦身

如果会点英文的话,会发现 _internal 中其实有很多 .dll、.pyd 是不会用到的,但是一个一个删太慢了,有什么效率高的方法吗?

利用动态库加载时机 (聪明的同学自行操作,省省钱),便可以快速地得到不需要的文件列表,并写入 exclude.txt 中

接下来的难题就是,如何告诉 pyinstaller 我们不需要这些依赖文件

修改源代码

运行 pyinstaller -F 生成 .spec 文件

这个文件实际上是一个 python 文件,看看第一行就知道了

在 .spec 文件中添加以下代码

EXE 是 pyinstaller 源代码中的一个类,my_exclude 是我们自定义的类属性,通过这个方法,要排除的文件列表就成功传送到 pyinstaller 的源代码中了

接着就是修改 pyinstaller 的源代码,首先找到 api.py 所在文件

在指定位置添加以下代码

运行 pyinstaller *.spec 即可完成打包

程序瘦身结果

除修改源代码之外,本文的打包流程如下:

瘦身前 (107 MB):

瘦身后 (66 MB)

文章来源:https://blog.csdn.net/qq_55745968/article/details/135430884
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。