python - 如何在 pip 19 和 python3.7 的包中指定可选和条件依赖项

标签 python python-3.x pip setuptools pypi

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

我手上的两个案例是:

  1. 我想安装依赖项xy。但是,如果其中一个安装失败,该软件包可能只能与其中一个一起正常工作,因此安装完成时会出现警告。
  2. 如果 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/

相关文章:

Python UDP 套接字不接收环回地址上的消息

python - 如何为旧的 python 版本安装 python-distutils

python - Windows 上的 pip 给出错误 - 未知或不受支持的命令 'install'

proxy - 如何使用代理进行 docker-compose pip install ?

python - 在python中添加多个数组

python - 在 Pydev Eclipse 中使用 MySQL

python - 如何在特定情况下对Python中的任意数字进行四舍五入

python - 我可以在代码中的 python 游戏中包含音乐吗?

python-3.x - 错误: Complete output from command : Error installing spaCy using pip

python - 如何使用超调将 numpy 数组从 0 缩放到 1?