使用PyInstaller或cx_Freeze在Anaconda2中生成的文件大小非常大

3

看起来 PyInstaller 和 cx_Freeze 将包含一个 Anaconda2 环境中的许多包。

使用其中任意一个都会生成一个超过600MB的文件,这主要是由于一系列的包含关系,最终导致了 Numpy 的包含,然后又包含了几乎所有其他内容。

以下是导致 600MB+ 包含大小的示例:

import sys
from sys import argv
from os import path
from Tkinter import *
import tkFileDialog
from PyQt4 import QtCore, QtGui, uic, QtOpenGL
from moviepy.editor import *

虽然看起来不是很多,但如果不显式地排除Numpy,我无法将文件大小缩小,即使这样,它仍然约为140MB,无法执行。

有人处理过这种情况吗?对于一个小应用程序来说,600MB太大了。


当您不排除任何内容时,可执行文件是否正常工作? - J.J. Hakala
是的,可执行文件运行得很好,但我需要分发这个可执行文件,所以600MB太大了 :( - Matthew Muller
2个回答

6

这与Anaconda无关。使用标准的Python安装程序也会得到相同的大小。

你的发行版之所以如此庞大,是因为需要提供额外的软件包。其中一个非常大的部分是PyQt4。它需要大约250MB的磁盘空间来存储所有的Qt库和Python绑定。另外,正如你已经写过的,numpy还需要占据大量的磁盘空间(在我的电脑上是250MB)。如果你依赖这些软件包,那么就没有太多办法来减少所需的磁盘空间。

然而,你可以排除掉不需要的软件包。我发现cx_freeze喜欢包括已经安装在你的Python环境中的软件包,无论你是否在项目中使用它们。因此,我建议创建一个虚拟环境,只包含你在项目中需要的软件包。另外,你可能还想从构建中排除tkinter。


3

这个问题直接与Anaconda有关。

当使用Pyinstaller构建一个exe文件时,由于Anaconda的软件包连接方式不同,就会包含大量的无用内容。

如果使用非Anaconda版本的Python以及适用于非pip软件包的wheels,则可以解决此问题。


3
我的经历也表明了同样的情况。我曾经在Windows上使用Anaconda中的pyinstaller将一个小软件打包成.exe文件,结果它生成了一个大约40兆的文件夹。在Python中没有引入任何新模块的情况下,现在它却变得荒谬至499兆!如果在Anaconda之外做同样的事情,它的大小就又降回到了40兆。 - Jason
1
可能Miniconda不会有这个问题,因为链接是最小化的。 - Matthew Muller
Anaconda绝对是问题所在。在安装了Anaconda的机器上,生成的文件夹超过了600MB。而在只安装了Python + Pandas/Numpy的机器上,它只有100MB。 - DJK

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