7

我使用 wxPython 制作了简单的代码编辑器。文件大小(python 文件)为 1.3 KB。但是当我使用 PyInstaller 创建可执行文件时,我得到了30 MB 的文件!有没有办法减小文件大小?顺便说一句,我没有导入整个wx库,只有我需要的组件(例如from wx import Frame)。

使用 Linux,Fedora 18 64 位。

4

2 回答 2

6

wxPython 是一个很大的库,所以当你创建一个可执行文件时,它们的大小往往在 20 到 30 MB 之间。另请注意,Python 本身有点笨重,因为 Python 是一种解释型语言。因此,当您创建 exe 时,您还包括 Python 解释器。

使用 py2exe,我得到了低于 10 MB 的可执行文件,但这很痛苦,并且不适用于所有项目。这真的取决于你还在使用什么。你可以在这里阅读我使用 py2exe 的冒险经历。

另一种使其更小的方法是使用压缩程序。这有时有效,有时无效。

您还可以告诉大多数这些二进制创建工具排除项目。你也可以试试。

于 2013-10-08T14:02:09.470 回答
3

我发布了一个相当简单的 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',]
于 2013-11-20T06:23:39.103 回答