如何在pip19和python3.7的软件包中指定可选和条件依赖

时间:2019-07-19 11:52:23

标签: python python-3.x pip setuptools pypi

有没有办法使python包的某些依赖项成为可选的?或以安装另一个依赖项失败为条件。

我有两种情况:

  1. 我要安装依赖项xy。但是,如果任何一个安装失败,则仅使用其中一个安装包就可以正常工作,因此安装时应发出警告。
  2. 如果x安装失败,我想安装依赖项y

1 个答案:

答案 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),它将无法正常工作。