我看到越来越多这样的命令:
$ pip install "splinter[django]"
这些方括号是做什么用的?
我看到越来越多这样的命令:
$ pip install "splinter[django]"
这些方括号是做什么用的?
当前回答
这正是该项目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"],
其他回答
TLDR
方括号包含setup.py中定义的“extra”选项信息,pip将使用该选项安装额外的依赖项。
pip install "splinter[django]"
具体来说,上面的代码行将首先安装'splinter'包,然后安装'splinter'项目所需的额外依赖项,使用'splinter'项目的setup.py中指定的'django'选项。
解释
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安装都将产生以下包。
两个pip安装命令实现相同效果的原因是,这实际上是基于splinter包的setup.py在后台运行的
'[django]'是'splinter'包的'额外'选项。Pip将查看splinter包的setup.py,并通过指定的“[django]”选项找到需要安装的内容。在本例中,就是这3个包:["Django>=2.0.6", "lxml>=4.2.4", "cssselect"]
PIP中的括号[optional]表示可选依赖项
以防其他开发人员希望在他们自己的Python包部署中实现此模式,这里进一步解释pip中的括号[]。
例如:Apache气流
要从pip安装气流,我们使用这个命令:
pip install 'apache-airflow'
你可以安装可选的气流组件:
pip install 'apache-airflow[aws]'
# [optional] -----------^
当我们在pypi中搜索apache-气流时,注意可选包没有显示出来:
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。 右边是这些可选子包的相关安装命令。
也许值得知道的是,这个可选包语法允许多个额外项(括号内用逗号分隔),如:
python -m pip install SomePackage[PDF,EPUB] # multiple extras
按照pip手册
这正是该项目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"],
我很确定这些是setuptools的额外功能:
https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies
有时项目有“推荐的”依赖项,这些依赖项对于项目的所有使用都不是必需的。例如,如果安装了ReportLab,项目可能提供可选的PDF输出,如果安装了docutils,项目可能提供reStructuredText支持。这些可选的功能被称为“额外功能”。