减小pyinstaller可执行文件大小

7

我只有一行用Python编写的代码input(),使用--onefile选项将其打包为pyinstaller。生成的exe文件大小为4577 kB,几乎达到5Mb。如何减小它的大小或者排除一些自动绑定的库?

3个回答

11

啊,您没有在单独的虚拟环境中创建构建。

为构建目的创建一个虚拟环境,并在该环境中安装所需的软件包。

在命令提示符中执行以下操作以创建虚拟环境

python -m venv build_env

cd build_env

C:\build_env\Scripts\Activate

您将会看到这个>>(build_env) C:\build_env

安装所有脚本所需的软件包,从pyinstaller开始

pip install pyinstaller

一旦您安装好了,就像以前一样构建exe文件。 使用虚拟环境构建的exe文件将更快且更小! 有关更多详细信息,请查看https://python-forum.io/Thread-pyinstaller-exe-size


1
我按照你的方法进行操作。没有使用任何包,文件大小只有6MB,但是运行时报错了,因为我需要pandas。然后我执行了pip install pandas命令,结果文件大小增加到了212MB!怎么办啊?!:( - mah65
我发现build_env中的pyinstaller也使用了其他环境中的pyinstaller和python来构建!这就是为什么大小变化不大的原因! - mah65
2
我找到了解决我的问题的方法:https://stackoverflow.com/questions/59524507/how-to-make-pyinstaller-not-use-anaconda-and-build-a-small-size-exe-file - mah65
运行“pip install pyinstaller”将使用我们的全局环境。我们需要通过运行位于'C:\build_env\Scripts\activate'的“activate”来切换到新创建的环境...前往脚本文件夹并在cmd上运行“activate”。 - Ali Sajjad

2
使用pyinstaller创建的.exe文件包括Python解释器和脚本中使用的所有模块。也许,你正在使用的模块本身就有很大的库。你可以尝试使用py2exe,但它可能不适用于所有项目。另一种缩小文件大小的方法是使用压缩程序,例如使用UPX压缩可执行文件(请参考:http://htmlpreview.github.io/?https://github.com/pyinstaller/pyinstaller/blob/v2.0/doc/Manual.html#a-note-on-using-upx)。你还可以尝试排除一些项,但要谨慎,以免删除这些项会影响到你的.exe的功能。

2
我说我只有一行代码 input(),它占用了近5MB的空间。所以我没有加载任何模块。 - Jakub Bláha
这取决于朋友。它无法被控制。尝试使用py2exe创建exe文件。 - Dragon

0

我曾经遇到过类似的问题并找到了解决方案。我使用了Windows终端预览程序。该程序允许创建各种虚拟环境,如Windows Power Shell(顺便说一下,还有Linux Ubuntu。另外值得注意的是:您可以在此程序中安装许多终端,并且甚至可以同时打开几个。非常酷)。

在Windows终端预览中的Windows Power Shell中,我安装了所有必要的库(如pandas等),然后打开了我的文件路径并尝试使用以下命令:

pyinstaller --onefile -w 'filename.py'

...但是,输出的exe没有起作用。由于某种原因,控制台显示缺少一个库(我之前已经安装了)。我在模仿auto-py-to-exe库时找到了解决方案。这个GUI使用的命令是:

pyinstaller --noconfirm --onedir --console  "C:/Users/something/filename.py"

这个方法很有效。 我将输出的exe程序大小从911MB减小到了82.9MB!!!

顺便说一下:911MB是由auto-py-to-exe生成的输出大小。

我想知道为什么还没有人创建一个压缩器,它可以读取代码,检查哪些库是代码的一部分,然后只将它们放入压缩中。在我的情况下,auto-py-to-exe可能加载了我安装过的所有库。这就解释了这个压缩文件夹的大小。

有人建议使用https://virtualenv.pypa.io/en/stable/,但我认为这个库对我来说非常困难。


1
--onefile--onedir 做的事情是不同的(请参见 https://pyinstaller.readthedocs.io/en/stable/usage.html#what-to-generate)。可执行文件的大小是无法比较的,因为 --onedir 不会将所需的库打包到可执行文件中,而是将它们放在旁边。 - David Reed
真的,但在“--onedir”情况下(最终由我使用):我测量了一个文件夹的大小,而不是.exe文件。 “大小问题”与常规压缩器“吸入”通过Anaconda终端安装的所有库有关(无论何时)。当我使用“auto-py-to-exe”库时,我也可以选择“--onedir”。输出的大小如我所说的是911 MB。 - Paweł Pedryc

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