2015-01-13 21 views
2

我正在構建一個接受插件的系統,使用setuptools的entry_points功能來查找插件。插件因此由分發提供,但是單個分發可能提供多個插件。存儲和檢索有關Python分發的元數據

我想要一些方法來編碼關於每個分佈提供一個或多個插件的元數據。簡單的東西就像一個錯誤提交URL,但比內建的setup參數允許的多一點。作爲一個額外的皺紋,插件使用命名空間包,所以每個發行版沒有獨特的頂級包。

我試過using a setuptools extension via egg_info.writers,但是暴露了一個setuptools錯誤,無論如何都有一些雞和雞蛋的問題。我也嘗試過putting the metadata in setup.cfg並通過pkg_resources.resource_stream來閱讀它,但是實現得太晚以至於setup.cfg一旦安裝了軟件包就會消失。

我大概可以想出一些更深奧的或非功能性的想法,但我希望有某種最佳實踐(或者甚至是「最不可怕的實踐」),我可以遵循。

+0

您是否希望通過Python代碼訪問這些元數據,或者只是將其與安裝的軟件包放在某個文件中? – BrenBarn

+0

可以從Python代碼訪問,但我不介意打開並閱讀文件來完成此操作。只要文件名是可移植的 - 所以一個硬編碼的'/ tmp/relengapi-metadata.ini'就出來了! – djmitche

+0

你可以使用'pkg_resources.resource_stream'(或'resource_filename()'等)作爲發行版的一部分,因此不僅僅是'setup.cfg'。 –

回答

0

setuptools中最穩定,最可靠的部分似乎是entry_points。

我採用的解決方案涉及到使用額外的入口點組來定位字典,插件dists可以將它們埋在任何他們喜歡的Python路徑中(包括在其名稱空間包中的包中)。然後系統簡單地查找這些入口點並抓取字典。