2013年2月20日 星期三

py2exe用法

py2exe 能夠把 Python script 轉換成在 windows 上獨立執行(即不需額外安裝 Python)的 exe 檔
(加上其它必須的執行期函式庫)。對於不考慮跨平台問題的發佈來說,非常方便。 

使用方式

假設目前有一 Python script 名為 "hello.py",透過如下的一個 setup.py script 來產生執行檔:
from distutils.core import setup
import py2exe
setup(console=["hello.py"])
setup(console=["..."]) 中的檔名替換為要產生 exe 的 script 檔名.然後在 command line 下執行
此 script: 
setup.py py2exe

之後會產生一 dist 目錄在目前目錄中,此目錄即包含該執行檔及其它必須檔案,必須全部一起發佈. 

上述 setup.py 中指定產生一個 console 程式,若要產生一個沒有 console 視窗的程式,將 "console" 替
換成 "windows": 
setup(windows=["hello.py"])

若要一次產生多個執行檔,只要將多個 script 檔名以 list 方式傳給 setup() 即可:
setup(console=["hello.py", "hello1.py", "hello2.py"])
亦可以同時產生 console 和 windows 程式:
setup(console=["hello.py", "hello1.py"], 
windows=["hello2.py"])
應用程式有時會使用到一些外部檔案,例如設定檔,字型或是圖檔,透過 setup() 的 data_files 參數,
可以將這些額外的檔案加入發佈目錄中。將一個或多個 (目的目錄, [來源檔 1, 來源檔 2...來源檔 n]) 
形成的 tuple,包裝成 list 指派給 data_files參數即可: 
setup(console=["hello.py", "hello1.py"], windows=["hello2.py"],
data_files=[("img",
                  [r"d:\documents\matrix.jpg",
                   r"d:\documents\Batman.jpg"]),
                 ("xml",
                  [r"D:\tmp\mypaint.xml",
                   r"D:\tmp\mypuzzle.xml",
                   r"D:\tmp\mypuzzle1.xml"])])
產生之後的 dist 目錄中,應該會有一 img 目錄,內含 matrix.jpg 和 batman.jpg 兩個檔案,以及 xml
目錄,內含三個 xml 檔案。 
另外 py2exe 還提供了包裝成 windows service 和 COM server 的功能,由於目前沒有用到所以沒有研究
。另外 Python 的 GUI toolkit - Tkinter 亦可正常使用,只是包裝後會多出 2MB 多的 Tkinter
 runtime,讓程式瞬間增肥許多。

沒有留言: