在同一个存储库中,我想在命名空间ns.foo
下构建两个包ns.bar
和ns
。但经过多次尝试,似乎唯一可行的方法是将它们放在两个完全不同的目录分支中:
$ find ./
foo/
foo/setup.py
foo/ns/
foo/ns/__init__.py # __import__('pkg_resources').declare_namespace(__name__)
foo/ns/foo
foo/ns/foo/__init__.py
bar/
bar/setup.py
bar/ns/
bar/ns/__init__.py # __import__('pkg_resources').declare_namespace(__name__)
bar/ns/bar/
bar/base/bar/__init__.py
原因在于,例如,
from setuptools import setup
setup(...,packages=['ns.foo'],...)
要工作,setup.py
必须与foo/
中的命名空间包放在同一级别,才能找到ns.foo
。
有没有办法写setup.py
以便我可以将目录结构折叠为:
└ ns/
└ __init__.py # __import__('pkg_resources').declare_namespace(__name__)
└ foo/
└ foo/__init__.py
└ foo/setup.py
└ bar/
└ bar/__init__.py
└ bar/setup.py
这样当我运行每个setup.py
时,它会构建相应的包吗?