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:

  1. Analizza l’intero albero delle dipendenze transitive.
  2. Risolve i conflitti di versione, trovando una combinazione di pacchetti che soddisfi tutti i requisiti.
  3. “Blocca” (pin) ogni singolo pacchetto a una versione esatta.
  4. 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.txt

Per aggiornare tutti i pacchetti alle ultime versioni compatibili, si usa il flag --upgrade:

pip-compile --upgrade requirements.in --output-file=requirements.lock.txt

3. 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.txt

Questo è 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`.