我想将多个python模块保留在同一个存储库中,以便更容易管理它们,并同时处理它们。
这些模块是打包的命名空间包,所以我不能在同一级别上拥有根,其中有 4 个,以后可能会更多。
这是我的结构:
repo/
modules/
foo_a/
setup.py
VERSION
foo/
__init__.py
a/
foo_b/
setup.py
VERSION
foo/
__init__.py
b/
版本文件是独立的,并跟踪不同的版本。上面的__init__.py
文件是这里描述的特殊类型。
目前,当其中的 VERSION 文件更改时,我会自动构建相应的模块。
我想要的是能够从存储库的根目录安装包含所有命名空间包的整个包。所以我可以做pip install .
.这要么将所有内容安装为单个软件包(foo_all
(,要么单独安装每个模块。
这样做的用例是,大多数人使用所有模块,他们想要一些易于安装的东西,但有时我只是希望能够安装其中一个模块。
关键是您可以运行:
pip install repo
然后这些 Python 命令成功。
from foo import a
from foo import b
关于如何做到这一点的任何想法?
我已经看过setuptools.find_namespace_packages()
函数,但看起来它只是 Python3,而且我不完全确定它是否是我需要的。我无法升级到 Python3,因为它适用于客户端,并且依赖于 Python2 API,这非常令人沮丧。
还看到了setuptools.setup()
的package_dir
选项,但这是如果所有包都位于不同的文件夹中。我不能将所有包放在不同的文件夹中,因为单个文件会重叠(setup.py
、VERSION
、foo/
我建议将foo.a
和foo.b
作为独立项目与作为某种"伞形项目"的foo
项目一起分发,并将其他两个作为直接依赖项(在install_requires
中(。
整个设置在 Python 打包用户指南中关于"打包命名空间包"中描述。另请参阅对类似问题的回答。