如何减小由Pyinstaller生成的可执行文件的文件大小,以下是一些通用提示:

9
我将使用Pyinstaller将一个Python脚本转换为可执行文件,该脚本包含来自各种包(如nltk、begin和json等)的多个导入。对于一个10行代码的脚本,生成的可执行文件大小为54MB,这是不切实际的。我知道它将所有模块打包成一个单独的文件,但它会使文件变得如此之大吗?毕竟Python脚本本身只有2KB。
您有哪些一般的提示可以减少“.exe”文件大小?
我正在使用以下命令转换脚本:
>pyinstaller.py  -F  -o output check.py

我只导入了单个函数,而不是整个模块,例如:

from nltk.metrics.agreement import AnnotationTask

导入的模块具有独立的功能,我选择性地只导入了3-4个函数,但似乎对生成的exe文件大小没有任何影响。所有函数都被浪费地导入到exe文件中了吗?如何避免这种情况?
1个回答

3
您正在比较两个完全不同的东西,您生成的可执行文件不仅包含您的文件,还包括Python解释器和所有导入的模块。查看我在Windows下安装的python 2.7,我发现它占用83MB的空间。 ntlk等库可能也不是最小的,您必须以某种方式将所有这些都包含在可执行文件中。作为比较,我的一个中等规模项目使用cx_freeze生成的文件大约有23MB(其中包括10MB的QT4 dlls),所以您可以尝试一下。

此外,您可以使用UPX压缩可执行文件,如此处所述,这可能会有所帮助。


cfreeze 对我来说出现了错误,但总的来说,与 pyinstaller 相比,它是否输出更小的文件大小? - stackit
1
@Ali 我不知道,很久没有使用pyinstaller了,因为cx_freeze首先支持Python3,没有更深的原因。我建议你先尝试使用UPX来看看它能帮助你解决多少问题。 - Voo
这些模块具有独立的功能,我只选择性地导入了3-4个函数,但这并不会改变文件大小。 - stackit
通常导入一个模块意味着安装程序必须包含整个库(即dll/so文件和一些Python代码的表示),无论您实际使用多少代码(特别是在Python中,这是不可能静态确定的)。 - Voo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接