有没有办法使python包的某些依赖项成为可选的?或以安装另一个依赖项失败为条件。
我有两种情况:
x
和y
。但是,如果任何一个安装失败,则仅使用其中一个安装包就可以正常工作,因此安装时应发出警告。x
安装失败,我想安装依赖项y
。答案 0 :(得分:1)
您可以拥有conditional dependencies,但不是基于其他依赖项安装的成功/失败。
您可以拥有optional dependencies,但是如果可选依赖项无法安装,则安装仍将失败。
使依赖项最简单的方法是可选的(即,如果安装失败,则不会使主安装失败)或有条件的(基于其他软件包的成功/失败)是通过添加一个手动安装的自定义安装命令到pip
来安装各个软件包,并检查每次调用的结果。
在您的setup.py
中:
import sys
import subprocess
from setuptools import setup
from setuptools.command.install import install
class MyInstall(install):
def run(self):
# Attempt to install optional dependencies
try:
subprocess.check_call([sys.executable, "-m", "pip", "install", "dependency-y"])
except subprocess.CalledProcessError:
subprocess.check_call([sys.executable, "-m", "pip", "install", "dependency-x"])
# Continue with regular installation
install.run(self)
setup(
...
cmdclass={
'install': MyInstall,
},
)
请注意,如果您发布源发行版(.tar.gz
或.zip
),这将仅 有效。如果您将软件包发布为内置发行版(.whl
),它将无法正常工作。