2009-10-24 62 views
6

我開發了一個使用python和wxwidgets的小程序。這是一個非常簡單的程序,只需要一個小框架即可在需要時顯示一些信息,其餘時間它什麼也不顯示,只有任務欄中的圖標。如何使用py2exe減小exe的大小

當我使用py2exe(單文件exe模式,優化)構建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'], 

感謝。

+1

也許它是嵌入式運行時? – 2009-10-24 12:26:21

回答

1

大部分空間是Python運行時本身。 py2exe不會將您的程序「編譯」爲本機x86指令或類似的東西。它只是將Python,您的* .pyc文件以及您的程序使用的任何模塊捆綁到一個獨立運行的軟件包中。

因此,您可以選擇僅分發* .pyc文件,並留給用戶以提供自己的Python分發並安裝任何所需的模塊。這在Windows上不是一個非常流行的選項,但它通常發生在其他地方。

+1

是的,我知道py2exe不會編譯我的程序,但是當我談論可用於減小尺寸的「選項」(如我的文章中所示)時。我不希望獲得小於運行時間的大小,但只是嵌入我需要的可能會導致一個可接受的大小隻是一個小型框架。 – attwad 2009-10-24 12:46:10

4

您的程序很簡單並不意味着它很小。你的程序通過wxWidget棧有很多依賴,6 Mb在所有這些方面看起來並不那麼大。

但是,回到問題。要縮小一個py2exe生成的程序,你可以做一些明顯的事情:

  1. 分佈少的東西:看來你已經開始了這條道路。查看隨程序一起分發的所有內容,並在不需要時刪除它。 DllDepend可以告訴你爲什麼一個DLL與你的程序一起分發(可能是因爲一個pyd需要它)。對於其他模塊,刪除它們,並嘗試它是否仍然有效...

  2. 更好地壓縮它:在你的每個DLL上運行upx。使用7zip最大壓縮級別壓縮最終的程序/壓縮文件。