如何使用py2exe减小exe的大小

时间:2009-10-24 12:20:45

标签: python executable py2exe filesize

我使用python和wxwidgets开发了一个小程序。这是一个非常简单的程序,它只使用一个迷你框架在需要时显示一些信息,其余时间它什么都没显示,只在任务栏中显示一个图标。

当我使用py2exe(单文件exe模式,优化)构建exe时,我得到一个6MB大小的文件!

我尝试不包含一些不需要的库或dll,但我仍然无法理解为什么我会在任务栏中只获得一个迷你框架和图标这么大的文件。

有没有办法减少py2exe生成的exe的大小?

这就是我自己做了一些减少的事情:

options = {"py2exe":{"excludes" : ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger',
                                'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl',
                                'Tkconstants', 'Tkinter'],
                    "dll_excludes": ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll', 'tcl84.dll',
                                'tk84.dll'],

感谢。

2 个答案:

答案 0 :(得分:4)

你的程序很简单并不意味着它很小。你的程序通过wxWidget堆栈具有很多依赖性,并且考虑到所有这些,6 Mb看起来并不那么大。

但是,回到这个问题。要缩小py2exe生成的程序,你可以做一些显而易见的事情:

  1. 分发更少的东西:看来你已经开始了这条路。查看随程序一起分发的所有内容,如果不需要,请将其删除。 DllDepend可以告诉你为什么DLL与你的程序一起分发(可能是因为pyd需要它)。对于其他模块,删除它们并尝试它是否仍然有效...

  2. 更好地压缩它:在每个dll上运行upx。使用7zip最大压缩级别压缩您的最终程序/存档。

答案 1 :(得分:1)

大部分空间都是Python运行时本身。 py2exe不会将您的程序“编译”为本机x86指令,或类似的东西。它只是将Python,您的* .pyc文件以及您的程序使用的任何模块捆绑到一个独立运行的包中。

因此,您可以选择仅分发您的* .pyc文件,并将其留给用户以提供他们自己的Python发行版并安装任何所需的模块。这在Windows上不是一个非常流行的选项,但它通常发生在其他地方。