Veo más y más comandos como este:
$ pip install "splinter[django]"
¿Qué hacen estos corchetes?
python
pip
dependency-management
Babken Vardanyan
fuente
fuente
pip install "splinter[django]"
, para evitar cualquier expansión accidental de la capa del patrón.Respuestas:
La sintaxis que está utilizando es:
pip install "project[extra]"
En su caso, usted es
installing
elsplinter
paquete que tiene soporte adicional paradjango
. Los corchetes ([]
) no son una sintaxis específica, solo una convención. En realidad, se está instalando el paquete denominado:"splinter[django]"
.Una explicación de
@chetner
:fuente
extra
significa?splinter
ydjango
.splinter[django]
, por otro lado, instala una variante delsplinter
paquete que contiene soporte paradjango
. Tenga en cuenta que no tiene nada que ver con eldjango
paquete en sí, sino que es solo una cadena definida por elsplinter
paquete para un conjunto de características en particular que se habilita.splinter
sigue siendo el nombre del paquete;pip
por sí mismo lo analizasplinter[django]
y lo reconoce como un nombre de paquete con un "argumento" adicional para ayudarlo a instalar los archivos correctos. La forma en quedjango
se interpreta el argumento depende completamente delsetup.py
archivo (¿o algún otro archivo de configuración? En realidad, no conozco los detalles) utilizado para definir el paquetesplinter
.pip install splinter
instalará menos requisitos quepip install splinter[django]
. Los paquetes adicionales que están instalados pueden de hecho (y probablemente lo hagan) permitir que funciones adicionales de splinter funcionen, pero no cambia nada sobre el paquete splinter en sí. Solo le dice a pip sobre dependencias adicionales.Los corchetes
[optional]
en PIP significan dependencias opcionalesEn caso de que aparezca otro desarrollador que busque implementar este patrón en su propia implementación de paquete de Python, aquí hay una explicación más detallada de
brackets []
in pip.Por ejemplo: Apache Airflow
Para instalar
airflow
desde pip usamos este comando:pip install 'apache-airflow'
Puede instalar componentes opcionales de flujo de aire con:
pip install 'apache-airflow[aws]' # [optional] -----------^
Cuando buscamos PyPI para la
apache-airflow
nota que los paquetes opcionales no aparecen: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 ...
Implementación vía
setup.py
Puede ver cómo se logró esto en el
setup.py
scriptA la izquierda en
setup.py
-extras_require
está definido.A la derecha están los comandos de instalación correlacionados para estos subpaquetes opcionales.
fuente
Estoy bastante seguro de que estos son extras de herramientas de configuración:
https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies
fuente
Esta es exactamente la lista del
setup.py
archivo del proyecto en cuestión :"django": ["Django>=1.7.11;python_version<'3.0'", "Django>=2.0.6;python_version>'3.3'", "lxml>=2.3.6", "cssselect", "six"],
fuente