Python ha una storia di confusione di strumenti che possono essere utilizzati per strutturare e descrivere i progetti: questi includono distutilsnella libreria standard, distribute, distutils2, e setuptools(e forse più). Sembra che distributee distutils2sono stati sospesi a favore setuptools, che lascia due standard in competizione.
Per quanto ne so, setuptoolsoffre molte più opzioni (ad es. Dichiarazione di dipendenze, test, ecc.) Rispetto a distutils, tuttavia non è incluso nella libreria standard di Python (ancora?).
La Guida per l'utente di Python Packaging [ 1 ] consiglia ora:
Utilizzare
setuptoolsper definire progetti e creare distribuzioni di origine.
E spiega:
Sebbene sia possibile utilizzare puro
distutilsper molti progetti, non supporta la definizione di dipendenze da altri progetti e mancano diverse utilità utili per popolare automaticamente i metadati dei pacchetti forniti dasetuptools. Essendo al di fuori della libreria standard, setuptools offre anche un set di funzionalità più coerente tra le diverse versioni di Python e (a differenza didistutils),setuptoolsverrà aggiornato per produrre i formati standard "Metadata 2.0" in arrivo su tutte le versioni supportate.Anche per i progetti che scelgono di utilizzare
distutils, quando pip installa tali progetti direttamente dal sorgente (anziché installare da un file di ruote precompilato), in realtà costruirà il tuo progetto usandosetuptoolsinvece.
Tuttavia, esaminare i vari file setup.py del progetto rivela che questo non sembra essere uno standard reale. Molti pacchetti continuano a essere utilizzati distutilse quelli che supportano setuptoolsspesso si mescolano setuptoolsad distutilsesempio eseguendo un'importazione fallback:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
Seguito da un tentativo di trovare un modo per scrivere un'installazione che può essere installata da entrambi setuptoolse distutils. Ciò include spesso vari modi di controllo della dipendenza soggetto a errori, poiché distutilsnon supporta le dipendenze nella funzione di installazione.
Perché le persone continuano a fare lo sforzo extra per supportare distutils- il fatto che setuptoolsnon sia nella libreria standard è l'unica ragione? Quali sono i vantaggi distutilse quali sono gli svantaggi della scrittura di file setup.py che supportano solo setuptools.
setuptoolsè un'alternativa migliorata, distutilsma si noti che " Il programma di installazione pip raccomandato esegue tutti gli script setup.py con setuptools, anche se lo script stesso importa solodistutils " ( fonte )
distutilsè stato riunito insetuptools, ma ci sono app legacy che sono state scritte per l'usodistutilse ci sono costi per migrare verso standard corretti.