3

我在 Windows 上使用 Python 3.6 的 Anaconda 发行版,我希望将一个简单的 Python 脚本转换为一个独立的可执行文件。问题是生成的文件非常大(~900mb),而只使用了几个外部库。

更具体地说,我使用 PyQt5 和 pyqtgraph 以及一些集成的 python 库,例如 sys、time、os 和 math。到目前为止,我已经使用了 PyInstaller 和 Nuitka,但我似乎无法大幅减小可执行文件的大小。

我注意到存在一些占用大约 600mb 空间的 mkl 文件。删除这些文件后,我仍然能够运行我的程序,看起来很顺利。我还注意到有两个名为 libopenblas 的文件,它们似乎对程序的运行至关重要,总共有 100mb。

我已经研究过这个问题,我在 Stackoverflow 和其他网站上发现了类似的问题。人们声称他们能够使用 PyInstaller 生成小于 40mb 的 exe 文件。据说,为了实现这种尺寸减小,应该排除所有杂乱的库。但是,我不明白什么是“混乱”。例如,我尝试排除 numpy 并且程序没有运行,尽管事实上我没有在我的程序中直接使用它。显然,正在使用的库有一些依赖项,没有这些依赖项程序就无法运行。

最后,我找到了这个论坛,建议使用虚拟环境而不是 Anaconda。我尝试使用 venv 设置它,但我无法实现它,因为我的 Anaconda 安装会干扰它并且不允许我重新安装所有必要的库。

无论我做什么,我最终都会得到至少 200mb 的数据。如何获得大小小于 40mb 的功能可执行文件?如果像这样的简单程序产生如此大的文件,想象一下如果我决定集成其他库(如 tensorflow 或 scipy)最终会得到什么。这不是一个可行的解决方案,到目前为止我还没有找到解决它的方法。非常感谢任何帮助。

编辑:我尝试从其官方网站安装 Python,并从 Path 中删除了 Anaconda。我最终得到了一个稍小的文件,但它没有运行。

4

1 回答 1

1

我意识到这很旧,但我今天遇到了它并且遇到了同样的问题。

Pyinstaller hello world 程序将编译到大约 12 Mb。但是,一旦您开始做任何实质性的事情,就需要 numpy,这很大。

我有一个程序需要

paramiko
scp

它编译为 12 Mb。

我有另一个需要

numpy
tqdm
nomkl
matplotlib

它编译到 ~200 Mb(压缩到 ~75 Mb)。使用nomkl包可以让安装程序自动将 mkl 库排除在外。您必须删除 numpy,然后安装 nomkl 并重新安装 numpy。如果没有 nomkl,上述程序大约为 1 Gb。

如果您安装了 anaconda,我建议使用 conda 环境而不是虚拟环境。

于 2020-06-22T18:18:49.827 回答