Wähle das benötigte Paket für das Ticketwerkzeug

PythonBeginner
Jetzt üben

Einführung

BenchTicket erzeugt aus Veranstaltungsbestellungen eine Preisliste für den Schalter. Die Installation durchsucht zwei Quellen. Ein gleichnamiges Ersatzpaket verändert die Preise, obwohl die Installation erfolgreich ist.

Du vergleichst die normale Ausgabe, erkennst installierte Abhängigkeiten und speicherst ein Installationsrezept zum Wiederaufbau des freigegebenen Werkzeugs. Paketnamen und Quellen sind synthetisch und bleiben im Lab. Grundkenntnisse zu Terminal und Textdateien reichen aus; Python-Programmierung ist nicht erforderlich.

Lies das funktionierende Beispiel des Ticketschalters

Verstehe zuerst die Preise, bevor du Abhängigkeiten änderst. Beginne in Terminal. cd wechselt das Verzeichnis; der absolute Pfad funktioniert von jedem Standort aus:

cd /home/labex/project/ticket-build

orders.csv ist eine kleine kommagetrennte Tabelle: Jede Bestellung enthält ID, Erwachsenen- und Kinderzahlen sowie eine Mitgliedschaftsangabe. cat zeigt sie an:

cat orders.csv

Erwachsene kosten 1200 Cent, Kinder 600. Bei mindestens zwei Erwachsenen und zwei Kindern gibt es 400 Cent Rabatt; Mitglieder erhalten weitere 200, mindestens bleibt null. Ein Cent ist ein Hundertstel der Währungseinheit.

Die vorbereitete demo führt eine getrennte freigegebene Beispielinstallation aus; sie vervollständigt nicht dein Projekt:

/opt/labex-lookalike/demo

Erwarte für T101 3200,32.00, für T103 1600,16.00; T104 bleibt null. Diese Beziehungen sind wichtiger als das Versionsetikett. Bewahre Originalbestellungen und Anwendung unverändert.

Beobachte eine erfolgreiche Installation mit falschen Preisen

Unterscheide Installationserfolg von fachlicher Korrektheit. Bleibe in Terminal in ticket-build.

Eine virtuelle Umgebung enthält projektspezifische Python-Pakete. python3 ist der Interpreter, -m startet ein Modul. Das Modul venv erstellt eine Umgebung; --without-pip lässt eine zweite pip-Kopie weg, da das vorbereitete pip über --python andere Umgebungen verwaltet:

python3 -m venv --without-pip .venv

Lies das vorbereitete Rezept:

cat install.sh

bash führt dieses Skript aus. "$1" ist das erste Argument, der Umgebungspfad. Anführungszeichen halten den Pfad zusammen. set -e beendet das Skript bei einem Installationsfehler. --isolated ignoriert pip-Benutzereinstellungen und Umgebungsvariablen; --no-cache-dir vermeidet zwischengespeicherte Downloads. --index-url und --extra-index-url nennen zwei Paketindizes; -r liest Anforderungen.

bash install.sh .venv

Starte das Originalprogramm mit dem Interpreter dieser Umgebung:

.venv/bin/python quote.py orders.csv

T101 kostet fälschlich 3600,36.00, T103 1800,18.00. Der kontrollierte Ersatz ändert nur Berechnungen und stiehlt keine Daten. Eine erfolgreiche Installation belegt keine korrekten Preise.

Erkenne die Auswahl des Resolvers

Ordne das falsche Verhalten den tatsächlich installierten Paketen zu. Ein Paketindex listet verfügbare Distributionen; ein Wheel ist ein installierbares Python-Paketarchiv.

python3 -m pip startet pip als Modul. show liest installierte Metadaten aus der mit --python gewählten Umgebung:

python3 -m pip --isolated --python .venv show benchticket-prices benchticket-labels

Erwarte prices 9.0.0 mit der Abhängigkeit benchticket-labels und labels 1.0.0. Labels ist indirekt: Bei der Installation von prices wurde es ebenfalls installiert. Bindestriche in diesen Distributionsnamen entsprechen Unterstrichen in den Importnamen.

Lies den unabhängig bereitgestellten Freigabekatalog:

cat /opt/labex-lookalike/approval/packages.tsv

Freigegeben sind prices 1.4.0 und labels 1.0.0. Die SHA-256-Spalte brauchst du im nächsten Lab.

