有幾個原因使您可能想用 C 擴展 Zope。最可能的是您有一個已能幫您做些事的現成的 C 庫,但是您對把它轉換成 Python 卻不感興趣。此外,由于 Python 是解釋性語言,所以任何被大量調用的 Python 代碼都將降低您的速度。因此,即使您已經用 Python 寫了一些擴展,您仍然要考慮把其中最常被調用的部分改用 C 來寫。不論哪種方式,擴展 Zope 都是從擴展 Python 開始。此外,擴展 Python 會給您帶來其它的好處,因為您的代碼將可以從任何 Python 腳本訪問,而不只是從 Zope。這里唯一要提醒的是在寫本文的時候,Python 的當前版本是 2.1,但是 Zope 仍然只能和 Python 1.5.2 一起運行。對 C 擴展來說,兩個版本并沒有什么變化,但如果您有興趣對您的庫進行 Python 包裝,又想讓它們都能在 Zope 下工作,您就得注意不要使用任何比 1.5.2 更新的東西。
Zope 是什么?
Zope 代表“Z Object Publishing Environment(Z 對象發布環境)”,它是用 Python 實現的應用程序服務器?!疤袅耍蹦f,“但應用程序服務器的確切含義是什么呢?”應用程序服務器就是一個長期運行的進程,它為“活動的內容”提供服務。Web 服務器在運行期間調用應用程序服務器來構建頁面。
擴展 Python:有趣又有益
想擴展 Zope,您首先要擴展 Python。雖然擴展 Python 不像“腦外科手術”那樣復雜,但也不像“在公園中散步”那樣悠閑。有兩個基本組件用于 Python 擴展。第一個顯然是 C 代碼。我將馬上探討它。 另一個部分是 安裝文件。安裝文件通過提供模塊名稱、模塊的 C 代碼的位置和您可能需要的所有編譯器標志來描述模塊。該文件被預處理,以創建 makefile(在 UNIX 上)或 MSVC++ 工程文件(MSVC++ project file,在 Windows 上)。先說一下 ― Windows 上的 Python 事實上是用 Microsoft 編譯器編譯的。Python.org 的人也推薦用 MSVC++ 編譯擴展。顯然,您應該能夠成功說服 GNU 的編譯者們,但我本人還沒試過。
無論如何,還是讓我們來定義一個叫做‘foo'的模塊吧?!甪oo'模塊會有一個叫做‘bar'的函數。當我們要使用時,我們可以用 import foo; 來把這個函數導入到 Python 腳本中,就跟導入任何模塊一樣。安裝文件非常簡單:
清單 1. 一個典型的安裝文件
# You can include comment lines. The *shared* directive indicates# that the following module(s) are to be compiled and linked for# dynamic loading as opposed to static: .so on Unix, .dll on Windows.*shared*# Then you can use the variables later using the $(variable) syntax# that 'make' uses. This next line defines our module and tells# Python where its source code is.foo foomain.c
編寫代碼
那么我們實際上該怎樣寫 Python 知道如何使用的代碼呢,您問? foomain.c (當然,您可以隨意命名它)文件包含三項內容:一個方法表,一個初始化函數和其余的代碼。方法表簡單地將函數名與函數聯系起來,并告知 Python 各個函數所使用的參數傳遞機制(您可以選擇使用一般的位置參數列表或位置參數和關鍵詞參數的混合列表)。Python 在模塊裝入時調用初始化函數。初始化函數將完成模塊所要求的所有初始化操作,但更重要的是,它還把一個指向方法表的指針傳回給 Python。
新聞熱點
疑難解答