setuptools vs. distutils: Warum sind Distutils noch etwas?
Python hat eine verwirrende Geschichte von tools, die verwendet werden können, zu Verpacken und zu beschreiben Projekte: dazu gehören distutils
in der Standard-Bibliothek, distribute
distutils2
und setuptools
(und vielleicht mehr). Es scheint, dass distribute
und distutils2
eingestellt wurden, zu Gunsten der setuptools
Blätter, die zwei konkurrierende standards.
Meinem Verständnis setuptools
bietet weit mehr Optionen (z.B. die Deklaration von Abhängigkeiten, tests, etc.) als distutils
aber es ist nicht in der Python-standard-Bibliothek (noch?) nicht.
Den Python Verpackung Bedienungsanleitung[Eins] empfiehlt nun:
Verwenden
setuptools
Projekte definieren und erstellen von Source-Distributionen.
Und erklärt:
Zwar können Sie rein
distutils
für viele Projekte, es unterstützt nicht die Definition von Abhängigkeiten zu anderen Projekten und fehlt mehrere convenience utilities für das automatische Auffüllen Paket-Metadaten korrekt sindsetuptools
. Außerhalb der standard-Bibliothek, setuptools bietet auch eine weitere konsistente feature-set über verschiedene Versionen von Python, und (im Gegensatz zudistutils
),setuptools
wird aktualisiert werden, zu produzieren, die die bevorstehende "Metadaten 2.0" - standard-Formate, die auf allen unterstützten Versionen.Sogar für Projekte, die Sie tun wählen, um
distutils
wenn pip installiert solche Projekte direkt von der Quelle (eher als die Installation von einer bereits bestehenden Rad-Datei), es wird tatsächlich bauen Sie Ihr Projekt mitsetuptools
statt.
Jedoch, den Blick in verschiedene Projekt setup.py Dateien zeigt, dass diese nicht scheinen, um eine tatsächliche standard. Viele Pakete verwenden immer noch distutils
und diejenigen, die Unterstützung setuptools
oft mischen setuptools
mit distutils
z.B. durch eine fallback-import:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
Gefolgt von einem Versuch, einen Weg zu finden, um zu schreiben ein setup installiert werden kann sowohl setuptools
und distutils
. Dies beinhaltet oft verschiedene Möglichkeiten der fehleranfälligen Abhängigkeiten zu prüfen, da distutils
unterstützt keine Abhängigkeiten in der setup-Funktion.
Warum sind die Menschen immer noch machen den zusätzlichen Aufwand zu unterstützen distutils
- ist die Tatsache, dass setuptools
ist nicht in der standard-Bibliothek, die der einzige Grund? Was sind die Vorteile distutils
und gibt es irgendwelche Nachteile zu schreiben setup.py Dateien, die nur unterstützen setuptools
.
InformationsquelleAutor der Frage cel | 2014-08-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie einen Blick auf diese. Es erklärt alle Verpackungs-Methoden sehr gut, und könnte helfen, die Antwort auf Ihre Frage zum Teil: Webseite
So, wie Sie sehen können setuptools sollte bevorzugt zu distutils, und ich sehe, wo deine Frage kommt, aber ich sehe nicht, distutils zu verlieren-Unterstützung in absehbarer Zeit, da, einfach ausgedrückt, ist es in vielen Fällen (insbesondere legacy-Programme) der defacto-standard. Und wie Sie wahrscheinlich wissen, ändern diese Art von Dingen in legacy-Programme können ziemlich Schmerzen und kommen mit ganz wenigen Probleme, z.B. Unverträglichkeiten, die würde dann dazu führen, dass die Entwickler mit umschreiben der source-code. So ist dass, und auch die Tatsache, dass distutils ist ein Teil der standard-python-Bibliothek, in der Erwägung, dass setuptools nicht. Also, wenn Sie erstellen ein python-Programm, in diesem Tag und Alter, verwenden Sie setuptools, aber beachten Sie, dass ohne distutils, setuptools würde nie existiert haben.
InformationsquelleAutor der Antwort
Das ist ein Grund. Das folgende ist direkt von der NumPy
setup.py
:Also NumPy bevorzugt
setuptools
wenn Sie es finden können. Aber dann SciPy verwendet, um dies zu tun, bis es gepatcht zu bevorzugendistutils
in einigen Situationen. Unter Berufung auf das commit-log:Natürlich ein Fusion zwischen
setuptools
unddistribute
beheben sollten, all dies rechtzeitig, aber viele Pakete noch unterstützt werden müssen Python 2.6 Anlagen.InformationsquelleAutor der Antwort Fred Foo
Es gibt mehrere Gründe, warum wir immer noch darüber reden, und verwenden Sie distutils, obwohl setuptools ist ohne Zweifel das bessere Werkzeug-set.
Erstens, distutils ist überall verfügbar. Wenn Sie schauen, um zu bauen ein Modul für den Austausch mit anderen und haben keine komplizierten Anforderungen, es garantiert verfügbar sein, auf Ihre Arbeit Maschine. Dies ist besonders wichtig, wenn Sie die Unterstützung für ältere Versionen von python, oder wenn Sie finden, sich selbst das arbeiten in einer fremden Umgebung.
Zweitens, setuptools bietet Erweiterungen, um distutils. Es ist daher nach dem Vorbild von distutils-Werkzeug-set und nimmt all seine Struktur aus. Die Dokumentation für setuptools meint der Leser vertraut ist mit distutils und nur dokumentiert, wie es erhöht die Basis-Werkzeug-set. Sie können daran denken, dass distutils definiert den Dialekt und setuptools verbessert, dass Dialekt.
Mein persönlicher Ansatz für neue Projekte beginnen mit der Annahme, ich werde distutils. Nur wie das Projekt wächst, erfordern eine Funktion von setuptools Mach ich das upgrade. Die setuptools ist ein drop-in-Ersatz für distutils, es ist eine änderung eine Zeile zu meinem setup.py.
InformationsquelleAutor der Antwort user590028
Im Grunde ist es aufgrund der Aufteilung der Verantwortlichkeiten.
setuptools
ist nicht Teil der Python standard-Bibliothek, denn Sie wird verwaltet von einem 3rd-party statt Python-core-team. Das bedeutet unter anderem:Effektiv, das core-team hat, verengt den Anwendungsbereich von distutilsindem Sie das "core-Standard" und "minimal erforderlichen compilation" Teile für sich während das verlassen all die Sachen, die darüber hinaus (extended compiler/Paket format/whatever-Unterstützung) zu 3rd parties. Der code, der zuvor für die "erweiterten Ersatzteile" übrig war abgestanden für rückwärts Kompatibilität.
Vom Die Verteilung von Python-Modulen — Python 2.7.12 Dokumentation:
Pakete für andere Betriebssysteme sind ebenfalls wahrscheinlich, dass
setuptools
undpip
GESONDERT - aus den vorgenannten GründenInformationsquelleAutor der Antwort ivan_pozdeev