Python ha una storia di confusione di strumenti che possono essere utilizzati per strutturare e descrivere i progetti: questi includono distutils
nella libreria standard, distribute
, distutils2
, e setuptools
(e forse più). Sembra che distribute
e distutils2
sono stati sospesi a favore setuptools
, che lascia due standard in competizione.
Per quanto ne so, setuptools
offre 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
setuptools
per definire progetti e creare distribuzioni di origine.
E spiega:
Sebbene sia possibile utilizzare puro
distutils
per 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
),setuptools
verrà 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 usandosetuptools
invece.
Tuttavia, esaminare i vari file setup.py del progetto rivela che questo non sembra essere uno standard reale. Molti pacchetti continuano a essere utilizzati distutils
e quelli che supportano setuptools
spesso si mescolano setuptools
ad distutils
esempio 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 setuptools
e distutils
. Ciò include spesso vari modi di controllo della dipendenza soggetto a errori, poiché distutils
non supporta le dipendenze nella funzione di installazione.
Perché le persone continuano a fare lo sforzo extra per supportare distutils
- il fatto che setuptools
non sia nella libreria standard è l'unica ragione? Quali sono i vantaggi distutils
e quali sono gli svantaggi della scrittura di file setup.py che supportano solo setuptools
.
setuptools
è un'alternativa migliorata, distutils
ma 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'usodistutils
e ci sono costi per migrare verso standard corretti.