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


107

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

$ pip install "splinter[django]"

这些方括号有什么作用?




请注意,它pip install "splinter[django]",以避免图案的任何外壳意外扩展。
chepner

@Ryan Ok现在将其添加为正确的答案,我会接受的。
巴本·瓦尔丹扬

@chepner好,我编辑了帖子。
巴本·瓦尔丹扬

Answers:


87

您使用的语法是:

pip install "project[extra]"

就您而言,您就是installingsplinter的新增支持的软件包django。方括号([])不是特定的语法,只是约定。确实,您正在安装名为的软件包"splinter[django]"

来自的解释@chetner

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


1
希望扩大您的答案,以便将来的用户可以受益吗?例如什么extra意思?
巴本·瓦尔丹扬

6
@BabkenVardanyan该命令将安装两个名为splinter和的软件包djangosplinter[django]另一方面,会安装该splinter软件包的变体,其中包含对的支持django。请注意,它与django程序包本身无关,只是splinter程序包为启用的特定功能集定义的字符串。
chepner

6
splinter仍然是包裹名称;pip本身将其解析splinter[django]并识别为包名称,并带有一个额外的“参数”以帮助其安装正确的文件。参数django的解释方式完全取决于setup.py用于定义包的文件(或其他一些配置文件?我实际上不知道详细信息)splinter
chepner

1
我相信[extra]语法唯一要做的就是从extras_requires中指定将要安装的其他内容。也就是说,pip install splinter将安装的需求少于pip install splinter[django]。实际上,已安装的其他软件包可以(也可能确实)启用了splinter的附加功能,但不会更改splinter软件包本身的任何内容。它只是告诉pip有关其他依赖项的信息。
William Pursell

7
我认为这个答案是不正确的。这不会安装“ splinter [django]”包,但会安装splinter和Django项目。这些是setuptools Extras,如@paul和prosti的答案中所述
user1523170

25

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

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

例如: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定义的方式。
右侧是这些可选子软件包的相关安装命令。

setup.py与安装



4

这也正是从列表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

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

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

根据点子手册

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.