如何使用py2exe减小exe文件大小
我用Python和wxWidgets开发了一个小程序。这个程序非常简单,只用一个迷你窗口在需要的时候显示一些信息,其余时间什么都不显示,只在任务栏里有个图标。
当我用py2exe把它打包成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 个回答
3
大部分的空间都是Python运行环境本身。py2exe并不是把你的程序“编译”成本地的x86指令,或者其他什么东西。它只是把Python、你的*.pyc文件,以及你程序用到的任何模块打包成一个可以独立运行的包。
所以你可以选择只分发你的*.pyc文件,让用户自己提供Python环境并安装所需的模块。在Windows上,这种做法并不太受欢迎,但在其他地方通常都是这样做的。
5
你的程序虽然简单,但并不意味着它的体积小。考虑到你使用了很多依赖于wxWidget的组件,6MB的大小其实并不算大。
回到问题上,要缩小用py2exe生成的程序,你可以做一些明显的事情:
减少分发的内容:看起来你已经开始朝这个方向努力了。检查一下和你的程序一起分发的所有东西,如果不需要的就删掉。可以用DllDepend工具查看某个DLL为什么会和你的程序一起分发(可能是因为某个pyd文件需要它)。对于其他模块,试着删掉它们,看看程序还能不能正常运行...
更好地压缩:对每个DLL使用upx进行压缩。用7zip以最高压缩级别压缩你的最终程序或压缩包。