我有两个具有公共层次结构的包。类似于:
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.foo
和org.team.bar
作为不同的分布分发。我知道推荐的方法是制作org
和team
命名空间目录。不幸的是,作为我们持续集成工作流程的重要组成部分的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
除了如果我卸载foopack
,org/__init__.py
和org/team/__init__.py
也会被卸载之外,这似乎和预期的一样工作。这不是我在工作流程中所期望的,所以我可以接受。
这还有其他不利因素吗?有什么我没有考虑,或者我应该考虑的替代方案吗?
安装两个具有公共层次结构的包的唯一方法是真正使用命名空间包。
如果您的CI服务器无法处理这些问题,则应在CI端进行修复,否则CI服务器将迫使您破坏产品(这可能不是使用CI服务器的预期结果)。