我用wxPython做了簡單的代碼編輯器。文件大小(python文件)是1.3 KB。但是當我使用PyInstaller創建可執行文件時,我得到了30 MB文件!有沒有辦法減小文件大小?順便說一句,我沒有進口整個wx圖書館,只有我需要的組件(例如from wx import Frame
)。PyInstaller非常大的文件大小
使用Linux,Fedora 18 64bit。
我用wxPython做了簡單的代碼編輯器。文件大小(python文件)是1.3 KB。但是當我使用PyInstaller創建可執行文件時,我得到了30 MB文件!有沒有辦法減小文件大小?順便說一句,我沒有進口整個wx圖書館,只有我需要的組件(例如from wx import Frame
)。PyInstaller非常大的文件大小
使用Linux,Fedora 18 64bit。
wxPython是一個很大的庫,所以當你創建一個可執行文件時,它們往往會在20到30 MB之間。還要注意,Python本身有點笨重,因爲Python是一種解釋性語言。所以當你創建exe文件時你還包括Python解釋器。
使用py2exe,我已經得到10 MB以下的可執行文件,但這是一個痛苦,並不適用於所有項目。這真的取決於你還在使用什麼。你可以閱讀我的冒險與py2exe here。
使其更小的另一種方法是使用壓縮程序。這有時起作用,有時不起作用。
您還可以告訴大多數這些二進制創建工具排除項目。你也可以嘗試。
我發佈了一個相當簡單的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',]
你能解釋一下如何使用pyi-archive_viewer來查找最大的依賴關係嗎?因爲我所得到的是一個名稱列表: - /另外,你在哪裏放置兩個排除列表?在規格的排除領域?你事先連接兩個? – gaborous
目前規範文件並不容易獲取,但如果我正確記得,您可以使用py命令來執行pyi-archive-viewer,然後轉儲出您在show方法中看到的數據:https:/ /github.com/pyinstaller/pyinstaller/blob/develop/PyInstaller/utils/cliutils/archive_viewer.py。 –
上面的第一個排除被傳遞給Analysis調用。在註釋中提到的第二個排除列表是從Analysis調用的結果的純屬性中移除的模塊名稱。 –
感謝您的回答。我會嘗試使用UPX,或者我會嘗試用C++重新編寫我的程序,然後使用gcc編譯它 – JadedTuna
聽起來像是一個計劃。祝你好運! –