pip install 中的方括号是什么意思?

问题描述 投票:0回答:7

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

$ pip install "splinter[django]"

这些方括号有什么作用?

python pip dependency-management
7个回答
168
投票

您使用的语法是:

pip install "project[extra]"

就您而言,您是

installing
splinter
软件包,其中添加了对
django
的支持。

来自

@chepner
的解释:

pip install splinter django
将安装两个名为
splinter
django
的软件包。

另一方面,

pip install splinter[django]
安装
splinter
软件包的变体,其中包含 django
support
。请注意,它与
django
包本身无关,而只是
splinter
包为启用的特定功能集定义的字符串。 django 参数如何解释完全取决于它的
setup.py
文件。


126
投票
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

 
脚本中看到这是如何完成的 左侧的
setup.py
 - 
extras_require
 已定义。
右侧是这些可选子包的相关安装命令。


31
投票
很确定这些是安装工具的附加功能:

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

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


29
投票
也许值得知道的是,这个可选包语法允许多个额外内容(在括号内用逗号分隔),如下所示:

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

pip 手册


12
投票
TLDR

方括号包含 setup.py 中定义的“额外”选项信息,pip 将使用该信息来安装其他依赖项。

pip install "splinter[django]"
具体来说,上面的行将首先安装“splinter”包,然后使用“splinter”项目的 setup.py 中指定的“django”选项安装“splinter”项目所需的额外依赖项。

说明

pip install "splinter[django]" pip install "splinter" "Django>=2.0.6" "lxml>=4.2.4" "cssselect"
从 splinter==0.16.0 开始,对于 python==3.9.2,以上两个命令是等效的。

两个 pip install 都会在干净的虚拟环境中生成以下软件包。

两个 pip install 命令实现相同的效果是因为这实际上是基于 splinter 包的

setup.py 在后台运行的

“[django]”是“splinter”包的“额外”选项。 Pip 将查看 splinter 包的 setup.py,并找到需要使用指定的 '[django]' 选项安装的内容。在本例中,是这 3 个包:["Django>=2.0.6", "lxml>=4.2.4", "cssselect"]


6
投票
这正是

问题

中项目的
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"],
    

0
投票
除了 setup.py 中的

extras_require

 之外,这些额外的依赖项也可能在 pyproject.toml 的 [project.optional-dependencies]
 中指定。

参见

https://github.com/reactive-python/reactpy/blob/403e5f24536808218c511ed0ee0438fd6e1b94c8/src/py/reactpy/pyproject.toml#L38-L65.

© www.soinside.com 2019 - 2023. All rights reserved.