Python 安装依赖条件

Python 安装依赖条件,python,pip,setuptools,Python,Pip,Setuptools,我有一个Python包p,它有requirementa和requirementB3.4,但是a有requirementB4.1。但是,我知道P在某些情况下可以与B4.1配合使用。我希望能够pip安装包P,并且仅在目标环境中找不到另一版本的B时安装B3.4 我尝试了以下方法: 继承自setuptools.command.install.install以覆盖此处解释的安装命令:。我尝试在安装前后检查并安装B。运行 尝试导入B,如果导入未成功,则添加B3.4,作为一项要求。事实证明,始终添加了B3.

我有一个Python包
p
,它有requirement
a
和requirement
B3.4
,但是
a
有requirement
B4.1
。但是,我知道P在某些情况下可以与
B4.1
配合使用。我希望能够pip安装包
P
,并且仅在目标环境中找不到另一版本的
B
时安装
B3.4

我尝试了以下方法:

  • 继承自
    setuptools.command.install.install
    以覆盖此处解释的安装命令:。我尝试在安装前后检查并安装
    B
    。运行
  • 尝试导入
    B
    ,如果导入未成功,则添加
    B3.4
    ,作为一项要求。事实证明,始终添加了
    B3.4
    ,即使已经安装了
    B4.1
是否有任何原因使其不起作用?我还有别的选择吗


谢谢大家!

我认为你没有任何干净的解决方案,你必须使用一些技巧

涉及在构建时进行动态检查的解决方案(即
setup.py
中的代码)非常有限,因为一旦构建车轮,这些解决方案就无法工作

涉及在运行时进行动态检查的解决方案不是最佳实践,而且也有很多问题(加载在进程中安装的模块很棘手)


我现在能想到的一个可能的解决办法是将p对
B==3.4
的要求移动到可选依赖项(extras),但它也有明显的限制。只要在P的文档中有明确的解释,并且副作用也有明确的说明,我认为这是一个公平的游戏。

在您的设置文件中的要求中,您应该能够设置可接受的版本。我认为您没有任何干净的解决方案,您必须使用一些技巧。涉及在构建时进行动态检查(即
setup.py
中的代码)的解决方案非常有限,因为一旦构建车轮,它就无法工作。涉及在运行时进行动态检查的解决方案不是最佳实践,也存在许多问题。我现在能想到的一个可能的解决办法是将
P
B==3.4
的要求改为可选要求(额外要求),但它也有明显的局限性。谢谢@sinoroc我试图避免这种情况,但我认为你是对的,这听起来是唯一可行的方法