Python
之旅 (六)文
/馬兒 (marr@softwareliberty.org)程式語言是人們與電腦系統的溝通媒介工具,一般人學習程式語言的目的之一,所圖還是實際寫作出能夠解決問題的程式片段或系統,也就是程式開發專案裡的一部份。「專案管理」或「程式開發」都是相當龐大的工作,其複雜程度經常超過投身其中的人員所能想像,「沒有專案管理,就沒有軟體生命」,重要性難以言喻。尤其開放源碼模式的開發專案,幾乎都是透過網路媒介進行,如何將分散的資源緊密結合,在預期時距內完成專案成果,成為一門難度極高的藝術挑戰。
Python
專案開發觀摩俗話有云,學以致用,觀摩並實際參與專案,是相當理想的學習經驗。現有廣為人知的開放源碼軟體,本身都具備一套「有效」的專案管理體系,以
Python 使用族群為例,Python 語言的改進,以程式版本為里程碑,目前最新版的發展中版本為 2.2,日前已釋出 2.2a1 版本供發展人員測試,每次 Python 語言要加入新特色或是修改內容前,發展人員都應該提出一份「改進提案」(Python Enhancement Proposals, PEPs),而實際的開發工作,通常就是審視 PEP 的建議內容,並予以實作為原始碼。有興趣嘗鮮的朋友,可以從網站下載
alpha 版本 (主要供發展人員) 或 beta 版本 (主要供非實用場合的一般使用者) 來測試。第一線的發展人員,通常是直接以 CVS (Concurrent Versions System) 維護方式來參與,並以 mailing list 來分享經驗及討論,CVS 與 mailing list 是獲得專案成果最新最快的方式之一,開發人員應該加以認識了解。進一步由 Python 所衍生出來的程式專案,我們可以到 SourceForge 或 Freshmeat 尋寶,數百個大大小小的開發專案正在進行當中,建議配合自己的應用需要,找個能夠協助解決日常生活問題的工作程式,一個成功的程式專案,必須在參與和溝通中不斷進展。譬如說,喜歡利用 Python 語法寫作視窗應用程式的朋友,可以找尋 wxPython 的相關資料。●圖
: wxPython 與 wxHTML 應用結合
另外,值得特別說明的是,
Zope 這套網站應用程式系統,它除了被譽為是 Python 的殺手級應用程式外,本身也衍生出日趨完整的程式開發與專案管理模式,我們將直接以 Zope 的相關資源,介紹 Python 學習者參與專案開發的可行途徑。Zope
簡介Zope 是「Z Object Publishing Environment」的縮寫,一套以 Python 程式語言為基底所發展的 Web Application Server 軟體,簡單地說,透過網頁的操作介面,資料庫管理人員、網頁設計人員、網頁內容維護人員,可以協同製作動態網頁,相當輕鬆地把文件安全模式、資料庫存取、物件體系、應用程式、流程管理,各式豐富功能整合起來。
如果你覺得不夠具體,想知道 Zope 與現有哪些程式軟體部份功能相仿,那麼舉些常見的例子:PHP、IBM Websphere、Enhydra、Tomcat、Cold Fusion、Microsoft Active Server Pages,說穿了,只要是能夠產生動態網頁的程式工具,我們都可以視之為相仿。至於究竟哪一套最好,在下無法提供答案,自古文人總相輕,網路上已有許多褒此貶彼的軟體評比文件,請讀者依自己的場合需要,事先貨比三家,或是請教技術顧問人員。
內容管理
在此能夠肯定的是,如果你的網站需求只是幾張靜態網頁,那麼採用
Zope 便顯得殺雞用牛刀,Zope 的優勢在於應用物件模型,配合資料庫儲存的豐富資料,將龐大複雜的系統予以整合簡化,我相信這樣的應用趨勢才是符合多數人的期盼。隨著個人電腦的普及,電腦設備已經成為辦公室裡的重要商務工具,相信日後也會普遍至多數家庭,當個人電腦裡塞滿公司或個人的重要資料,此時一套有如檔案櫃的資料庫系統,以及一套有問必答的內容管理介面,便成為日常應用中最重要的工具,目前最被看好的工具組合,即是網頁伺服器與瀏覽器。
Microsoft 的 .NET 計畫裡,同樣為網頁內容物件勾勒出一個美好的未來,將網頁內容儲存在遠端的伺服器上,透過特定的應用程式服務,使用者可以從原有的資料加工後獲得所需的資訊服務。Zope
功能及應用早在
1996 年,Zope 系統的前身稱為 Principia,是一套協助媒體單位進行線上出版流程的系統,因此 Zope 一開始即具備線上出版及內容管理的模型框架。身為一套網站應用程式系統,其功能應用場合相當廣泛,例如提供一個類似
Yahoo 的搜尋網站,組織一個類似 SourceForge 的專案開發平台,架設一個類似 HotMail 的郵件伺服器。目前包括美國太空總署、美國海軍、奇異航空引擎公司在內,均採用 Zope 於多種應用場合,當中最受歡迎的應用方式就是動態網頁與資料庫結合,而新的功能,諸如 XML 或 WebDAV,同時也在積極發展當中,大抵都圍繞著協同式作業 (collaboration) 的主題。在架構設計上,
Zope 重視將邏輯 (logic)、內容 (content)、表現 (presentation)等三方面要素予以區隔,而以層層包裝的方式,將程式人員與提供內容的一般使用者,整合在同樣的瀏覽器介面下。舉例來說,一般辦公室常見的電腦工作,諸如簽發公文、填寫申請表、數據統計、專案開發管理、群組行事曆等,都可以在 Zope 的整合環境下完成建置。Zope 本身既是一套架構體系,也是一套日益豐富完整的工具,從技術角度來看它,其功能內容幾乎可以涵蓋一般人的所有需求。●圖
: Zope 簡略架構示意Zope
系統項目從網路下載的
Zope 軟體,完整標準內容即包含許多項目,主要有:網頁伺服器
Zope 附有一個內建的 ZServer 網頁伺服器程式,由於是專為 Zope 環境所撰寫,所以運作功能最完整。當然,你還是可以使用原本的 Apache Web Server 或是 Microsoft IIS,甚至任何一個可以支援 CGI 功能的網頁伺服器,Zope 的操作環境同樣可以配合它們。
網頁式管理介面
在
Zope 環境下建置動態網頁資料,可以透過一個相當一致的網頁式管理介面,進行網頁寫作、程式撰寫、資料庫連結等工作,如此一來,使用者可以適用一套熟悉的介面,隨時隨地進行編修,降低客戶端程式 (瀏覽器) 改版的不便。物件資料庫
Zope 內附一個 ZODB 資料庫,主要的檔案管理工作,都被視為物件整理工作,以一種類別、繼承的方式加以維護,這是 Zope 實質上較為與眾不同之處。
關連式資料庫介面
如果實際運作的資料是儲存在別的大型資料庫內,如
Oracle、Informix、PostgreSQL、Sybase、MySQL 等,那麼也可以透過資料庫介面來溝通,進而存取原本已儲放在裡頭的各項資料。動態網頁命令稿語言
在
Zope 環境下,如果想要設計出功能豐富的動態網頁,可以透過其內建的 DTML (Document Template Markup Language),如果你原本已熟悉 Python 或 Perl 語法,也可以使用它們。社群發展及商業支援
Zope 的程式發展模式頗為特殊,社群與商業力量同時注入。自從 1998 年底 Zope 以開放源碼授權方式釋出後,Zope 的能見度與接受度日漸增加,社群朋友以 http://www.zope.org/ 為公共園地,分享設計理念及心得,而在背後提供完全支援的則是 Digital Creations 公司,該公司提供 Zope 資源整合與技術顧問,目前是 Zope 商業化服務的領導廠商。更由於 Zope 已成功闖出名號,Digital Creations 公司於今年正式將公司名稱改為 Zope Corporation,而 Zope.Org 網站則稱為 Zope Community。
值得一提的是,Python 程式語言的父親 Guido van Rossum,於 2000 年十月間,將整個 PythonLabs 程式人員 (持續改進 Python 語言的核心人員) 從 BeOpen 公司移至 Digital Creations 公司,由此可見 Digital Creations 公司對 Zope 及 Python 開發的企圖心。最新版之 Python 2.1 與 Zope 2.4 即是在 Digital Creations 公司的贊助下完成,而且 Python 與 Zope 的開發顯得更為緊密相關。
開放源碼授權
Zope 軟體是以 Zope Public License (ZPL) 授權方式釋出,和 Python 語言程式一樣,都已通過認證為開放源碼軟體。簡單地描述其條款大意,即是,一般的使用及修改,都在授權範圍之內,無需額外的費用或授權金,進行軟體散佈時,大抵要求協助保留 Digital Creations 公司對 Zope 貢獻之宣傳。標準的 Zope 系統安裝之後,可以發現一個 "Power by Zope" 的識別圖樣及連結,根據授權內容所述,如果使用者想要把此一識別圖樣移除,本身並不算是構成違反授權條款,但是使用者應保留對 Zope 原創貢獻者的廣告提示,在 Zope 系統安裝後保留識別圖樣,似乎是最簡單的方式了。使用者應該可以在 Zope 系統目錄裡找到 CREDITS.txt 檔案,在此列名者即是 Zope 名人堂的程式大師。
Zope
安裝方法最新版的
Zope 程式可以從官方網站 http://www.zope.org/Products/Zope/ 下載,我們可以找到二進位元檔案及原始碼檔案,二進位元版本包括 Solaris 平台、Win32 平台、Linux glibc2 平台。另外,也有 rpm 檔案供 Red Hat Linux 這類具備 rpm 系統的使用者安裝。值得注意的是,最新版
Zope 2.4.0 需要事先安裝好 Python 2.1,這項改變對 Windows 平台的使用者影響可能較小,但對 Linux 平台的使用者而言,恐怕就是不小的挑戰。我建議 Windows 使用者可以直接下載 Zope 2.4.0 來安裝,而 Linux 使用者可以下載 Zope 2.3.x 版本來安裝,相信會是最省事的方法。●表
: 建議安裝及程式下載處
Windows 使用者 |
http://www.zope.org/Products/Zope/2.4.0/Zope-2.4.0-win32-x86.exe |
Linux 一般使用者 |
ftp://ftp.rpmfind.net/linux/contrib/libc6/i386/Zope-2.3.2-1.i386.rpm |
Linux 進階使用者 |
ftp://ftp.rpmfind.net/linux/contrib/libc6/SRPMS/Zope-2.3.2-1.src.rpm |
已具備 Python 2.1者 |
http://www.zope.org/Products/Zope/2.4.0/Zope-2.4.0-src.tgz |
以
Windows 平台為例,下載後直接執行 Zope-2.4.0-win32-x86.exe 程式,選用預設之 Site Name 名稱,輸入 Zope 系統管理員帳號密碼,最後安裝程式還會詢問「是否要將 Zope 以 Win32 服務方式自動啟動」,建議以自動啟動方式較為方便。如果選擇以手動方式啟動 Zope,則可以開啟 DOS 視窗,輸入 bin\python.exe z2.py -a 127.0.0.1 這樣的指令,其中的 -a 參數,即是用來指定準備提供連線服務的 IP 位址。Zope 伺服器的預設服務埠號是 8080,所以安裝後必須以 http://127.0.0.1:8080/ 這樣的網址型式才能看到 Zope 的管理畫面。
●圖: Windows 使用者安裝時需指定 Site Name
●圖
: 配合 Site Name 來指定預設安裝目錄●圖
: 指定 Zope 系統管理員帳號密碼
●圖
: 指定啟動方式●圖
: 以系統服務方式自動啟動伺服器●圖
: 手動在 DOS 視窗裡以指令方式啟動 ZopePython 2.1
帶來的優點Python 2.1 版於今年四月間問世,此版本已經支援 Unicode,因此架構於上的 Zope 2.4.0 同樣也享受此一好處,另外,WebDAV 的支援更加成熟,還有一些系統改善之處。如果你已經完成 Python 2.1 的昇級動作,或有意了解 Zope 2.4.0 從 2.3.x 之後的改進之處,請參考「Zope 2.4 昇級指南」說明。由於多數的 Linux 散佈套件,大抵還未即時全面跟上 Python 前陣子的快速更新動作,我猜想不少使用者很容易遇到 Python 版本不相容於 Zope 2.4.0 的問題。想要輕鬆嘗新的朋友,可以考慮試用 Mandrake Linux 8.1 測試版本。
●表: 新版程式下載處
Mandrake 8.1 測試版 |
http://ftp.rpmfind.net/linux/Mandrake-iso/i586/ MandrakeLinux-8.1-Raklet-beta1-CD1.i586.iso http://ftp.rpmfind.net/linux/Mandrake-iso/i586/ MandrakeLinux-8.1-Raklet-beta1-CD2.i586.iso |
Python 2.1.1 |
http://www.python.org/ftp/python/2.1.1/Python-2.1.1.tgz |
i586 rpm |
ftp://rpmfind.net/linux/Mandrake-devel/cooker/ i586/Mandrake/RPMS/python-2.1.1-2mdk.i586.rpm |
src rpm |
ftp://rpmfind.net/linux/Mandrake-devel/cooker/ SRPMS/python-2.1.1-2mdk.src.rpm |
Zope
系統目錄結構由於
Zope 程式在 Windows 平台上安裝相當簡易,因此我會建議一般使用者可以在 Windows 平台上安裝 Zope 程式來進行測試與學習,待熟悉之後,自然再到 Linux 平台上執行服務。安裝完畢後,以 Windows 平台為例,可以發現下列幾個重要的目錄檔案:
目錄檔案 |
說明 |
Extensions/ |
外部物件方法的儲存目錄 |
ZServer/ |
預設之伺服程式均位於此目錄中 |
bin/ |
python 執行檔案位於此目錄中 |
doc/ |
文件目錄區 |
import/ |
準備 import 進 ZODB 的物件可置於此目錄 |
inst/ |
與系統安裝有關的目錄 |
lib/ |
目錄裡具備完整的 Zope 系統及 Product 擴充目錄 |
pcgi/ |
Persistent CGI 的程式目錄 |
utilities/ |
存放一些工具命令稿或模組程式 |
var/ |
內有系統運作執行時所產生的程式序編號記錄檔 |
z2.py |
系統執行時的資料設定檔 |
zpasswd.py |
Zope 帳號密碼管理程式 |
Zope
文件計畫好的軟體必須要有好的文件。
Zope Documentation Projects (ZDP) 是由一群電子數位志工所發起的文件計畫,致力於創作出有用而易學的 Zope 學習文件,整個文件創作及維護的運作,同樣是以協同式專案方式來進行。整個
ZDP 之下還分有許多子計畫,主要有:1. ZBook
在網路上共同寫作一本適用於
Zope 入門及進階使用者的書籍,每個章節可以透過提案、討論方式累積,目前已分有五大部份,並有人譯成法文版本。2. ZFAQ
以收集問答方式累積內容,目前分有十四個目錄類別,計有上百條問答集,不過目錄類別似乎還未分類穩定。
3. ZSnippets
收集程式高手們的程式片段,目前分有六個目錄類別,是
Zope 新手學習的極佳參考。另外,還有
HOWTO 與 Tips 也在累積當中。隨著全球各地的使用者日益增多,Zope 程式與文件也開始重視國際化議題,有人寫作出 ZClass 的介面模組,使用者可以照自己的語文需求來調整管理畫面,有人投入文件翻譯工作。●圖
: Zope 文件計畫裡開始有不少國際化翻譯工作Zope
學習管道這一年以來,很高興看到
Python 與 Zope 的書已經廣泛出現,雖然大多數還是英文書,但有心學習的朋友總算有了完整的工具,而非全然在網路上搜尋。在此介紹幾項學習資源:書籍
: The Zope Book此書已在今年七月間出版,由
Zope 的開發人員親自執筆,深入淺出地帶領讀者認識 Zope 的內涵及架設實務,無論新手或老鳥均適合,內容主要包括:內容管理實務,DTML 設計,ZSQL 連結資料庫功能,堪稱 Zope 世界的重量級書籍。作者
Amos Latteier 及 Michel Pelletier 對於這本書的製作,投入相當大的心力,不但盡力要求版本跟上最新的 Zope 發展,更盡心讓內容精確無誤。本書內容亦可以在網路上閱讀,讀者可以下載相當精美的 PDF 版本,開放源碼前輩的熱忱似此,令人感佩無以復加。●圖
: Zope 世界裡的重量級經典書籍
: The Book of Zope本書著重
ZClass 設計與 Zope 程式寫作,內容包括系統安裝、內容管理、ZClass、ZCatalog、資料庫、Python 程式設計及除錯。不過,這本書預計今年十月才問世,由 beehive 公司編輯,這是一家德國 ISP 公司,在 Zope 專業領域已出版不少受歡迎的電子書。
●圖
: The Book of Zope 預計在今年十月出版Zope
快速參考手冊 (ZQR)如果你已經對
Zope 具備基本了解,而且有意長期參與 Zope 系統的開發,那麼 Zope Quick Reference (ZQR) 顯然就是必備的工具書了。目前 ZQR 置於 ZDP 之下,收集了相當完整的 Zope 技術內容細節,列印下來就可以放在書桌上參考了。Zope
郵遞論壇目前已有超過十種的
mailing list 在專門討論 Zope 技術,這裡都是觀摩、討論最新技術的最佳場所,不過,新手們可要事先做好功課,以免到此消化不良了。想要線上直接交談的朋友,還可以透過 #zope 這個在 irc.zope.net 上的頻道,以鍵會友,如果有需要,可以預先安排交談時段,以便記錄下精彩的討論內容。整合資源及力量
「任何喜愛網站系統的朋友,都應該來瞧瞧
Zope。」一個以
Python 語言為基底而發展的應用程式,很短的時間內竟也成長得枝繁葉茂,使用族群日益擴大,Zope 除了真的解決許多人的實務需求外,我相信它的開放性與嚴謹的專案管理模式,才是促成它能夠不斷蓬勃的原因,看到這麼多同好一起貢獻才智心力,似乎數位世界的大同理想已在他們手上實踐。我在學習
Python 與 Zope 的過程當中,認為 Zope 確實能夠有效解決自己所面對的資訊自動化問題,一些功能設計顯得比 PHP 之類的動態網頁工具來得優秀,因此樂意與大家分享這些經驗。但 Zope 真正與眾不同的地方,並不在於它的技術面,而是它賦予所有參與者完整的貢獻機會,這正是一個功能多樣、分工細緻、要求效率的網站系統,所應提供的本質特點。如果你在學習
Python 之餘,也想實際參與 Python 的專案開發,那麼 Zope 絕對是你的快樂天堂。相關資源
[1] Python Enhancement Proposals 網頁,網址 http://python.sourceforge.net/peps/
[2] Concurrent Versions System 網頁,網址 http://www.cvshome.org/docs/
[3] mailman 網站,網址 http://www.list.org/
[4] wxPython 網站,網址 http://wxpython.sourceforge.net/
[5] Source Forge 網站,網址 http://www.sourceforge.net/
[6] Freshmeat 網站,網址 http://freshmeat.net/
[7] Zope 2.4 Migration Guide 網頁,網址 http://www.zope.org/Products/Zope/2.4.0/Zope24MigrationGuide.html
[8] Zope Documentation Projects 網頁,網址 http://zdp.zope.org/
[9] The Zope Book 網頁,網址 http://www.zope.org/Members/michel/ZB/
[10] Zope Quick Reference 網頁,網址 http://zdp.zope.org/projects/zqr
[11] Zope Mailing Lists 網頁,網址 http://www.zope.org/Resources/MailingLists
[12] Zope Chat 網頁,網址 http://www.zope.org/Documentation/Chats