Python 2.7 包安装多个模块和打包的命名空间

Python 2.7 package install with multiple modules and packaged namespaces

我想将多个 python 模块保存在同一个存储库中,以便更轻松地管理它们并同时处理它们。

modules是打包的命名空间包,所以不能同级root,有4个,以后可能会更多

这是我的结构:

repo/
  modules/
    foo_a/
      setup.py
      VERSION
      foo/
        __init__.py
        a/
    foo_b/
      setup.py
      VERSION
      foo/
        __init__.py
        b/

版本文件是分开的并且跟踪不同的版本。而上面的 __init__.py 个文件是 the special type described here.

目前我是在版本文件改变的时候自动构建相应的模块。


我想要的是能够从存储库的根目录安装包含所有命名空间包的整个包。所以我可以做 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.pyVERSIONfoo/)

可能将 foo.afoo.b 作为独立项目与空的 foo 项目一起分发,其他两个项目为 install_requires

Python Packaging User Guide on "Packaging namespace packages" 中描述了整个设置。