0%

Isolierte Umgebungen und Pakete · Übung

Festhalten, was das Projekt braucht

Die Umgebung funktioniert jetzt, aber das Projekt hat noch nicht festgehalten, warum. Wenn .venv verschwindet, verschwindet ihre Paketliste mit ihr.

Ein Paket, das dein Projekt zum Ausführen braucht, heißt Abhängigkeit: Dein Code hängt davon ab, dass es vorhanden ist. Bisher hat dein Projekt genau eine solche Abhängigkeit, requests, in genau der Version, die dieses Kapitel verwendet. Schreibe diese Festlegung in eine einfache Textdatei:

nano requirements.txt
cat requirements.txt

Gib in nano requests==2.34.2 ein, speichere mit Ctrl + O und beende mit Ctrl + X. cat gibt anschließend die gespeicherte Datei aus.

Du solltest eine Zeile sehen:

requests==2.34.2

Der Dateiname requirements.txt ist eine Konvention, die pip und Menschen verstehen, die mit Python-Projekten arbeiten. Jede Zeile, die kein Kommentar ist, enthält eine Anforderung. Diese legt sowohl das Paket als auch die genaue Version fest.

Direkt ist etwas anderes als unterstützend

Als pip requests installierte, installierte es auch Pakete wie certifi, charset-normalizer, idna und urllib3. Das sind transitive Abhängigkeiten: Pakete, die deine direkte Abhängigkeit für ihre eigene Aufgabe braucht.

Kopiere für diese Übung nicht das gesamte installierte Regal. Das Projekt hat eine Wahl getroffen: requests==2.34.2. pip kann die eigenen Metadaten dieses Pakets lesen und die geprüften unterstützenden Versionen aus dem konfigurierten Index auswählen. Nur die direkte Abhängigkeit in der kleinen Datei festzuhalten macht die Absicht des Projekts sichtbar.

Es gibt Projekte, die für die Bereitstellung jedes transitive Artefakt festschreiben. Der Paketspiegel von Python Land tut genau das, um Reproduzierbarkeit und eine Prüfung der Lieferkette zu ermöglichen. Diese Festschreibung auf Plattformebene löst ein anderes Problem als die Anforderungsdatei dieses kleinen Einsteigerprojekts.

Warum diese Datei erhalten bleibt und .venv nicht

requirements.txt ist ein kleiner, portabler Text, den du geschrieben hast. Er gehört zum Projekt und wird mit dem Kapitel gespeichert. .venv ist eine große, computerspezifische Ausgabe von Werkzeugen. Deshalb schließt Python Land sie bewusst vom gespeicherten Sitzungsstand und von Downloads aus.

Die Regel ist einfach: Behalte die Bauanleitung und erstelle das Ergebnis neu.

Jetzt bist du dran

Öffne requirements.txt mit nano und füge genau diese direkte Anforderung hinzu:

requests==2.34.2

Kommentare und Leerzeilen sind erlaubt. Füge weder unterstützende Pakete von requests noch pytest oder uv hinzu. Die Website stellt sie bereit, aber dieses Projekt hat sie nicht als Laufzeitabhängigkeiten gewählt.

Führe cat requirements.txt aus, um die dauerhafte Datei zu prüfen, und drücke dann Check my work. Die Prüfung liest die entstandene Datei. Sie kann nicht belegen und belegt auch nicht, welchen Shell-Befehl du verwendet hast.

Warum listet requirements.txt nur requests auf und nicht certifi, idna und urllib3?