【问题标题】:Python namespace packagesPython 命名空间包
【发布时间】:2019-05-04 17:19:41
【问题描述】:

我正在按照这个说明从一个大包创建多个小的(独立的)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 中的所有子包或什么?我不知道如何像在任何常规项目结构中一样在根名称空间下一次安装所有小包(当我们不拆分它们并且根本不使用名称空间时),但是有单独安装它们的选项?

【问题讨论】:

    标签: python namespaces packaging namespace-package


    【解决方案1】:

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

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

    最好使用extras_require directive,它允许您在某些情况下指定其他依赖项。常见的 extras 是 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 安装它们

    【讨论】:

    • 是的,但我希望能够将整个命名空间(及其下的所有包)安装为常规包(虽然它只是一个没有setup.py 等的抽象层)。
    猜你喜欢
    • 1970-01-01
    • 2021-08-09
    • 2017-05-28
    • 2011-07-01
    • 1970-01-01
    • 2011-07-27
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多