Elige el paquete que necesita la herramienta de entradas

PythonBeginner
Practicar Ahora

Introducción

BenchTicket transforma pedidos de eventos en una lista de precios para la taquilla. La instalación busca en dos fuentes y un paquete de nombre idéntico cambia los precios aunque la instalación termine correctamente.

Compararás la salida normal, identificarás las dependencias instaladas y guardarás una receta para reconstruir la herramienta aprobada. Los nombres y las fuentes son sintéticos y permanecen dentro del laboratorio. Necesitas conocimientos básicos de terminal y archivos de texto; no necesitas programar en Python.

Lee el ejemplo de trabajo de la taquilla

Primero entenderás la lista antes de cambiar sus dependencias. Empieza en Terminal. cd cambia de directorio; la ruta absoluta funciona desde cualquier ubicación:

cd /home/labex/project/ticket-build

orders.csv es una pequeña tabla separada por comas: cada pedido tiene un ID, cantidades de adultos y niños y un valor de membresía. cat la muestra:

cat orders.csv

Los adultos cuestan 1200 céntimos y los niños 600. Los pedidos de al menos dos adultos y dos niños reciben un descuento de 400; los miembros reciben otros 200, con mínimo cero. Un céntimo es una centésima de la unidad monetaria.

El demo preparado ejecuta una instalación de ejemplo aprobada e independiente; no completa tu entorno del proyecto:

/opt/labex-lookalike/demo

Para T101 espera 3200,32.00; para T103, 1600,16.00; T104 sigue en cero. Estas relaciones importan más que la etiqueta de versión de un paquete. Conserva los pedidos y la aplicación originales.

Observa una instalación correcta con precios incorrectos

Distinguirás el éxito de instalación de la corrección del negocio. Sigue en Terminal, en ticket-build.

Un entorno virtual guarda paquetes Python específicos del proyecto. python3 es el intérprete y -m ejecuta un módulo. El módulo venv crea un entorno; --without-pip omite otra copia de pip porque el pip preparado administra otros entornos con --python:

python3 -m venv --without-pip .venv

Lee la receta preparada:

cat install.sh

bash ejecuta este script. "$1" es su primer argumento, la ruta del entorno. Las comillas mantienen unida la ruta. set -e detiene el script si falla la instalación. --isolated ignora la configuración de usuario y las variables de entorno de pip; --no-cache-dir evita descargas almacenadas en caché. --index-url y --extra-index-url indican dos índices, y -r lee los requisitos.

bash install.sh .venv

Ejecuta ahora el programa original con el intérprete de ese entorno:

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

T101 cuesta incorrectamente 3600,36.00 y T103 1800,18.00. El sustituto controlado solo cambia los cálculos; no roba datos. Una salida de instalación satisfactoria no demostró precios correctos.

Identifica lo que seleccionó el resolvedor

Relacionarás el comportamiento incorrecto con los paquetes realmente instalados. Un índice enumera distribuciones disponibles; un wheel es un archivo de paquete Python instalable.

python3 -m pip ejecuta pip como módulo. Su comando show lee los metadatos instalados en el entorno elegido con --python:

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

Espera prices 9.0.0, que requiere benchticket-labels, y labels 1.0.0. Labels es una dependencia indirecta: al instalar prices, pip también la instaló. Los guiones de estos nombres de distribución corresponden a guiones bajos en los nombres de importación.

Lee el catálogo de aprobación suministrado de forma independiente:

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

Las versiones aprobadas son prices 1.4.0 y labels 1.0.0. Usarás la columna SHA-256 en el siguiente laboratorio.

Pip busca en ambos índices; --extra-index-url no es un respaldo de menor prioridad. Aquí gana la versión compatible más alta. La ruta local public es una segunda fuente sintética, no el PyPI real. Ahora limitarás la receta al conjunto revisado.

Guarda y aplica la receta aprobada

Guardarás las versiones aprobadas y usarás el índice aprobado. == exige una versión exacta.

El siguiente here-document escribe un archivo completo. > reemplaza ese archivo; <<'EOF' toma literalmente las líneas siguientes hasta una que contenga solo EOF. Úsalo únicamente para los dos archivos de receta editables:

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

Reemplaza la receta conservando el argumento del entorno y la detención ante fallos. El índice aprobado contiene ambos paquetes:

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 reemplaza prices 9.0.0 por 1.4.0. Consulta de nuevo las versiones:

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

Ambas deben coincidir con el catálogo. Si escribiste mal una ruta, vuelve con cd /home/labex/project/ticket-build, inspecciona ambos archivos con cat y repite la instalación; no necesitas reiniciar la VM.

Entrega correctamente todos los pedidos

Generarás la lista real de la taquilla. El programa preparado lee el CSV, llama a funciones de paquetes instalados y da formato a cada importe. Su opción --output guarda el resultado:

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

Los totales T101–T105 deben ser 3200, 1200, 1600, 0 y 4200 céntimos. Los ID, cantidades y membresías deben seguir asociados al pedido correcto.

diff -u compara dos archivos de texto y muestra las líneas cambiadas. Compara con el ejemplo independiente:

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

Sin salida, los archivos coinciden. $? contiene el estado de salida del comando inmediatamente anterior; léelo antes de que otro comando lo cambie:

echo $?

Espera 0. Una diferencia devuelve 1; esto es distinto de un archivo ausente o un error de importación de Python. Repara la receta, reinstala y vuelve a ejecutar el programa. No edites pedidos ni escribas la lista a mano.

Reconstruye sin tomar prestado el primer entorno

Confirmarás que la receta funciona independientemente de la instalación actual. El segundo entorno empieza sin paquetes de entradas:

python3 -m venv --without-pip .rebuild

Pasa este otro destino a la misma receta:

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

Espera los mismos cinco pedidos correctos. Se conservan el .venv original, handover.csv, los pedidos y el programa.

Esto demuestra una receta funcional para la fuente aprobada suministrada. Las versiones exactas no fijan los bytes: otra fuente podría ofrecer un wheel distinto con igual nombre y versión. El siguiente laboratorio independiente introduce hashes para ese límite.

Aquí se usan servidores de paquetes sintéticos y controlados, no un índice privado de producción. Cerrar todas las fuentes o copiar un CSV conocido impediría la reconstrucción útil que acabas de demostrar.

Resumen

Comparaste precios reales, identificaste dependencias directas e indirectas y reconstruiste el conjunto aprobado desde una receta guardada. También entregaste la lista completa sin cambiar los datos ni la aplicación originales. Seleccionar paquetes e instalarlos correctamente son cuestiones distintas de la corrección del negocio.