【问题标题】:Declare optional dependencies within extras_require在 extras_require 中声明可选依赖项
【发布时间】:2020-10-24 01:36:25
【问题描述】:

我有一个带有extras_require 的包,它依赖于另一个包的extras_require。例如:

setup(
    name="my-package",
    install_requires=["other-package==1.0.0"],  # Base package, no advanced features
    extras_require={"advanced": ["other-package[advanced]==1.0.0"]},  # Advanced features
    ...
)

setuptools docs 开始,我会假设上述方法可行,因为:

在指定依赖项时,项目也可以使用另一个项目的 extras。例如,如果项目 B 需要安装了 PDF 支持的“项目 A”,它可能会像这样声明依赖关系:

setup(
    name="Project-B",
    install_requires=["Project-A[PDF]"],
    ...
)

然而,install_requires 下声明的依赖项似乎覆盖了extras_require 中的依赖项,并且无论我如何安装此软件包(例如pip install .[advanced]),我都没有得到other-package[advanced] 依赖项。

这是预期的限制吗?有没有一种很好的方法可以让它按预期工作(即pip install .[advanced] 也安装other-package[advanced])? (我猜这可能涉及编写自定义 setuptools 类?)

【问题讨论】:

标签: python pip dependencies setuptools


【解决方案1】:

install_requires 列出要求extras_require 列出建议。所以install_requires 总是赢。实现您想要的唯一方法是完全避免硬性要求,在extras_require 中列出所有内容:

setup(
    name="my-package",
    extras_require={
        "advanced": ["other-package[advanced]==1.0.0"]},  # Advanced features
        "simple": ["other-package==1.0.0"]},  # Basic features
    ...
)

并教用户运行 pip install .[simple]pip install .[advanced] 但不运行 pip install .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    相关资源
    最近更新 更多