【发布时间】: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 类?)
【问题讨论】:
-
最近,pip 的团队正致力于编写一个新的依赖关系求解器。他们可能有兴趣了解此类问题。也许从这里开始阅读:github.com/pypa/pip/issues/8099——并在这里提出问题:github.com/pypa/pip/issues
标签: python pip dependencies setuptools