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 專案設計專屬的程式碼。

2009/06/01

Package Releases

open source developer 通常只優先抓自己的癢,一個有規模的 project 會嘗試事先宣告未來新版的改進內容,並開放一段時間,收集合適的使用者需求清單。以 Plone 為例,如果你有改版需求想要優先列入,可以與原作者溝通。

Plone 在第2版與第3版之間,擴充模組的處理方式有些不同。首先,稱呼上有所不同,擴充模組在 Plone 2 稱為 Product,在 Plone 3 則開始改稱 Package。命名的方式,Plone 2 常見的範例類似 PloneSurvey 或 WebServerAuth 這樣,但 Plone 3 常見的範例類似 Products.Maps 或 plonetheme.stylized 或 collective.indexing 這樣。

散佈時的檔案格式,Plone 2 以 tar.gz 為主,Plone 3 則以 egg 為主。安裝的目錄位置,Plone 2 是在 Products 裡,Plone 3 egg 則使用 eggs 或 develop-eggs 之類的目錄,舊式的 package 也可以放在 products 或 productdistros 目錄裡,而開發中的 package 則位於 src 目錄裡。