Python tiene una confusa historia de las herramientas que se pueden utilizar para empaquetar y describir los proyectos: se completan distutils
en la librería estándar, distribute
, distutils2
, y setuptools
(y tal vez más). Parece que distribute
y distutils2
fueron descontinuados a favor de setuptools
, lo que deja dos estándares en competencia.
Según tengo entendido, setuptools
ofrece muchas más opciones (por ejemplo, declarar dependencias, pruebas, etc.) que distutils
, sin embargo, no está incluido en la biblioteca estándar de Python (¿todavía?).
La Guía del usuario de Python Packaging [ 1 ] recomienda ahora:
Úselo
setuptools
para definir proyectos y crear Distribuciones de origen.
Y explica:
Aunque puede usar puro
distutils
para muchos proyectos, no admite la definición de dependencias en otros proyectos y le faltan varias utilidades de conveniencia para completar automáticamente los metadatos del paquete proporcionados porsetuptools
. Al estar fuera de la biblioteca estándar, setuptools también ofrece un conjunto de características más consistente en diferentes versiones de Python, y (a diferencia dedistutils
),setuptools
se actualizará para producir los próximos formatos estándar "Metadata 2.0" en todas las versiones compatibles.Incluso para proyectos que eligen usar
distutils
, cuando pip instala dichos proyectos directamente desde la fuente (en lugar de instalarlos desde un archivo de rueda preconstruido), en realidad construirá su proyecto usandosetuptools
en su lugar.
Sin embargo, mirar los archivos setup.py de varios proyectos revela que esto no parece ser un estándar real. Todavía se usan muchos paquetes distutils
y los que admiten a setuptools
menudo se mezclan, setuptools
por distutils
ejemplo, haciendo una importación alternativa:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
Seguido de un intento de encontrar una manera de escribir una configuración que pueda ser instalada por ambos setuptools
y distutils
. Esto a menudo incluye varias formas de comprobación de dependencias propensas a errores, ya distutils
que no admite dependencias en la función de configuración.
¿Por qué la gente sigue haciendo un esfuerzo adicional para apoyar distutils
? ¿Es el hecho de que setuptools
no está en la biblioteca estándar la única razón? ¿Cuáles son las ventajas distutils
y los inconvenientes de escribir archivos setup.py que solo son compatibles setuptools
?
setuptools
es una alternativa mejorada, distutils
pero tenga en cuenta que " el instalador de pip recomendado ejecuta todos los scripts setup.py setuptools
, incluso si el script solo importadistutils
" ( fuente )
distutils
se ha fusionado nuevamentesetuptools
, pero hay aplicaciones heredadas que se escribieron para usardistutils
y hay costos involucrados para migrar a los estándares correctos.