有没有办法使 python 包的某些依赖项成为可选的?或者以安装另一个依赖项失败为条件。
我手上的两个案例是:
- 我想安装依赖项
x
和y
。但是,如果其中一个安装失败,该软件包可能只能与其中一个一起正常工作,因此安装完成时会出现警告。 - 如果
y
安装失败,我想安装依赖项x
。
最佳答案
您可以有conditional dependencies ,但不基于其他依赖项安装的成功/失败。
您可以有optional dependencies ,但是如果可选依赖项安装失败,安装仍然会失败。
使依赖项成为可选(即,如果安装失败,主安装也不会失败)或有条件(基于其他包的成功/失败)的最简单方法是添加手动 shell 的自定义安装命令输出到 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
),它将不起作用。
关于python - 如何在 pip 19 和 python3.7 的包中指定可选和条件依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57111966/