2009/06/25

Eggs and Plone3

egg 是 Python 世界裡散佈模組軟體的包裝機制,在 egg 環境裡,會記錄軟體專案的相依資訊,還會提供 plugin 給其他模組。實際打包成壓縮檔的方式有許多種,最常見的方式,是使用 '.egg' 檔名的 ZIP 檔案。

Python 世界的 egg 當然不只用於 Zope 或 Plone 專案裡,但是 Zope 在 2008 年才廣泛使用 egg 機制,對 Zope 2 的開發者而言,可能仍是新的議題。傳統的 Zope 2 應用程式,以 Zope product 方式來開發和散佈,只要把程式專案放進 $INSTANCE_HOME/Products 目錄,Zope 就會在啟動時掃瞄這個目錄,並處理應用程式的安裝與註冊工作,相當容易管理。

但是,上述特定目錄裡的程式碼,搭配 Products.* 命名空間的黑魔法,只能被 Zope 認得,很難再應用於其他場合,另一方面,也造成命名空間的侷限,開發者不容易建立精簡而重用性高的模組。

新版的 Zope (Zope 3) 在設計哲學上,主動走進 Python 社群成為一份子,讓專案模組能夠盡量精簡,並致力於提高模組的重用性。只要把相依關係設定好,任何模組應該都能在各式環境裡執行,例如 zope.interface 模組被 Twisted 專案所採用,但 Twisted 和 Zope 兩個專案平常是各自獨立發展的。這樣的架構方式,也讓 Zope 3 的新模組,容易被 Zope 2 或 Plone 重複使用。

從 Plone 3 開始,開發者也努力將模組精簡,像 plone.memoize 與 plone.portlets 是高獨立性的模組,其他相依於 Plone 的模組,則使用 plone.app 命名空間,例如 plone.app.layout 或 plone.app.portlets 之類的名稱,而 plone.app.portlets 就以 plone.portlets 為基礎,再針對 Plone 專案設計專屬的程式碼。

No comments: