Choisir le paquet nécessaire à la billetterie

PythonBeginner
Pratiquer maintenant

Introduction

BenchTicket transforme les commandes d’événements en tarifs utilisables au guichet. L’installation recherche actuellement deux sources ; un paquet homonyme change les prix malgré une installation réussie.

Vous comparerez le résultat normal, identifierez les dépendances installées et enregistrerez une recette pour reconstruire l’outil approuvé. Noms et sources sont synthétiques et restent dans ce laboratoire. Des bases de terminal et de fichiers texte suffisent ; aucune programmation Python n’est nécessaire.

Lire l’exemple fonctionnel du guichet

Comprenez d’abord les tarifs avant de modifier les dépendances. Commencez dans Terminal. cd change de répertoire ; le chemin absolu fonctionne depuis n’importe quel emplacement :

cd /home/labex/project/ticket-build

orders.csv est une petite table séparée par des virgules : chaque commande comporte un ID, les quantités d’adultes et d’enfants et une valeur d’adhésion. cat l’affiche :

cat orders.csv

Les adultes coûtent 1200 centimes et les enfants 600. Au moins deux adultes et deux enfants donnent 400 centimes de réduction ; les adhérents ont 200 de réduction supplémentaire, avec un minimum nul. Un centime est un centième de l’unité monétaire.

Le demo préparé utilise une installation d’exemple approuvée distincte ; il ne complète pas votre environnement :

/opt/labex-lookalike/demo

Attendez 3200,32.00 pour T101, 1600,16.00 pour T103 ; T104 reste nul. Ces relations comptent plus qu’une étiquette de version. Conservez les commandes et l’application originales.

Observer une installation réussie aux tarifs incorrects

Distinguez réussite de l’installation et justesse métier. Restez dans Terminal, dans ticket-build.

Un environnement virtuel contient les paquets Python propres au projet. python3 est l’interpréteur et -m exécute un module. Le module venv crée l’environnement ; --without-pip évite une deuxième copie de pip, car le pip fourni gère un autre environnement avec --python :

python3 -m venv --without-pip .venv

Lisez la recette fournie :

cat install.sh

bash exécute ce script. "$1" désigne son premier argument, le chemin de l’environnement. Les guillemets préservent ce chemin. set -e arrête le script si l’installation échoue. --isolated ignore la configuration utilisateur et les variables d’environnement de pip ; --no-cache-dir évite les téléchargements en cache. --index-url et --extra-index-url désignent deux index ; -r lit les exigences.

bash install.sh .venv

Exécutez ensuite le programme d’origine avec l’interpréteur de cet environnement :

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

T101 coûte à tort 3600,36.00 et T103 1800,18.00. Le substitut contrôlé ne change que le calcul ; il ne vole aucune donnée. Une installation terminée avec succès ne garantit pas des tarifs corrects.

Identifier la sélection du résolveur

Reliez le comportement incorrect aux paquets réellement installés. Un index liste les distributions disponibles ; un wheel est une archive de paquet Python installable.

python3 -m pip lance pip comme module. La commande show lit les métadonnées de l’environnement choisi par --python :

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

Attendez prices 9.0.0, qui exige benchticket-labels, et labels 1.0.0. Labels est indirect : l’installation de prices a aussi entraîné son installation. Les traits d’union des noms de distribution correspondent ici aux traits de soulignement des noms d’importation.

Lisez le catalogue d’approbation fourni indépendamment :

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

Les versions approuvées sont prices 1.4.0 et labels 1.0.0. La colonne SHA-256 servira au laboratoire suivant.

Pip cherche dans les deux index configurés ; --extra-index-url n’est pas un secours de priorité inférieure. La version compatible supérieure gagne ici. Le chemin local public est une deuxième source synthétique, pas le véritable PyPI. Limitez maintenant la recette aux paquets examinés.

Enregistrer et appliquer la recette approuvée

Enregistrez les versions approuvées et utilisez leur index. == exige une version exacte.

Le here-document suivant écrit un fichier entier. > remplace le fichier nommé ; <<'EOF' lit littéralement les lignes suivantes jusqu’à une ligne contenant seulement EOF. Utilisez-le uniquement pour les deux fichiers de recette modifiables :

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

Remplacez la recette en conservant l’argument d’environnement et l’arrêt sur échec. L’index approuvé contient les deux paquets :

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 remplace prices 9.0.0 par 1.4.0. Relisez les versions installées :

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

Les deux doivent correspondre au catalogue. Si un chemin est mal saisi, revenez avec cd /home/labex/project/ticket-build, inspectez les deux fichiers avec cat et recommencez l’installation ; inutile de réinitialiser la VM.

Livrer chaque commande au bon tarif

Produisez la véritable liste du guichet. Le programme fourni lit le CSV, appelle les fonctions des paquets installés et formate chaque montant. Son option --output enregistre le résultat :

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

Les totaux T101 à T105 doivent être 3200, 1200, 1600, 0 et 4200 centimes. ID, quantités et adhésions doivent rester associés à la bonne commande.

diff -u compare deux fichiers texte et affiche les lignes modifiées. Comparez avec l’exemple indépendant :

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

Aucune sortie signifie que les fichiers correspondent. $? contient le code de sortie de la commande immédiatement précédente ; lisez-le avant qu’une autre commande le change :

echo $?

Attendez 0. Une différence renvoie 1 ; ce n’est pas une absence de fichier ni une erreur d’import Python. Réparez la recette, réinstallez puis relancez le programme. Ne modifiez pas les commandes et ne saisissez pas les tarifs à la main.

Reconstruire sans emprunter le premier environnement

Vérifiez que la recette enregistrée fonctionne sans l’installation actuelle. Un deuxième environnement commence sans les paquets de billetterie :

python3 -m venv --without-pip .rebuild

Passez cette autre cible à la même recette :

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

Attendez les mêmes cinq commandes correctes. Le .venv initial, handover.csv, les commandes et le programme restent en place.

Ce résultat établit une recette fonctionnelle pour la source approuvée fournie. Des versions exactes ne fixent pas les octets : une autre source peut proposer un wheel différent sous le même nom et la même version. Le prochain laboratoire indépendant ajoute des empreintes pour cette limite.

Ces serveurs de paquets sont synthétiques et contrôlés, pas un index privé de production. Fermer toutes les sources ou copier un CSV connu empêcherait la reconstruction utile démontrée.

Résumé

Vous avez comparé les prix réels, identifié les dépendances directes et indirectes et reconstruit les paquets approuvés depuis une recette enregistrée. Vous avez aussi livré une liste complète sans changer les données ni l’application originales. La sélection des paquets et la réussite de l’installation sont distinctes de la justesse métier.