2010-08-26 83 views
7

我想知道處理子項目的正確/最簡單/最pythonic的方式,你想使用相同的基礎包。目前,我們有一個文件的結構是這樣的:如何用setuptools管理多個python子項目?

trunk\ 
    proj1\setup.py 
      company_name\__init__.py + proj1's code 
    proj2\setup.py 
      company_name\__init__.py + proj2's code 

我們要保持命名空間COMPANY_NAME共同爲我們所有的項目(?也許這本身就是unpythonic),但是當proj1和proj2安裝在開發模式中,第一個安裝被破壞。它看起來像import company_name...弄糊塗在哪個company_name包看,並抓住第一/最後一個/隨機一個。

這通常會在更大的python項目中處理?是否有可能通過樹幹中的setup.py來解決這個問題,該樹幹構建了一些巨型蛋?我還沒有發現任何有關谷歌或堆棧的信息,所以任何信息,甚至只是鏈接,非常感謝!


編輯:我只是想添加一個setup.py在根文件夾

...  
namespace_packages = ['company_name'], 
package_dir = {'company_name' : ['proj1/company_name', 'proj2/company_name']} 
... 

與在__init_.py文件適當pkg_resources.declare_namespace(__name__),但./setup.py bdist_egg只是給:

錯誤company_name安裝命令:分發包含命名空間程序包'company_name'沒有模塊或程序包

回答

6

儘管我無法證明我的解決方案的蟒蛇狀態,但我終於得到了不同的應用程序在一起運行的情況。我在命名空間包的正確軌道上,但沒有嘗試在trunk中創建一個超級項目,而是在每個單獨項目的setup.py中添加了namespace_packages行。這導致安裝在一起時的行爲正常,按照預期共享company_name名稱空間。

任何人都想在這裏合攏這是一個合理的python解決方案,我仍然有興趣聽聽這是否是「完成的方式」。它感覺不錯,但這可能是因爲它模仿了我更習慣的java風格。

+3

這就是我爲'namespace_packages'設計的關鍵字,所以你的確做到了正確的方式。 – 2010-09-02 05:03:34

+0

我的公司開始使用命名空間包,它最終成爲一個巨大的錯誤,許多功能被破壞,它們在普通項目中可用(運行單元測試,安裝很挑剔等)。只是一個警告的話。 – Lucas 2016-07-08 16:45:06