当前位置: 首页 > 工具软件 > py2exe > 使用案例 >

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 .
 类似资料: