¿Cuál es la diferencia entre `extras_require()` e `install_requires()` en setup.py?

3 minutos de lectura

Avatar de usuario de Harish R
Harish R.

Estoy tratando de entender la diferencia entre extras_require() y install_requires() en setup.py pero no he podido obtenerlo. Ambos se usan para instalar dependencias de Python, pero ¿cuál es la diferencia entre ellos?

avatar de usuario de user812786
usuario812786

De acuerdo con la documentación de herramientas de configuración,

extras_require

Un diccionario que asigna nombres de “extras” (características opcionales de su proyecto) a cadenas o listas de cadenas que especifican qué otras distribuciones deben instalarse para admitir esas características.

y

install_requires

Una cadena o lista de cadenas que especifican qué otras distribuciones deben instalarse cuando ésta lo está.

La sección sobre Declarar “Extras” (características opcionales con sus propias dependencias) profundiza en esto:

A veces, un proyecto tiene dependencias “recomendadas”, que no son necesarias para todos los usos del proyecto. Por ejemplo, un proyecto puede ofrecer una salida PDF opcional si ReportLab está instalado y compatibilidad con reStructuredText si docutils está instalado. Estas funciones opcionales se denominan “extras” y las herramientas de configuración también le permiten definir sus requisitos. De esta forma, otros proyectos que requieran estas características opcionales pueden obligar a instalar los requisitos adicionales, nombrando los extras deseados en sus install_requires.

La mayor diferencia es que los requisitos en extras_require solo se instalan según sea necesario:

Estos requisitos no se instalarán automáticamente a menos que otro paquete dependa de ellos (directa o indirectamente) al incluir los “extras” deseados entre corchetes después del nombre del proyecto asociado. (O si los extras se incluyeron en una especificación de requisitos en la línea de comandos de EasyInstall).

Así que para resumir:

  • Si la dependencia es necesario para ejecutar su proyecto, póngalo en install_requires. Siempre estarán instalados.
  • Si tu proyecto tiene características opcionales que añaden dependencias, pon esas dependencias en extras_require. Esas dependencias serán no instalarse a menos que el usuario u otro paquete solicite esa función.

  • Para instalar los extras puedes usar algo como pip install 'package[extra]'.

    – mforbes

    18 de agosto de 2019 a las 19:06


  • bonito documentos por extras_require y install_requires

    – 0dminnimda

    27 de junio de 2021 a las 16:58

avatar de usuario de florisla
florisla

install_requires son los paquetes de dependencia que se instalan pase lo que pase.

pip install mypackage

extras_require son opcionales y deben especificarse en el momento de la instalación. Esta es una característica de pip.

pip install mypackage[extra]
pip install mypackage[develop]
pip install mypackage[extra,develop]

Un buen ejemplo es https://pypi.org/project/imgui/ que le permite elegir un backend de gráficos específico.

Referirse a PEP 508 para ver todos los posibles selectores que puede utilizar; p.ej ; python_version < "2.7".

Avatar de usuario de Jay
Arrendajo

No estoy seguro del uso oficial, pero uso extras_require() para especificar dependencias condicionales.

En mi caso –

extras_require={":python_version<'3.5'": ["scandir"]}

Teóricamente, esto debería estar disponible a través de install_requires() en sí mismo, pero solo funciona como debería a partir de la versión X.XX (varios reclamos sobre qué versión comienza a hacerlo bien) de setuptools.

Este artículo lo explica muy bien: Dependencias condicionales de Python

  • “versión X.XX” es “al menos versión 20.5“o tal vez incluso” al menos v36.2.0“, Por lo que yo puedo decir.

    – ceniza

    17 de agosto de 2018 a las 10:51

¿Ha sido útil esta solución?