0

我按照这个说明从一个大的创建多个小的(独立的)Python2 包 - https://packaging.python.org/guides/packaging-namespace-packages/#pkg-resources-style-namespace-packages

现在我有多个具有这种结构的子(包):https ://github.com/pypa/sample-namespace-packages/tree/master/pkg_resources

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

4

1 回答 1

1

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

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

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

假设您在同一命名空间下的包称为 nsp1、nsp2 和 nsp3,您可以在您的任何包中指定setup.py

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

之后,您可以使用pip3 install nsp1[all](假设您已经setup.py为 nsp1 扩展)或pip3 install .[all]本地安装来安装它们。

如果您的任何“未来的项目”需要这些依赖项,您可以将这些附加项添加到其依赖项中,例如在其setup.py

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

另一种方法是使用requirement.txt

nsp1
nsp2
nsp3

并安装它们pip install -rrequirement.txt

于 2019-06-20T12:12:36.520 回答