Python 中是否有相当于 NPM 的“peerDependency”(最好在 setuptools 中)?

问题描述 投票:0回答:2

我正在寻找一种方式来表达类似于 NPM 的

peerDependencies
中的
setuptools

我的 Python 库是一个插件,应该与我不想作为依赖项的另一个 Python 库一起使用。相反,我希望我的最终用户对其负责并自行安装。我找不到正确的方法来用 Python 的

setuptools
(或任何其他构建)来表达这一点,让我的用户“了解”该库

根据我目前的理解,这是工具之间的近似值:

NPM 设置工具
dependencies
install_requires
optionalDependencies
extras_require
peerDependencies
???

我有两种可能的解决方案,但我发现都缺乏:

  1. 无论如何都要使用

    extras_require

    extras_require
    下指定我的要求即可完成工作,但感觉像是滥用它,因为用户不应该安装这些附加功能。

  2. 只需记录下来

    通知用户他们需要单独安装该软件包。感觉也很烂

python dependencies setuptools peer-dependencies
2个回答
3
投票

据我了解,没有必要这样做,因为 Python 无论如何都会处理不同的依赖关系。

使用 npm/node,如果子依赖项之一需要,您可以在同一环境中拥有一个包的多个版本(NPM 如何处理版本冲突?

这在 Python 中是不可能的。在一个环境中只能安装一个库的单一版本。这意味着您尝试通过对等依赖关系解决的一般问题不会发生。

我的建议是像平常一样指定您的依赖项,但使用宽松的版本说明符。


0
投票

对此问题的现代答案是:

  • 如果您的库/应用程序需要依赖项才能运行,您应该将其添加为依赖项(指定尽可能宽松的版本,以便您的用户可以在需要时拥有不同的版本)。
  • 如果可选功能需要依赖项,您可以指定一个或多个extras。然后,用户可以选择加入这些,如果这样做,您指定的依赖项也将被安装。
  • 如果依赖项是直接替换,您只想在安装后使用它,则可以在代码中适当的位置使用条件导入 (
    if find_spec("my_dependency"): ...
    ),然后将在可用时加载它,否则您的回退将使用定义。
    例如,如果用户有
    regex
    包,您可能希望使用它,否则回退到标准库的
    re
    ,而不强制用户为此安装
    regex
© www.soinside.com 2019 - 2024. All rights reserved.