1. Scopo e Filosofia
pip-tools è la suite di strumenti a riga di comando che abbiamo adottato per implementare il nostro workflow di gestione delle dipendenze “Lockfile-First”. Il suo scopo è separare la definizione logica delle dipendenze dalla loro implementazione fisica, garantendo ambienti riproducibili.
Utilizziamo due dei suoi comandi principali:
pip-compile: Il “Risolutore”.pip-sync: Il “Sincronizzatore”.
2. Il Risolutore: pip-compile
2.1. Funzione
pip-compile legge un file di input (requirements.in) che elenca le nostre dipendenze di alto livello e genera un file di output (requirements.lock.txt).
Durante questo processo:
- Analizza l’intero albero delle dipendenze transitive.
- Risolve i conflitti di versione, trovando una combinazione di pacchetti che soddisfi tutti i requisiti.
- “Blocca” (
pin) ogni singolo pacchetto a una versione esatta. - Aggiunge gli hash dei file per garantire l’integrità e la sicurezza dei pacchetti scaricati.
2.2. Uso Fondamentale
Il comando base che usiamo per generare o aggiornare il nostro lockfile è:
pip-compile requirements.in --output-file=requirements.lock.txtPer aggiornare tutti i pacchetti alle ultime versioni compatibili, si usa il flag --upgrade:
pip-compile --upgrade requirements.in --output-file=requirements.lock.txt3. Il Sincronizzatore: pip-sync
3.1. Funzione
pip-sync legge un lockfile (come il nostro requirements.lock.txt) e forza l’ambiente virtuale attivo a rispecchiarlo esattamente.
A differenza di pip install -r, pip-sync:
- Installa i pacchetti mancanti.
- Aggiorna i pacchetti che hanno una versione diversa.
- Disinstalla qualsiasi pacchetto presente nell’ambiente ma non elencato nel
lockfile.
Questa capacità di rimozione è ciò che garantisce una sincronizzazione perfetta.
3.2. Uso Fondamentale
Il comando per sincronizzare l’ambiente è semplice:
pip-sync requirements.lock.txtQuesto è il comando che ogni sviluppatore dovrebbe eseguire dopo aver fatto un git pull su un branch in cui il requirements.lock.txt è stato modificato.
4. Riferimenti
Per la guida completa al workflow, fare riferimento a DEPENDENCY-MANAGEMENT.
---
Documento creato. Quando vuoi, procedo con la scheda per `qc_verify_environment.py`.