¿Qué significan los corchetes en la instalación de pip?

100

Veo más y más comandos como este:

$ pip install "splinter[django]"

¿Qué hacen estos corchetes?

Babken Vardanyan
fuente
Tenga en cuenta que debería ser así pip install "splinter[django]", para evitar cualquier expansión accidental de la capa del patrón.
chepner
@Ryan Ok ahora agregue eso como una respuesta adecuada y la aceptaré.
Babken Vardanyan
@chepner Buen punto, edité la publicación.
Babken Vardanyan

Respuestas:

80

La sintaxis que está utilizando es:

pip install "project[extra]"

En su caso, usted es installingel splinterpaquete que tiene soporte adicional para django. 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:

El comando pip install splinter djangoinstalaría dos paquetes llamados splintery django. splinter[django], por otro lado, instala una variante del splinterpaquete que contiene soporte para django. Tenga en cuenta que no tiene nada que ver con el djangopaquete en sí, sino que es solo una cadena definida por el splinterpaquete para un conjunto de características en particular que se habilita.

Joe Iddon
fuente
1
¿Le gustaría ampliar su respuesta para que los futuros usuarios puedan beneficiarse? Por ejemplo, ¿qué extrasignifica?
Babken Vardanyan
6
@BabkenVardanyan Ese comando instalaría dos paquetes llamados splintery django. splinter[django], por otro lado, instala una variante del splinterpaquete que contiene soporte para django. Tenga en cuenta que no tiene nada que ver con el djangopaquete en sí, sino que es solo una cadena definida por el splinterpaquete para un conjunto de características en particular que se habilita.
chepner
5
splintersigue siendo el nombre del paquete; pippor sí mismo lo analiza splinter[django]y lo reconoce como un nombre de paquete con un "argumento" adicional para ayudarlo a instalar los archivos correctos. La forma en que djangose interpreta el argumento depende completamente del setup.pyarchivo (¿o algún otro archivo de configuración? En realidad, no conozco los detalles) utilizado para definir el paquete splinter.
chepner
1
Creo que lo único que hace la sintaxis [extra] es especificar adicionales de extras_requires que se instalarán. Es decir, pip install splinterinstalará menos requisitos que pip 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.
William Pursell
6
Creo que esta respuesta es incorrecta. Esto no instala un paquete "splinter [django]", sino tanto proyectos splinter como Django. Estos son extras de setuptools como se explica en las respuestas de @paul y prosti
user1523170
19

Los corchetes [optional]en PIP significan dependencias opcionales

En 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 airflowdesde 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-airflownota 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 script
A la izquierda en setup.py- extras_requireestá definido.
A la derecha están los comandos de instalación correlacionados para estos subpaquetes opcionales.

setup.py vs instalar

Ben DeMott
fuente
12

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

A veces, un proyecto tiene dependencias "recomendadas", que no son necesarias para todos los usos del proyecto. Por ejemplo, un proyecto puede ofrecer salida en PDF opcional si ReportLab está instalado y soporte reStructuredText si está instalado docutils. Estas funciones opcionales se denominan "extras" ...

Paul
fuente
4

Esta es exactamente la lista del setup.pyarchivo 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"],
prosti
fuente