webentwicklung-frage-antwort-db.com.de

Unterschied zwischen extras_require () und install_requires () in setup.py?

Ich versuche den Unterschied zwischen extras_require() und install_requires() in setup.py zu verstehen, konnte ihn aber nicht verstehen. Beide werden für die Installation von Python Abhängigkeiten verwendet, aber was ist der Unterschied zwischen ihnen?

26
Harish R

Nach der setuptools Dokumentation ,

extras_require
Ein Wörterbuch, das Namen von "Extras" (optionale Funktionen Ihres Projekts) zu Zeichenfolgen oder Listen von Zeichenfolgen zuordnet und angibt, welche anderen Distributionen installiert werden müssen, um diese Funktionen zu unterstützen.

und

install_requires
Ein String oder eine Liste von Strings, die angeben, welche anderen Distributionen installiert werden müssen, wenn dies eine ist.

Der Abschnitt zu Deklarieren von „Extras“ (optionale Funktionen mit eigenen Abhängigkeiten) führt Folgendes aus:

Manchmal hat ein Projekt „empfohlene“ Abhängigkeiten, die nicht für alle Verwendungszwecke des Projekts erforderlich sind. Beispielsweise kann ein Projekt eine optionale Ausgabe PDF wenn ReportLab installiert ist, und eine Unterstützung für reStructuredText, wenn Docutils installiert ist. Diese optionalen Funktionen werden als "Extras" bezeichnet und mit setuptools können Sie ihre Anforderungen definieren als Auf diese Weise können andere Projekte, die diese optionalen Funktionen erfordern, die Installation der zusätzlichen Anforderungen erzwingen, indem die gewünschten Extras in ihrem install_requires.

Der größte Unterschied ist, dass die Anforderungen in extras_require werden nur bei Bedarf installiert:

Diese Anforderungen werden nur dann automatisch installiert, wenn ein anderes Paket (direkt oder indirekt) von ihnen abhängt, indem die gewünschten „Extras“ in eckige Klammern nach dem zugehörigen Projektnamen gesetzt werden. (Oder wenn die Extras in einer Anforderungsspezifikation in der EasyInstall-Befehlszeile aufgeführt sind.)

Um es zusammenzufassen:

  • Wenn die Abhängigkeit erforderlich ist , um Ihr Projekt auszuführen, setzen Sie sie in install_requires. Sie werden immer installiert.
  • Wenn Ihr Projekt optionale Funktionen hat, die Abhängigkeiten hinzufügen, setzen Sie diese Abhängigkeiten in extras_require. Diese Abhängigkeiten werden nicht installiert, es sei denn, diese Funktion wird vom Benutzer oder einem anderen Paket aufgerufen.
25
user812786

Ich bin mir der offiziellen Verwendung nicht sicher, benutze aber extras_require(), um bedingte Abhängigkeiten anzugeben.

In meinem Fall -

extras_require={":python_version<'3.5'": ["scandir"]}

Theoretisch sollte dies über install_requires() selbst verfügbar sein, aber es funktioniert nur so, wie es sollte ab Version X.XX (mehrere Behauptungen, welche Version damit anfängt, es richtig zu machen) von setuptools.

Dieser Artikel erklärt es schön: Bedingte Python Abhängigkeiten

6
Jay