我正在寻找一种方式来表达类似于 NPM 的
peerDependencies
中的 setuptools
。
我的 Python 库是一个插件,应该与我不想作为依赖项的另一个 Python 库一起使用。相反,我希望我的最终用户对其负责并自行安装。我找不到正确的方法来用 Python 的
setuptools
(或任何其他构建)来表达这一点,让我的用户“了解”该库
根据我目前的理解,这是工具之间的近似值:
NPM | 设置工具 |
---|---|
|
|
|
|
|
??? |
我有两种可能的解决方案,但我发现都缺乏:
无论如何都要使用
extras_require
在
extras_require
下指定我的要求即可完成工作,但感觉像是滥用它,因为用户不应该安装这些附加功能。
只需记录下来
通知用户他们需要单独安装该软件包。感觉也很烂
据我了解,没有必要这样做,因为 Python 无论如何都会处理不同的依赖关系。
使用 npm/node,如果子依赖项之一需要,您可以在同一环境中拥有一个包的多个版本(NPM 如何处理版本冲突?)
这在 Python 中是不可能的。在一个环境中只能安装一个库的单一版本。这意味着您尝试通过对等依赖关系解决的一般问题不会发生。
我的建议是像平常一样指定您的依赖项,但使用宽松的版本说明符。
对此问题的现代答案是:
if find_spec("my_dependency"): ...
),然后将在可用时加载它,否则您的回退将使用定义。regex
包,您可能希望使用它,否则回退到标准库的 re
,而不强制用户为此安装 regex
。