Pip durchsucht beide konfigurierten Indizes; --extra-index-url ist kein nachrangiger Ersatz. Hier gewinnt die höhere passende Version. Der lokale Pfad public ist eine synthetische zweite Quelle und nicht das echte PyPI. Begrenze das Rezept nun auf die geprüften Pakete.

Speichere und verwende das freigegebene Rezept

Speichere die freigegebenen Versionen und verwende den freigegebenen Index. == verlangt eine exakte Version.

Das folgende Here-Dokument schreibt eine ganze Datei. > ersetzt die benannte Datei; <<'EOF' übernimmt die folgenden Zeilen wörtlich bis zu einer Zeile, die nur EOF enthält. Verwende das nur für die zwei bearbeitbaren Rezeptdateien:

cat > requirements.txt <<'EOF'
benchticket-prices==1.4.0
benchticket-labels==1.0.0
EOF

Ersetze das Rezept, behalte das Umgebungsargument und den Abbruch bei Fehlern. Der freigegebene Index enthält beide Pakete:

cat > install.sh <<'EOF'
#!/bin/bash
set -e
python3 -m pip --isolated --python "$1" install --no-cache-dir --index-url http://127.0.0.1:8123/approved/simple -r requirements.txt
EOF
bash install.sh .venv

Pip ersetzt prices 9.0.0 durch 1.4.0. Lies die installierten Versionen erneut:

python3 -m pip --isolated --python .venv show benchticket-prices benchticket-labels

Beide sollen zum Katalog passen. Bei einem vertippten Pfad kehre mit cd /home/labex/project/ticket-build zurück, prüfe beide Dateien mit cat und wiederhole die Installation. Ein VM-Reset ist unnötig.

Übergib jede Bestellung mit korrektem Preis

Erzeuge die echte Schalterpreisliste. Das vorbereitete Programm liest die CSV, ruft Funktionen installierter Pakete auf und formatiert jeden Betrag. --output speichert das Ergebnis:

.venv/bin/python quote.py orders.csv --output handover.csv
cat handover.csv

Die Summen für T101 bis T105 müssen 3200, 1200, 1600, 0 und 4200 Cent sein. IDs, Mengen und Mitgliedschaft müssen bei der richtigen Bestellung bleiben.

diff -u vergleicht zwei Textdateien und zeigt geänderte Zeilen. Vergleiche mit dem unabhängig bereitgestellten Beispiel:

diff -u /opt/labex-lookalike/approval/reference.csv handover.csv

Keine Ausgabe bedeutet Übereinstimmung. $? enthält den Exitstatus des unmittelbar vorherigen Befehls. Lies ihn, bevor ein anderer Befehl ihn ändert:

echo $?

Erwarte 0. Unterschiede liefern 1; das ist etwas anderes als eine fehlende Datei oder ein Python-Importfehler. Repariere das Rezept, installiere erneut und starte das Programm wieder. Ändere weder Bestellungen noch Preise von Hand.

Baue ohne die erste Umgebung neu auf

Prüfe, ob das gespeicherte Rezept unabhängig von der aktuellen Installation funktioniert. Eine zweite virtuelle Umgebung beginnt ohne Ticketpakete:

python3 -m venv --without-pip .rebuild

Übergib dieses andere Ziel an dasselbe Rezept:

bash install.sh .rebuild
.rebuild/bin/python quote.py orders.csv

Erwarte dieselben fünf korrekten Bestellungen. Die ursprüngliche .venv, handover.csv, Bestellungen und Programm bleiben erhalten.

Damit funktioniert das Rezept für die bereitgestellte freigegebene Quelle. Exakte Versionen legen keine exakten Bytes fest: Eine andere Quelle kann ein anderes Wheel unter gleichem Namen und gleicher Version anbieten. Das nächste unabhängige Lab führt dafür Hashes ein.

Dieses Lab verwendet synthetische kontrollierte Paketserver, keinen privaten Produktionsindex. Alle Quellen zu schließen oder eine bekannte CSV zu kopieren würde den gerade gezeigten nützlichen Neuaufbau verhindern.

Zusammenfassung

Du hast echte Ticketpreise verglichen, direkte und indirekte Abhängigkeiten erkannt und das freigegebene Paketset mit einem gespeicherten Rezept neu aufgebaut. Außerdem hast du eine vollständige Preisliste ohne Änderungen an Originaldaten oder Anwendung geliefert. Paketauswahl und erfolgreiche Installation sind von fachlicher Korrektheit getrennt zu beurteilen.