如何在 Python 的 运行 时间根据用户的选择安装依赖项?

How to installing dependencies based on users choice at run time in Python?

我创建了一个使用多个依赖项的 sdk,例如 boto3、azure-storage、google-cloud-datastore 等。现在在我的代码中,我正在动态导入这些模块,因为一次用户将在 GCP、Azure 或 AWS 上使用 sdk。所以我不想安装他不会使用的依赖项。这是我的问题 -

  1. 我的方法是否正确,我是否应该安装所有依赖项?

  2. 如果不是,那么安装包的最佳方式是什么,以便用户可以向包管理器提供一些参数,以便它只安装属于他所在环境的那些依赖项。

    类似于pip install mysdk --env=aws

P.S。我知道 python 确实支持 setup.py 中的 install_requires 参数,其中可以使用 python_version 变量但是我可以访问用户定义为 args[=13= 的其他环境变量吗]

您可以在 extras_require 块中的 setup.py(或 setup.cfg)中定义 可选 依赖项。

对于您的 setup.py 文件

setup(
    ...
    extras_require={
        'aws':  ["boto3"],
    }
)

setup.cfg 文件

[options.extras_require]
aws = 
    boto3

当 end-user 安装您的软件包时,他们可以通过附加以下内容来指定额外内容:pip install mysdk[aws]

请注意,您还可以像任何其他依赖项一样指定依赖包的版本范围。

更多信息,相关文档在这里:https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies