方括号在pip安装中意味着什么?

时间:2017-10-16 16:55:19

标签: python pip dependency-management

我看到越来越多这样的命令:

$ pip install "splinter[django]"

这些方括号有什么作用?

5 个答案:

答案 0 :(得分:40)

您使用的语法是:

pip install "project[extra]"

在您的情况下,您是installing splinter个包,其中包含django的附加支持。方括号([])不是特定语法,只是约定。实际上,您正在安装名为"splinter[django]"的包。

来自@chetner的解释:

  

命令pip install splinter django将安装两个名为splinterdjango的包。另一方面,splinter[django]会安装splinter包的变体,其中包含django支持。请注意,它与django包本身无关,而只是由splinter包定义的字符串,用于启用的特定功能集。

答案 1 :(得分:22)

PIP中的括号[optional]表示可选的依赖项

以防万一有其他开发人员希望在自己的Python包部署中实现此模式,以下是对pip中的brackets []的进一步说明。

例如:Apache Airflow

要从 pip 安装airflow,请使用以下命令:

pip install 'apache-airflow'

您可以使用以下方法安装气流的可选组件:

pip install 'apache-airflow[aws]'
#      [optional] -----------^

当我们搜索 pypi apache-airflow时,请注意,可选软件包不会显示:

pip search 'apache-airflow'

apache-airflow (1.10.9)                            - Programmatically author, schedule and monitor data pipelines
pylint-airflow (0.1.0a1)                           - A Pylint plugin to lint Apache Airflow code.
swe-airflow-tools (0.0.3)                          - Tools for Apache Airflow Application
airflow (0.6)                                      - Placeholder for the old Airflow package
...

通过setup.py

实施

您可以在setup.py script
中看到这是如何完成的 在setup.py的左侧-定义了extras_require
右侧是这些可选子软件包的相关安装命令。

setup.py vs install

答案 2 :(得分:5)

也许值得知道的是,这个可选的包语法允许多个附加项(在括号内用逗号分隔),如:

python -m pip install SomePackage[PDF,EPUB]  # multiple extras

根据pip manual

答案 3 :(得分:4)

非常确定这些是setuptools extras:

https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies

  

有时项目具有“推荐”的依赖关系,这对项目的所有使用都不是必需的。例如,如果安装了ReportLab,项目可能会提供可选的PDF输出,如果安装了docutils,则可能提供reStructuredText支持。这些可选功能称为“附加功能”......

答案 4 :(得分:2)

这正是question中项目的setup.py文件中的列表:

"django": ["Django>=1.7.11;python_version<'3.0'", "Django>=2.0.6;python_version>'3.3'", "lxml>=2.3.6", "cssselect", "six"],