【问题标题】:What are some general tips to reduce the file size for a Pyinstaller generated executable有哪些一般提示可以减少 Pyinstaller 生成的可执行文件的文件大小
【发布时间】:2013-08-31 21:51:44
【问题描述】:

我正在使用 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文件中吗?如何避免这种情况?

【问题讨论】:

    标签: python optimization pyinstaller


    【解决方案1】:

    您正在比较两个完全不同的东西,您生成的 exe 文件不仅包含您的文件,还包含 Python 解释器和所有导入的模块。查看我在 windows 下安装的 python 2.7,我发现它有 83 MB 大。 ntlk 和 co 可能也不是最小的库,您必须以一种或另一种方式将它们全部包含在可执行文件中。作为比较,我的一个中小型项目使用 cx_freeze 生成了大约 23 MB(其中包括 10 MB 的 QT4 dll),所以你可以尝试一下。

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

    【讨论】:

    • cfreeze 为我抛出了一个错误,但与 pyinstaller 相比,它通常会输出更小的文件吗?
    • @Ali 不知道,好久没用pyinstaller了,因为cx_freeze先有Python3支持,没有更深的原因。我会先尝试 UPX,看看它对你有多大帮助。
    • 模块有独立的功能,我选择性地只导入了3-4个功能,但这不会改变文件大小
    • 通常导入一个模块意味着安装程序必须包含它的整个库(即 dll/so 文件和 python 代码的一些表示),而与您实际使用的代码量无关(尤其是在python中无论如何都无法静态确定)。
    猜你喜欢
    • 1970-01-01
    • 2012-09-02
    • 2011-03-13
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2010-09-17
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多