PyInstaller和Nuitka生成的文件非常大,如何减小文件大小?

4
我正在Windows上使用Anaconda分发的Python 3.6,希望将一个简单的Python脚本转换为独立的可执行文件。问题在于,生成的文件非常大(约900MB),而仅使用了一些外部库。
具体来说,我使用PyQt5和pyqtgraph以及一些集成的Python库(如sys,time,os和math)。到目前为止,我已经尝试使用PyInstaller和Nuitka,但貌似无法显著减小可执行文件的大小。
我注意到存在一些mkl文件,它们占用了大约600MB的空间。删除这些文件后,我仍然能够运行程序,看起来没有问题。我还注意到有两个名为libopenblas的文件,它们似乎对程序的操作至关重要,并且总共占用了100MB的空间。
我查询了类似的问题并在Stackoverflow和其他网站上找到了答案。人们声称他们能够使用PyInstaller生成小于40MB的exe文件。据说为了实现这种大小的减少,应该排除所有杂项库。然而,我不知道什么算是"杂项"。例如,我尝试排除numpy,但程序不能运行,尽管我没有直接在我的程序中使用它。显然,正在使用的库有一些依赖性,没有这些依赖,程序就无法运行。
最后,我在这个论坛上发现建议使用虚拟环境而不是Anaconda。我尝试使用venv设置它,但我遇到了问题,因为我的Anaconda安装干扰了它,并且不允许我重新安装所有必要的库。
无论我做什么,我总是最少有200MB的数据量。如何得到一个小于40MB大小的功能性可执行文件?如果像tensorflow或scipy这样的其他库被整合,那么这样一个简单的程序将产生如此庞大的文件,这不是一个可行的解决方案,到目前为止,我还没有找到解决这个问题的方法。非常感谢任何帮助。
编辑:我尝试从官方网站安装Python并将Anaconda从PATH中删除。结果我得到了一个稍微小一点的文件,但是无法运行。
1个回答

3

我知道这是一篇老文章,但今天我偶然发现并尝试着解决了相同的问题。

一个Pyinstaller的"hello world"程序编译后大约有12 Mb大小。但是,一旦你开始进行任何实质性的工作,就会需要numpy,这个库也比较大。

我有一个程序需要使用numpy,它将程序打包成exe文件后大小为150 Mb。

paramiko
scp

这个编译后的大小为12 Mb。

我还有一个需要的文件

numpy
tqdm
nomkl
matplotlib

它编译后大约为200 Mb (压缩为大约75 Mb)。使用nomkl包可以使安装程序自动排除mkl库。您需要先删除numpy,然后安装nomkl并重新安装numpy。如果不使用nomkl,则上述程序大小约为1 Gb。

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


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