如何在 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。所以我不想安装他不会使用的依赖项。这是我的问题 -
我的方法是否正确,我是否应该安装所有依赖项?
如果不是,那么安装包的最佳方式是什么,以便用户可以向包管理器提供一些参数,以便它只安装属于他所在环境的那些依赖项。
类似于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]
请注意,您还可以像任何其他依赖项一样指定依赖包的版本范围。
我创建了一个使用多个依赖项的 sdk,例如 boto3、azure-storage、google-cloud-datastore 等。现在在我的代码中,我正在动态导入这些模块,因为一次用户将在 GCP、Azure 或 AWS 上使用 sdk。所以我不想安装他不会使用的依赖项。这是我的问题 -
我的方法是否正确,我是否应该安装所有依赖项?
如果不是,那么安装包的最佳方式是什么,以便用户可以向包管理器提供一些参数,以便它只安装属于他所在环境的那些依赖项。
类似于
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]
请注意,您还可以像任何其他依赖项一样指定依赖包的版本范围。