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?
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
yinstall_requires
– 0dminnimda
27 de junio de 2021 a las 16:58
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"
.
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