Python tiene una confusa historia de las herramientas que se pueden utilizar para empaquetar y describir los proyectos: se completan distutilsen la librería estándar, distribute, distutils2, y setuptools(y tal vez más). Parece que distributey distutils2fueron descontinuados a favor de setuptools, lo que deja dos estándares en competencia.
Según tengo entendido, setuptoolsofrece 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
setuptoolspara definir proyectos y crear Distribuciones de origen.
Y explica:
Aunque puede usar puro
distutilspara 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),setuptoolsse 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 usandosetuptoolsen 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 distutilsy los que admiten a setuptoolsmenudo se mezclan, setuptoolspor distutilsejemplo, 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 setuptoolsy distutils. Esto a menudo incluye varias formas de comprobación de dependencias propensas a errores, ya distutilsque 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 setuptoolsno está en la biblioteca estándar la única razón? ¿Cuáles son las ventajas distutilsy los inconvenientes de escribir archivos setup.py que solo son compatibles setuptools?
setuptoolses una alternativa mejorada, distutilspero tenga en cuenta que " el instalador de pip recomendado ejecuta todos los scripts setup.py setuptools, incluso si el script solo importadistutils " ( fuente )
distutilsse ha fusionado nuevamentesetuptools, pero hay aplicaciones heredadas que se escribieron para usardistutilsy hay costos involucrados para migrar a los estándares correctos.