2016-04-03 68 views
0

我有兩個具有公共層次結構的包。喜歡的東西:Setuptools:安裝具有重疊佈局的包

org.team.foo

org/ 
    __init__.py 
    team/ 
     __init__.py 
     foo/ 
      __init__.py 
      baz.py 

org.team.bar

org/ 
    __init__.py 
    team/ 
     __init__.py 
     bar/ 
      __init__.py 
      qux.py 

setup.py看起來是這樣的: org.team.foo

from setuptools import setup, find_packages 
setup(name='foopack', 
     version='1.0', 
     packages=find_packages() 
    ) 

org.team.bar

from setuptools import setup, find_packages 
setup(name='barpack', 
     version='1.0', 
     packages=find_packages() 
    ) 

我想分發org.team.fooorg.team.bar不同的分佈。我知道推薦的方法是製作orgteam命名空間目錄。不幸的是,pylint是我們持續集成工作流程的重要組成部分,它不識別名稱空間包。我想知道如果我可以分開分發這些並將它們安裝在彼此之上。我想這(sudo pip install foopack && sudo pip install barpack),它似乎產生在安裝位置如下:

/usr/local/lib/python2.7/dist-packages/ 
    org/ 
     __init__.py 
     team/ 
      __init__.py 
      foo/ 
       __init__.py 
       baz.py 
      bar/ 
       __init__.py 
       quz.py 

這似乎是工作如預期,但如果我卸載foopackorg/__init__.pyorg/team/__init__.py被卸載也是如此。這不是我在我的工作流程中所期望的,所以我對此感到滿意。

這是否還有其他缺點?有什麼我不考慮的,或者我應該考慮的替代方案?

回答

0

安裝兩個具有公共層次結構的軟件包的唯一方法就是使用名稱空間包。

如果您的CI服務器不處理它們,那麼您應該在CI端修復它,否則CI服務器將強制您破壞您的產品(可能不是使用CI服務器的預期結果)。