2016-04-03 65 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服务器的预期结果)。