Python名称空间包

时间:2019-05-04 17:19:41

标签: python namespaces packaging

我正在按照以下说明从一个大的https://packaging.python.org/guides/packaging-namespace-packages/#pkg-resources-style-namespace-packages

中创建多个小的(独立的)Python2软件包

现在我有多个子(包),其结构如下:https://github.com/pypa/sample-namespace-packages/tree/master/pkg_resources

我可以独立安装和使用它们,效果非常完美。 但是由于我在同一个名称空间下有12个软件包,所以我希望能够通过运行一个命令(例如pip install)来安装它们。例如。一些将来的项目将全部需要它们,因此我更喜欢将它们作为(常规)整体(一个依赖项)来使用,但有时我只需要其中一个(这就是为什么要使用名称空间)。所以我需要在我的命名空间的根目录中有一个setup.py文件,其中包含install_requires中的所有子包,或者是什么?我无法弄清楚如何像在任何常规项目结构中一样,将所有小软件包一次安装在根名称空间下(当我们不拆分它们并且根本不使用名称空间时),但是是否可以单独安装?

1 个答案:

答案 0 :(得分:1)

这听起来像是一个如何正确管理依赖项的普遍问题,它与您的共享名称空间功能无关。对于您的特殊问题,我建议以下内容:

install_requires仅用于绝对必要的依赖项(需要存在的依赖项或无法执行程序的依赖项),因此不适合您的情况。

最好使用extras_require directive,它允许您在某些情况下指定其他依赖关系。常见的附加功能是dev –开发期间所需的软件包–或doc –构建文档所需的软件包。

假设位于相同名称空间下的软件包分别称为nsp1,nsp2和nsp3,则可以在setup.py中的任何软件包中指定:

setup(
    name="Project-A",
    ...
    extras_require={
        'all':  ["nsp1", "nsp2", "nsp3"],
        'set1': ["nsp1", "nsp2"],
    }
)

然后,您可以使用pip3 install nsp1[all](假设您为nsp1扩展了setup.py)或通过pip3 install .[all]进行本地安装。

如果您的“未来某些项目”中的任何一个都需要这些依赖项,则可以将这些额外功能添加到其依赖项中,例如在其setup.py中:

install_requires=['nsp1[all]', …]

一种替代方法是使用requirement.txt

nsp1
nsp2
nsp3

并使用pip install -rrequirement.txt

安装它们