py2exe 簡介
公英哲
2023-12-01
py2exe 簡介
譯自http://starship.python.net/crew/theller/py2exe/
版本:0.5
用途:轉換 python描述語言成為獨立的windows程式
Copyright (c) 2001, 2002, 2003, 2004 Thomas Heller, Mark Hammond.
簡介
py2exe 是一個Python distutils 延伸程式,可以編譯 python描述語言成為windows程式,可以執行在未安裝python 的Windows作業系統上.
被實作程式: wxPython, Tkinter, Pmw, PyGTK, pygame, win32com client 和server模組和其它程式.
py2exe 是以open-source的版權來散布.
新聞
py2exe 0.5.0 釋放.
系統需求Python 2.3 ,因為使用新的zipimport特性.所謂 zipimport機制能夠處理早期imports的警告及編碼模組.
它會建立單一目錄,並將必要及產生的檔案放在這個目錄內.
你可以一次建立多個 console和 gui程式,你可以在同一個目錄中來執行,可以是exe檔的windows服務或是exe和dll的 com 伺服器. com 伺服器可以 expose一個或多個com 物件類別.
所有純的Python檔案會被壓縮在一的zip壓縮檔中,這個檔可以分享給其它的程式.並可以使用由程式embedding Python.但延伸模組無法被 imported從zipfiles,簡單純 Python 載入是包含在 zipfile該模組載入延伸由檔案系統(不需要在sys.path變數中).
現在簡化經由 py2exe來建立程式,提供你已經安裝的MSVC6 - 不再相依於win32all 原始程式.
現在建立的執行檔是標準的PE 執行檔
使用py2exe
假設你已經寫好一個程式 myscript.py 你要轉換它成為一個執行的視窗程式, 能夠執行在沒有安裝python的電腦上.如果你沒有寫一個 distutils setup-script, 寫一個並插入述敘 'import py2exe'在呼叫setup函式之前:
# setup.py
from distutils.core import setup
import py2exe
setup(console=["myscript.py"])
執行
python setup.py py2exe --help
將會顯示所有py2exe在命令列可用的參數 .
如下:
Global options:
--verbose (-v) 瀏覽模式)
--quiet (-q) 不顯示訊息)
--dry-run (-n) 不真的執行
--help (-h) 顯示求助訊息
'py2exe' 命令選項:
--optimize (-O) 最佳化準位: -O1 for "python -O", -O2 for "python
-OO", and -O0 to disable [default: -O0]
--dist-dir (-d) 輸出最後的目錄(內定 dist)
--excludes (-e) 使用","來分開排除的模組
--ignores 使用","來分開如果指定的檔案找不到則忽略
--includes (-i) comma-separated list of modules to include
--packages (-p) comma-separated list of packages to include
--compressed (-c) 建立一個壓縮檔
用法: t_setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
或: t_setup.py --help [cmd1 cmd2 ...]
或: t_setup.py --help-commands
現在你可以執行命令呼叫設定如下:
python setup.py py2exe
將會建立一個子目錄dist , 包含了檔案 myscript.exe, python23.dll, 和 library.zip. 如果你的程式使用由C編譯的延伸模組,它們將會被複製,及執行時期的DLLs.
這些檔案你程式所需的任何東西,並且你必須散佈整個目錄的內容.
上述setup script 建立一個console 程式, 如果你要建立GUI 程式,只要取代 console=["myscript.py"] 改用 windows=["myscript.py"].
py2exe 可以在一次執行中建立多個執行檔,這對於一次要建立多個相關scripts是很有用.透過一個list 在console 或 windows 的關鍵參數.
指定額外檔案
有一些程式在執行時需要額外的檔案,像是環境檔,字型,或是圖示檔.
py2exe 可以複製這些檔案到dist的子目錄中,如果你在 setup script中指定data_files 選項. data_files 應該包含一連串的 (target-dir, files) tuples.
這裏有一個例子:
# setup.py
from distutils.core import setup
import glob
import py2exe
setup(console=["myscript.py"],
data_files=[("bitmaps",
["bm/large.gif", "bm/small.gif"]),
("fonts",
glob.glob("fonts//*.fnt"))],
)
這將會建立一個子目錄 dist/bitmaps, 包含了兩個.gif 檔案,及一個子目錄dist/fonts, 包含 .fnt 檔案.
Windows services
你可以建立Windows NT services 經由透過 service 關鍵keyword 參數在setup 函式中, 其中的值必須是一個 list of Python module names 包含了一個service類別 (識別由 _svc_name_ 參數):
# setup.py
from distutils.core import setup
import py2exe
setup(service=["MyService"])
建立服務執行檔也可以自行安裝及移除本身,經由命令列執行,你可以使用-help來取得更多的資訊.
COM servers
COM servers 是建立透過setup函式中com_server 關鍵參數, 這個值必需是一個 list ,可以包含一個或多個以上的COM server 類別 (identified by their _reg_progid_ attribute):
# setup.py
from distutils.core import setup
import py2exe
setup(com_server=["win32com.server.interp"])
預設包含了DLL 和 EXE servers,你應該簡單的刪除不需要的檔案.
先進的特性
仍在撰寫中.到目前為止,你看到的範例也可以在網站 wiki 看到,或許你可以提供你的小技巧.
它如何工作?
py2exe 使用python's modulefinder 來測試你的程式,尋找所有需要的python和延伸模組.純粹python模組是編譯成為 .pyc 或 .pyo 檔案到一個暫存的目錄.編譯延伸模組(.pyd) 是尋找和剖析 binary相依.
一個zip-相容 壓縮檔是內建,包含所有本目錄的所有python 檔案.你主要的程式是被當成資源插入一個自定的鑲入python 的解譯器 supplied with py2exe, 並且這個zip-archive 是安裝唯一的項目在sys.path.
簡單的例子,對 myscript.exe而言只有 pythonxx.dll 是必須的. 然而如果你程式需要延伸的模組,不幸的這些並無法包含或zip的檔案匯入,所以他們必需被分開的檔案(and are copied into the dist directory).
注意: py2exe 試著去追蹤所有 binary 相依如 pyd's 和 dll's 複製到目錄中. py2exe 有一個list包含了一些系統不要複製的dlls,但是這個表從未完整過.
安裝 py2exe
下載並安裝 py2exe-0.5.0.win32-py2.3.exe.
安裝 py2exe 包含了一些範列,這些範例放在lib/site-packages/py2exe/samples 子目錄.
對Windows 95/98/Me, 你必須有 Unicode dll 由 此取得 .
下載和執行 自解包 unicows.exe 檔案, 並複製 unicows.dll 檔到 python.exe 所在目錄. 記住這只有在你要使用py2exe來建主執行檔,在執行程式時並不需要.
如果你使用 py2exe 來建立 COM clients或servers, 強烈建議使用win32all build 163 (or later)-它包含了較好的支援forzen .