我使用 wxPython 制作了简单的代码编辑器。文件大小(python 文件)为 1.3 KB。但是当我使用 PyInstaller 创建可执行文件时,我得到了30 MB 的文件!有没有办法减小文件大小?顺便说一句,我没有导入整个wx库,只有我需要的组件(例如from wx import Frame
)。
使用 Linux,Fedora 18 64 位。
我使用 wxPython 制作了简单的代码编辑器。文件大小(python 文件)为 1.3 KB。但是当我使用 PyInstaller 创建可执行文件时,我得到了30 MB 的文件!有没有办法减小文件大小?顺便说一句,我没有导入整个wx库,只有我需要的组件(例如from wx import Frame
)。
使用 Linux,Fedora 18 64 位。
wxPython 是一个很大的库,所以当你创建一个可执行文件时,它们的大小往往在 20 到 30 MB 之间。另请注意,Python 本身有点笨重,因为 Python 是一种解释型语言。因此,当您创建 exe 时,您还包括 Python 解释器。
使用 py2exe,我得到了低于 10 MB 的可执行文件,但这很痛苦,并且不适用于所有项目。这真的取决于你还在使用什么。你可以在这里阅读我使用 py2exe 的冒险经历。
另一种使其更小的方法是使用压缩程序。这有时有效,有时无效。
您还可以告诉大多数这些二进制创建工具排除项目。你也可以试试。
我发布了一个相当简单的 wxPython 应用程序,它最终大约为 9.8MB。
如果您使用作为 PyInstaller 一部分的 ArchiveViewer.py 脚本,您可以确定是什么占用了这么多空间。
这是使用 python 2.7.5,没有 UPX,并且不包括这些模块:
excludesPassedToAnalysis = ['ssl',
'_ssl',
# coverage uses _socket. :(
#'_socket',
'select',
'pywin',
'unittest',
'win32ui',
'bz2',
'doctest',
'os2emxpath',
'servicemanager',
'xml.parsers.expat',
'sitecustomize',
'tarflie',
'email',
'urllib',
'urllib2',
# This exclude isn't optional in order to get pubsub working
# correctly in wxPython 2.9.3 or later.
'wx.lib.pubsub.autosetuppubsubv1']
# These are removed from a.pure after the Analysis object is created.
excludeEncodings = \
['encodings.base_64_codec',
'encodings.big5',
'encodings.big5hkscs',
'encodings.bz2_codec',
'encodings.cp037',
'encodings.cp1006',
'encodings.cp1026',
'encodings.cp1140',
'encodings.cp1258',
'encodings.cp424',
'encodings.cp437',
'encodings.cp500',
'encodings.cp720',
'encodings.cp737',
'encodings.cp775',
'encodings.cp850',
'encodings.cp852',
'encodings.cp855',
'encodings.cp856',
'encodings.cp857',
'encodings.cp858',
'encodings.cp860',
'encodings.cp861',
'encodings.cp862',
'encodings.cp863',
'encodings.cp864',
'encodings.cp865',
'encodings.cp866',
'encodings.cp869',
'encodings.cp874',
'encodings.cp875',
'encodings.cp932',
'encodings.cp949',
'encodings.cp950',
'encodings.euc_jis_2004',
'encodings.euc_jisx0213',
'encodings.euc_jp',
'encodings.euc_kr',
'encodings.gb18030',
'encodings.gb2312',
'encodings.gbk',
'encodings.hex_codec',
'encodings.hp_roman8',
'encodings.hz',
'encodings.iso2022_jp',
'encodings.iso2022_jp_1',
'encodings.iso2022_jp_2',
'encodings.iso2022_jp_2004',
'encodings.iso2022_jp_3',
'encodings.iso2022_jp_ext',
'encodings.iso2022_kr',
'encodings.iso8859_10',
'encodings.iso8859_11',
'encodings.iso8859_13',
'encodings.iso8859_14',
'encodings.iso8859_15',
'encodings.iso8859_16',
'encodings.iso8859_2',
'encodings.iso8859_3',
'encodings.iso8859_4',
'encodings.iso8859_5',
'encodings.iso8859_6',
'encodings.iso8859_7',
'encodings.iso8859_8',
'encodings.iso8859_9',
'encodings.johab',
'encodings.koi8_r',
'encodings.koi8_u',
'encodings.mac_arabic',
'encodings.mac_centeuro',
'encodings.mac_croatian',
'encodings.mac_cyrillic',
'encodings.mac_farsi',
'encodings.mac_greek',
'encodings.mac_iceland',
'encodings.mac_latin2',
'encodings.mac_roman',
'encodings.mac_romanian',
'encodings.mac_turkish',
'encodings.mbcs',
'encodings.palmos',
'encodings.ptcp154',
'encodings.quopri_codec',
'encodings.raw_unicode_escape',
'encodings.rot_13',
'encodings.shift_jis',
'encodings.shift_jis_2004',
'encodings.shift_jisx0213',
'encodings.string_escape',
'encodings.tis_620',
'encodings.undefined',
'encodings.utf_32',
'encodings.utf_32_be',
'encodings.utf_32_le',
'encodings.utf_7',
'encodings.uu_codec',
'encodings.zlib_codec',]