如何在Python中根据用户在运行时的选择安装依赖项?
我已经创建了一个sdk,它利用了多个依赖项,例如boto3、azure存储、google云数据存储等。现在在我的代码中,我正在动态导入这些模块,因为用户将在GCP、azure或AWS上使用sdk。所以我不想安装他不会使用的依赖项。这是我的问题-如何在Python中根据用户在运行时的选择安装依赖项?,python,pip,setuptools,setup.py,python-packaging,Python,Pip,Setuptools,Setup.py,Python Packaging,我已经创建了一个sdk,它利用了多个依赖项,例如boto3、azure存储、google云数据存储等。现在在我的代码中,我正在动态导入这些模块,因为用户将在GCP、azure或AWS上使用sdk。所以我不想安装他不会使用的依赖项。这是我的问题- 我的方法正确吗?我应该安装所有依赖项吗 如果不是,那么安装包的最佳方式是什么,这样用户就可以向包管理器提供一些参数,以便它只安装属于他所在环境的依赖项 类似于pip安装mysdk--env=aws的东西 另外,我知道python确实支持setup.p
pip安装mysdk--env=aws的东西
extras require
块中的setup.py
(或setup.cfg
)中定义可选的依赖项
对于setup.py
文件
setup(
...
extras_require={
'aws': ["boto3"],
}
)
[options.extras_require]
aws =
boto3
或用于setup.cfg
文件
setup(
...
extras_require={
'aws': ["boto3"],
}
)
[options.extras_require]
aws =
boto3
当最终用户安装您的软件包时,他们可以通过附加以下内容来指定附加内容:pip install mysdk[aws]
请注意,您还可以像指定任何其他依赖项一样指定依赖项包的版本范围
有关更多信息,请参阅此处的相关文档:因此,使用sdk的开发人员是否可以在其requirements.txt文件中指定
mysdk[aws]==1.0.0
?@himanshu219这是正确的。尽管我建议使用mysdk[aws]>=1.0,