Python hat eine verwirrende Geschichte von Werkzeugen , die verwendet werden können Projekte zu verpacken und beschreiben: Dazu gehört distutilsin der Standard - Bibliothek, distribute, distutils2, und setuptools(und vielleicht auch mehr). Es scheint, dass distributeund distutils2wurden zugunsten von eingestellt setuptools, was zwei konkurrierende Standards lässt.
Meines Erachtens setuptoolsbietet es weitaus mehr Optionen (z. B. das Deklarieren von Abhängigkeiten, Tests usw.) als es distutilsjedoch (noch?) Nicht in der Python-Standardbibliothek enthalten ist.
Das Python Packaging-Benutzerhandbuch [ 1 ] empfiehlt jetzt:
Verwenden Sie
setuptoolsdiese Option , um Projekte zu definieren und Quellverteilungen zu erstellen.
Und erklärt:
Obwohl Sie pure
distutilsfür viele Projekte verwenden können, wird das Definieren von Abhängigkeiten von anderen Projekten nicht unterstützt, und es fehlen mehrere praktische Dienstprogramme zum automatischen korrekten Auffüllen von Paketmetadaten, die von bereitgestellt werdensetuptools. Da setuptools außerhalb der Standardbibliothek liegt, bietet es auch einen konsistenteren Funktionsumfang für verschiedene Python-Versionen und wird (anders alsdistutils)setuptoolsaktualisiert, um die kommenden Standardformate „Metadata 2.0“ für alle unterstützten Versionen zu erstellen.Selbst für Projekte, die sich für die Verwendung entscheiden
distutils, wird bei der Installation solcher Projekte durch pip direkt von der Quelle (anstatt von einer vorgefertigten Raddatei) Ihr Projekt tatsächlich mit erstelltsetuptools.
Ein Blick in die setup.py- Dateien verschiedener Projekte zeigt jedoch, dass dies kein tatsächlicher Standard zu sein scheint. Viele Pakete verwenden immer noch distutilsund diejenigen, die dies unterstützen, setuptoolsmischen sich häufig setuptoolsmit distutilsz. B. durch einen Fallback-Import:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
Gefolgt von einem Versuch , einen Weg zu finden , ein Setup zu schreiben , die von beiden installiert werden können setuptoolsund distutils. Dies umfasst häufig verschiedene Methoden zur fehleranfälligen Abhängigkeitsprüfung, da distutilsAbhängigkeiten in der Setup-Funktion nicht unterstützt werden.
Warum bemühen sich die Leute immer noch um zusätzliche Unterstützung distutils- ist die Tatsache, dass sie setuptoolsnicht in der Standardbibliothek enthalten ist, der einzige Grund? Was sind die Vorteile distutilsund gibt es irgendwelche Nachteile zu schreiben setup.py Dateien , die nur Unterstützung setuptools.
setuptoolsist eine erweiterte Alternative zu " distutilsBeachten Sie jedoch, dass" das empfohlene Pip- Installationsprogramm alle setup.py-Skripte mit ausführt setuptools, auch wenn das Skript selbst nur importiertdistutils "( Quelle )
distutilswurde wieder zusammengeführt insetuptools, aber es gibt Legacy-Apps, die für die Verwendung geschrieben wurden,distutilsund es fallen Kosten für die Migration auf korrekte Standards an.