📦 Generazione Chirurgica dei Requirements
In un workflow professionale, esistono due approcci per generare un file di dipendenze pulito: l’Analisi Statica del codice (per progetti esistenti “sporchi”) e la Disciplina dell’Ambiente Virtuale (per nuovi progetti).
1. Metodo Analisi Statica: pipreqs
pipreqs è lo strumento ideale quando hai un progetto e vuoi generare i requirements basandoti esclusivamente sugli import effettivamente presenti nei tuoi file .py.
Installazione
pip install pipreqs
Utilizzo
Spostati nella root del tuo progetto ed esegui:
pipreqs . --force --encoding utf-8
Perché usare pipreqs invece di pip freeze?
- Precisione: Scansiona il codice sorgente e identifica solo i moduli importati.
- Pulizia: Esclude pacchetti installati nell’ambiente ma non usati dallo script.
- Compatibilità : Specifica le versioni basandosi su quelle attualmente installate nel sistema.
2. Metodo Avanzato: pigar
Se pipreqs non dovesse bastare (ad esempio se hai dipendenze complesse o vuoi sapere dove viene usato un pacchetto), pigar è l’alternativa più sofisticata.
Installazione
pip install pigar
Utilizzo
pigar generate
Vantaggio: pigar è in grado di gestire meglio le differenze tra il nome del pacchetto su PyPI e il nome del modulo importato nel codice.
3. Metodo “Architect Choice”: Ambiente Isolato e pip-tools
Se stai iniziando un progetto o vuoi il controllo totale, la best practice è separare le dipendenze dirette dalle dipendenze transitive (le dipendenze delle dipendenze).
Workflow con pip-tools
- Crea un file chiamato
requirements.ine scrivi solo i moduli che usi direttamente:requests pandas fastapi - Installa
pip-tools:pip install pip-tools - Compila il file finale:
pip-compile requirements.in
Risultato: Otterrai un requirements.txt con tutte le versioni “pinnate” e commentate, indicando quale pacchetto ha richiesto quale dipendenza.
📉 Diagramma Decisionale (Mermaid)
💡 Note dell’Architetto (Critical Thinking)
- Ambienti “usa e getta”: Come Software Architect, ti consiglio di non aver paura di distruggere e ricreare il
venv. Se il tuorequirements.txtè corretto, la ricostruzione dell’ambiente deve essere un’operazione deterministica da pochi secondi. - Versione di Python: Ricorda che
pipreqspotrebbe non rilevare librerie standard di Python che sono state rimosse o aggiunte tra diverse versioni (es.pathlib,zoneinfo). - Sicurezza: Prima di distribuire il file, controlla sempre che non siano rimasti pacchetti legati a chiavi di accesso locali o path assoluti (molto raro con questi tool, ma possibile con plugin custom).
Tags: #Python #Pip #Pipreqs #DevOps #DependencyManagement*