7

我使用 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'],

谢谢。

4

2 回答 2

5

您的程序很简单这一事实并不意味着它很小。您的程序通过 wxWidget 堆栈有很多依赖关系,考虑到这一切,6 Mb 看起来并没有那么大。

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

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

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

于 2009-10-24T21:08:14.427 回答
3

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

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

于 2009-10-24T12:41:50.327 回答