我看到越来越多的这样的命令:
$ pip install "splinter[django]"
这些方括号有什么作用?
您使用的语法是:
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
文件。
[optional]
表示可选依赖项
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
已定义。右侧是这些可选子包的相关安装命令。
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 在后台运行的
问题
中项目的
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"],
[project.optional-dependencies]
中指定。参见
https://github.com/reactive-python/reactpy/blob/403e5f24536808218c511ed0ee0438fd6e1b94c8/src/py/reactpy/pyproject.toml#L38-L65.