Escolha o pacote necessário para a ferramenta de ingressos

PythonBeginner
Pratique Agora

Introdução

BenchTicket transforma pedidos de eventos em uma lista de preços para a bilheteria. A instalação pesquisa duas fontes, e um pacote de nome idêntico muda os preços mesmo quando a instalação termina com sucesso.

Você comparará a saída normal, identificará dependências instaladas e salvará uma receita para reconstruir a ferramenta aprovada. Todos os nomes e fontes são sintéticos e ficam dentro deste laboratório. Você precisa de noções de terminal e arquivos de texto; não precisa programar em Python.

Leia o exemplo funcional da bilheteria

Entenda a lista antes de alterar as dependências. Comece em Terminal. cd muda o diretório; o caminho absoluto funciona de qualquer local atual:

cd /home/labex/project/ticket-build

orders.csv é uma pequena tabela separada por vírgulas: cada pedido tem ID, quantidades de adultos e crianças e um valor de associação. cat a exibe:

cat orders.csv

Adultos custam 1200 centavos e crianças 600. Pedidos com pelo menos dois adultos e duas crianças recebem desconto de 400; associados recebem mais 200, com mínimo zero. Um centavo é um centésimo da unidade monetária.

O demo preparado executa uma instalação de exemplo aprovada e separada; ele não completa seu ambiente de projeto:

/opt/labex-lookalike/demo

Para T101 espere 3200,32.00; para T103, 1600,16.00; T104 continua zero. Essas relações importam mais que o rótulo de versão do pacote. Mantenha pedidos e aplicação originais intactos.

Observe uma instalação bem-sucedida com preços incorretos

Diferencie sucesso de instalação e correção do resultado de negócio. Continue em Terminal, em ticket-build.

Um ambiente virtual guarda pacotes Python específicos do projeto. python3 é o interpretador e -m executa um módulo. O módulo venv cria um ambiente; --without-pip omite uma segunda cópia de pip, pois o pip preparado gerencia outro ambiente com --python:

python3 -m venv --without-pip .venv

Leia a receita preparada:

cat install.sh

bash executa esse script. "$1" é o primeiro argumento: o caminho do ambiente. Aspas mantêm o caminho inteiro. set -e interrompe o script se a instalação falhar. --isolated ignora configurações de usuário e variáveis de ambiente de pip; --no-cache-dir evita downloads em cache. --index-url e --extra-index-url indicam dois índices; -r lê os requisitos.

bash install.sh .venv

Execute o programa original com o interpretador desse ambiente:

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

T101 custa incorretamente 3600,36.00 e T103 1800,18.00. O substituto controlado só muda cálculos, sem roubar dados. O sucesso da instalação não estabeleceu preços corretos.

Identifique o que o resolvedor selecionou

Relacione o comportamento incorreto aos pacotes realmente instalados. Um índice lista distribuições disponíveis; um wheel é um arquivo de pacote Python instalável.

python3 -m pip executa pip como módulo. O comando show lê os metadados instalados no ambiente escolhido por --python:

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

Espere prices 9.0.0, que requer benchticket-labels, e labels 1.0.0. Labels é indireto: instalar prices fez pip também instalá-lo. Hífens nesses nomes de distribuição correspondem a sublinhados nos nomes de importação.

Leia o catálogo de aprovação fornecido independentemente:

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

As versões aprovadas são prices 1.4.0 e labels 1.0.0. A coluna SHA-256 será usada no próximo laboratório.

Pip pesquisa os dois índices; --extra-index-url não é uma reserva de prioridade inferior. Aqui vence a versão compatível mais alta. O caminho local public é uma segunda fonte sintética, não o PyPI real. Agora limite a receita ao conjunto revisado.

Salve e aplique a receita aprovada

Salve as versões aprovadas e use o índice aprovado. == exige uma versão exata.

O here-document seguinte escreve um arquivo inteiro. > substitui o arquivo indicado; <<'EOF' lê literalmente as linhas seguintes até uma linha contendo apenas EOF. Use isso somente nos dois arquivos de receita editáveis:

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

Substitua a receita mantendo o argumento do ambiente e a interrupção em caso de falha. O índice aprovado contém ambos os pacotes:

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 substitui prices 9.0.0 por 1.4.0. Consulte novamente as versões:

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

Ambas devem corresponder ao catálogo. Se digitou um caminho errado, volte com cd /home/labex/project/ticket-build, inspecione os dois arquivos com cat e repita a instalação; não precisa reiniciar a VM.

Entregue cada pedido com o preço correto

Produza a lista real da bilheteria. O programa preparado lê o CSV, chama funções dos pacotes instalados e formata cada valor. A opção --output salva o resultado:

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

Os totais T101–T105 devem ser 3200, 1200, 1600, 0 e 4200 centavos. IDs, quantidades e associação devem continuar vinculados ao pedido correto.

diff -u compara dois arquivos de texto e mostra linhas alteradas. Compare com o exemplo independente:

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

Sem saída, os arquivos coincidem. $? contém o estado de saída do comando imediatamente anterior; leia antes que outro comando o altere:

echo $?

Espere 0. Uma diferença retorna 1; isso é distinto de um arquivo ausente ou erro de importação Python. Corrija a receita, reinstale e execute o programa novamente. Não edite pedidos nem digite uma lista manualmente.

Reconstrua sem aproveitar o primeiro ambiente

Confirme que a receita funciona independentemente da instalação atual. Um segundo ambiente virtual começa sem os pacotes de ingressos:

python3 -m venv --without-pip .rebuild

Passe esse outro destino à mesma receita:

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

Espere os mesmos cinco pedidos corretos. O .venv original, handover.csv salvo, pedidos e programa permanecem.

Isso estabelece uma receita funcional para a fonte aprovada fornecida. Versões exatas não fixam bytes exatos: outra fonte pode oferecer um wheel diferente com o mesmo nome e versão. O próximo laboratório independente introduz hashes para esse limite.

Este laboratório usa servidores sintéticos e controlados, não um índice privado de produção. Fechar todas as fontes ou copiar um CSV conhecido impediria a reconstrução útil que você acabou de demonstrar.

Resumo

Você comparou preços reais, identificou dependências diretas e indiretas e reconstruiu o conjunto aprovado a partir da receita salva. Também entregou uma lista completa sem alterar dados ou aplicação originais. Seleção de pacotes e sucesso de instalação são questões separadas da correção do negócio.