What do square brackets mean in pip install?
The syntax that you are using is:
pip install "project[extra]"
In your case, you are installing
the splinter
package which has the added support for django
. The square brackets ([]
) are not specific syntax, just convention. Really, you are installing the package named: "splinter[django]"
.
An explanation from @chetner
:
The command
pip install splinter django
would install two packages namedsplinter
anddjango
.splinter[django]
, on the other hand, installs a variant of thesplinter
package which contains support fordjango
. Note that it has nothing to do with thedjango
package itself, but is just a string defined by thesplinter
package for a particular feature set that gets enabled.
Brackets [optional]
in PIP signify optional dependencies
Just in case another developer comes along looking to implement this pattern in their own Python package deployment, here's further explanation of the brackets []
in pip.
For Example: Apache Airflow
To install airflow
from pip we use this command:
pip install 'apache-airflow'
You can install optional components of airflow with:
pip install 'apache-airflow[aws]'
# [optional] -----------^
When we search pypi for apache-airflow
note that the optional packages do not show up:
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
...
Implementation via setup.py
You can see how this was accomplished in the setup.py
script
On the left in setup.py
- extras_require
is defined.
On the right are the correlated installation commands for these optional sub-packages.
Pretty sure these are setuptools extras:
https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies
Sometimes a project has “recommended” dependencies, that are not required for all uses of the project. For example, a project might offer optional PDF output if ReportLab is installed, and reStructuredText support if docutils is installed. These optional features are called “extras” ...