Python 在pip安装中,方括号是什么意思?

Python 在pip安装中,方括号是什么意思?,python,pip,dependency-management,Python,Pip,Dependency Management,我看到越来越多这样的命令: $ pip install "splinter[django]" 这些方括号起什么作用?您使用的语法是: pip install "project[extra]" 在您的情况下,您正在安装splinter软件包,该软件包增加了对django的支持。方括号([])不是特定的语法,只是惯例。实际上,您正在安装名为:“splinter[django]”的软件包 来自chetner的解释: 命令pip install splinter django将安装两个名为spli

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

$ pip install "splinter[django]"

这些方括号起什么作用?

您使用的语法是:

pip install "project[extra]"

在您的情况下,您正在安装
splinter
软件包,该软件包增加了对
django
的支持。方括号(
[]
)不是特定的语法,只是惯例。实际上,您正在安装名为:
“splinter[django]”
的软件包

来自chetner的解释:

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


非常确定这些是额外的设置工具:

有时,项目具有“推荐”依赖项,而不是项目的所有用途都需要这些依赖项。例如,如果安装了ReportLab,项目可能会提供可选的PDF输出,如果安装了docutils,项目可能会提供StructuredText支持。这些可选功能称为“附加功能”


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

“django”:[“django>=1.7.11;python_version=2.0.6;python_version>'3.3',“lxml>=2.3.6”,“cssselect”,“six”],
PIP中的括号
[可选]
表示可选依赖项 为了防止另一个开发人员希望在他们自己的Python包部署中实现此模式,下面将进一步解释pip中的
方括号[]

例如:ApacheAirflow 要从pip安装
气流
,我们使用以下命令:

pip安装“apache airflow”
您可以通过以下方式安装气流的可选组件:

pip安装“apache气流[aws]”
#[可选]-----------^
当我们搜索
apache airflow
时,请注意可选软件包不会显示:

pip搜索“apache气流”
apache airflow(1.10.9)-以编程方式编写、调度和监视数据管道
pylint气流(0.1.0a1)-lint Apache气流代码的pylint插件。
swe气流工具(0.0.3)-用于Apache气流应用程序的工具
气流(0.6)-旧气流包的占位符
...
通过
setup.py实现
您可以在
setup.py

在左侧,定义了-
额外要求。
右侧是这些可选子包的相关安装命令


也许值得一提的是,此可选软件包语法允许多个附加项(括号内用逗号分隔),如下所示:


根据

注意,它应该是
pip安装“splinter[django]”
,以避免模式的任何意外外壳扩展。@Ryan好的,现在添加它作为正确的答案,我会接受它。@chepner很好,我编辑了这篇文章。是否要扩展您的答案,以便将来的用户能够受益?例如,
extra
意味着什么?@BabkenVardanyan该命令将安装两个名为
splinter
django
的软件包<另一方面,code>splinter[django]
安装了
splinter
包的一个变体,其中包含对
django
的支持。请注意,它与
django
包本身无关,只是由
splinter
包为启用的特定功能集定义的字符串。
splinter
仍然是包名
pip
本身解析
splinter[django]
并将其识别为带有额外“参数”的包名,以帮助其安装正确的文件。参数
django
的解释方式完全取决于用于定义包
splitter
setup.py
文件(或其他一些配置文件?我实际上不知道细节)。我相信[extra]语法所做的唯一一件事就是指定将要安装的extras\u所需的其他文件。也就是说,
pip-install-splinter
pip-install-splinter[django]
安装的需求更少。安装的附加软件包可能确实(而且可能确实)使splinter的附加功能能够工作,但它不会改变splinter软件包本身的任何内容。它只是告诉pip其他依赖项。我认为这个答案是不正确的。这并不安装“splinter[django]”包,而是同时安装splinter和django项目。正如@paul和prostiBut在回答中所解释的,这些是setuptools附加功能。我可以查询一下有多少“推荐”依赖项可用吗?特别是,它们是否都是独立的、可组合的/兼容的?我可以安装所有这些吗,比如
pip安装包[*]
"django": ["Django>=1.7.11;python_version<'3.0'", "Django>=2.0.6;python_version>'3.3'", "lxml>=2.3.6", "cssselect", "six"],
python -m pip install SomePackage[PDF,EPUB]  # multiple extras