根据条件安装依赖
Installing dependency on condition
我有一个 Python 包 P
,它有要求 A
和要求 B3.4
,但是 A
有要求 B4.1
。但是,我知道 P 在某些情况下可以与 B4.1
一起正常工作。如果在目标环境中找不到另一个版本的 B
,我希望能够 pip install package P
并且只安装 B3.4
。
我尝试了以下方法:
- 从
setuptools.command.install.install
继承以覆盖安装命令,如此处解释:https://blog.niteo.co/setuptools-run-custom-code-in-setup-py/。我尝试在 install.run
之后和之前检查并安装 B
- 正在尝试导入
B
并在导入不成功时添加 B3.4
作为要求。结果是总是添加 B3.4
,即使已经安装了 B4.1
。
是否有任何原因可能无法正常工作?我还有哪些其他选择?
谢谢!
我认为您没有任何干净的解决方案,您将不得不使用一些技巧。
在构建时涉及动态检查的解决方案(即 setup.py
中的代码)非常有限,因为一旦构建了轮子它们就无法工作。
在 运行 时涉及动态检查的解决方案不是最佳实践,并且还有很多问题(加载已安装的 模块 进程中 很棘手)。
我现在能想到的一个可能的解决方法是将 P 对 B==3.4
的要求移动到 可选依赖项 (extras),但它也有明显的局限性。只要在 P 的文档中清楚地解释了它,并且清楚地说明了副作用,我会说这是公平的游戏。
我有一个 Python 包 P
,它有要求 A
和要求 B3.4
,但是 A
有要求 B4.1
。但是,我知道 P 在某些情况下可以与 B4.1
一起正常工作。如果在目标环境中找不到另一个版本的 B
,我希望能够 pip install package P
并且只安装 B3.4
。
我尝试了以下方法:
- 从
setuptools.command.install.install
继承以覆盖安装命令,如此处解释:https://blog.niteo.co/setuptools-run-custom-code-in-setup-py/。我尝试在install.run
之后和之前检查并安装 - 正在尝试导入
B
并在导入不成功时添加B3.4
作为要求。结果是总是添加B3.4
,即使已经安装了B4.1
。
B
是否有任何原因可能无法正常工作?我还有哪些其他选择?
谢谢!
我认为您没有任何干净的解决方案,您将不得不使用一些技巧。
在构建时涉及动态检查的解决方案(即 setup.py
中的代码)非常有限,因为一旦构建了轮子它们就无法工作。
在 运行 时涉及动态检查的解决方案不是最佳实践,并且还有很多问题(加载已安装的 模块 进程中 很棘手)。
我现在能想到的一个可能的解决方法是将 P 对 B==3.4
的要求移动到 可选依赖项 (extras),但它也有明显的局限性。只要在 P 的文档中清楚地解释了它,并且清楚地说明了副作用,我会说这是公平的游戏。