2013-10-08 92 views
7

我用wxPython做了簡單的代碼編輯器。文件大小(python文件)是1.3 KB。但是當我使用PyInstaller創建可執行文件時,我得到了30 MB文件!有沒有辦法減小文件大小?順便說一句,我沒有進口整個wx圖書館,只有我需要的組件(例如from wx import Frame)。PyInstaller非常大的文件大小

使用Linux,Fedora 18 64bit。

回答

5

wxPython是一個很大的庫,所以當你創建一個可執行文件時,它們往往會在20到30 MB之間。還要注意,Python本身有點笨重,因爲Python是一種解釋性語言。所以當你創建exe文件時你還包括Python解釋器。

使用py2exe,我已經得到10 MB以下的可執行文件,但這是一個痛苦,並不適用於所有項目。這真的取決於你還在使用什麼。你可以閱讀我的冒險與py2exe here

使其更小的另一種方法是使用壓縮程序。這有時起作用,有時不起作用。

您還可以告訴大多數這些二進制創建工具排除項目。你也可以嘗試。

+0

感謝您的回答。我會嘗試使用UPX,或者我會嘗試用C++重新編寫我的程序,然後使用gcc編譯它 – JadedTuna

+0

聽起來像是一個計劃。祝你好運! –

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',] 
+0

你能解釋一下如何使用pyi-archive_viewer來查找最大的依賴關係嗎?因爲我所得到的是一個名稱列表: - /另外,你在哪裏放置兩個排除列表?在規格的排除領域?你事先連接兩個? – gaborous

+0

目前規範文件並不容易獲取,但如果我正確記得,您可以使用py命令來執行pyi-archive-viewer,然後轉儲出您在show方法中看到的數據:https:/ /github.com/pyinstaller/pyinstaller/blob/develop/PyInstaller/utils/cliutils/archive_viewer.py。 –

+0

上面的第一個排除被傳遞給Analysis調用。在註釋中提到的第二個排除列表是從Analysis調用的結果的純屬性中移除的模塊名稱。 –