PIP-Einschränkungsdateien

9

Ich habe die Dokumentation gelesen und konnte mich nicht darum kümmern:

  

Constraints-Dateien sind Anforderungsdateien, die nur steuern, welche   Version einer Anforderung ist installiert, nicht ob es installiert ist oder   nicht. Ihre Syntax und Inhalte sind nahezu identisch mit Anforderungen   Dateien.

     

Es gibt einen wichtigen Unterschied: Ein Paket in eine Constraint-Datei aufnehmen   löst keine Installation des Pakets aus.

  • Also heißt das, dass ich erst die Anforderungsdateien brauche und dann die Einschränkung ausführen soll?
  • Benötigen Sie sowohl die Anforderungen.txt als auch die Bedingungen.txt?
  • Oder nur -c requirements.txt ?

Könnte jemand bitte einfach erklären, was die neue PIP-Funktion ist: Constraints Files ?

    
James Lin 07.01.2016, 01:19
quelle

2 Antworten

9

Ich denke, eine Constraint-Datei ist eine gute Möglichkeit, Ihre "wahren" Anforderungen von Ihrer vollständigen Installationsliste zu trennen.

Es ist gute Praxis , Paketversionen in Ihrer Anforderungsdatei vollständig anzugeben. Wenn Sie zum Beispiel django-allauth mit Django LTS installieren, stecken Sie es in die neuesten Versionen (ab meine Antwort):

%Vor%

Wenn Sie das Paket installieren, werden auch einige erforderliche Pakete installiert. Sie fügen also auch diese hinzu, so dass jeder die gleichen Versionen von Paketen erhält:

%Vor%

Und dann bekommst du den Fehlerbericht "Funktioniert nicht unter Python 3". Hoppla, python-openid ist nur Python 2, und stattdessen wird python3-openid verwendet, was außerdem defusedxml erfordert:

%Vor%

Jetzt wird "anforderungen.txt" hässlich, und es ist schwierig, die "Anforderungen" von Django und django-allauth in der Unordnung zu sehen.

Hier ist ein requirements.txt , das sich auf eine Constraint-Datei bezieht:

%Vor%

Und constraints.txt mit einem hilfreichen Kommentar:

%Vor%

Es werden keine Python-Klassifizierer benötigt, da Constraints nur installiert werden, wenn ein Paket sie benötigt, und ansonsten ignoriert werden. Wenn ein Paket zwei Jahre später kein weiteres Paket mehr benötigt, wird die Installation durch die Neuinstallation beendet.

Ich denke, dass dies, zusammen mit einigen Kommentaren, eine nützliche Methode ist, um zu kommunizieren, welche Pakete Sie für das Projekt verwenden und welche enthalten sind, weil sie Abhängigkeiten sind.

Ich denke, es wird noch nützlicher, wenn Sie den Hash von pip 8.x verwenden -Kontrollmodus , der die Angabe von Versionen für Abhängigkeitsabhängigkeiten erfordert. Wenn Sie diesen Pfad verwenden, empfehle ich hashin , um Ihnen beim Verwalten der Hashes zu helfen. Unter browsercompat finden Sie ein kompliziertes Anforderungssetup unter Verwendung von Einschränkungen und Hashes.

    
jwhitlock 25.04.2016, 18:19
quelle
1

Ich habe selbst keine Constrains-Dateien verwendet, daher kann ich mich irren, aber hier ist, wie ich es aus der Dokumentation verstehe.

Nehmen wir an, Sie haben mehrere Projekte, die Sie mit pip installieren. Einige von ihnen hängen direkt von einem populären Paket foobar ab, andere indirekt (über ihre Abhängigkeiten), einige davon hängen überhaupt nicht davon ab.

Eines Tages beschließen Sie, den foobar -Code ein wenig zu ändern, um ein Problem in Bezug auf Ihre Umgebung zu lösen, also erstellen Sie eine lokale Kopie von foobar . Jetzt möchten Sie sicherstellen, dass all Ihre Projekte diese lokale Kopie verwenden, aber Sie möchten nicht Zeit darauf verwenden, herauszufinden, welche davon von foobar abhängen und dann ihre requirements.txt - oder setup.py -Dateien bearbeiten .

Hier kommt die Constraints-Datei, in der Sie auf Ihre lokale Kopie von foobar hinweisen und sie für all Ihre Projekte verwenden, ohne sich darum zu kümmern, welche von ihnen foobar benötigen Datei gilt nur, wenn das installierte Projekt tatsächlich von foobar abhängt (ob direkt oder indirekt).

Es gibt ein noch besseres Beispiel für eine mögliche Verwendung auf reddit .

    
Audrius Kažukauskas 07.01.2016 10:47
quelle

Tags und Links