Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中根据用户在运行时的选择安装依赖项?_Python_Pip_Setuptools_Setup.py_Python Packaging - Fatal编程技术网

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

如何在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

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

  • 我的方法正确吗?我应该安装所有依赖项吗

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

    类似于
    pip安装mysdk--env=aws的东西

  • 另外,我知道python确实支持setup.py中的install_requires参数,其中可以使用python_版本变量,但是我可以访问用户定义为args的其他env变量吗?您可以在
    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,