Python hat eine verwirrende Geschichte von Werkzeugen , die verwendet werden können Projekte zu verpacken und beschreiben: Dazu gehört distutils
in der Standard - Bibliothek, distribute
, distutils2
, und setuptools
(und vielleicht auch mehr). Es scheint, dass distribute
und distutils2
wurden zugunsten von eingestellt setuptools
, was zwei konkurrierende Standards lässt.
Meines Erachtens setuptools
bietet es weitaus mehr Optionen (z. B. das Deklarieren von Abhängigkeiten, Tests usw.) als es distutils
jedoch (noch?) Nicht in der Python-Standardbibliothek enthalten ist.
Das Python Packaging-Benutzerhandbuch [ 1 ] empfiehlt jetzt:
Verwenden Sie
setuptools
diese Option , um Projekte zu definieren und Quellverteilungen zu erstellen.
Und erklärt:
Obwohl Sie pure
distutils
fü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
)setuptools
aktualisiert, 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 distutils
und diejenigen, die dies unterstützen, setuptools
mischen sich häufig setuptools
mit distutils
z. 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 setuptools
und distutils
. Dies umfasst häufig verschiedene Methoden zur fehleranfälligen Abhängigkeitsprüfung, da distutils
Abhä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 setuptools
nicht in der Standardbibliothek enthalten ist, der einzige Grund? Was sind die Vorteile distutils
und gibt es irgendwelche Nachteile zu schreiben setup.py Dateien , die nur Unterstützung setuptools
.
setuptools
ist eine erweiterte Alternative zu " distutils
Beachten Sie jedoch, dass" das empfohlene Pip- Installationsprogramm alle setup.py-Skripte mit ausführt setuptools
, auch wenn das Skript selbst nur importiertdistutils
"( Quelle )
distutils
wurde wieder zusammengeführt insetuptools
, aber es gibt Legacy-Apps, die für die Verwendung geschrieben wurden,distutils
und es fallen Kosten für die Migration auf korrekte Standards an.