有没有办法使python包的某些依赖项可选?或者以安装另一个依赖项失败为条件。
我有两个案例是:
- 我想安装依赖项
x
和y
。但是,如果其中一个安装失败,软件包可能仅使用其中一个就可以正常工作,因此安装应该完成并显示警告。 - 我想安装依赖项
x
如果安装失败y
。
可以有条件依赖项,但不能基于安装其他依赖项的成功/失败。
可以具有可选依赖项,但如果可选依赖项安装失败,安装仍将失败。
使依赖项成为可选(即,如果安装失败,主安装不会失败(或有条件(基于其他软件包的成功/失败(的最简单方法是添加一个自定义安装命令,该命令手动向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
(,它将不起作用。