pip come scrivere solo pacchetti installati manualmente in requirements.txt
Generare i requirements.txt con i soli pacchetti installati manualmente dall'utente via pip

Solo i pacchetti installati da te nel requirements.txt ✨
Pip freeze e pipreqs per gestire i tuoi requirements.txt
Il problema
Ti è mai capitato di aprire il tuo requirements.txt e trovarti davanti a una lista infinita di pacchetti, alcuni con nomi mai visti prima, installati chissà quando, chissà perché e pensare "ma io ho installato solo Django… cos'è tutta questa roba?"
Questo succede perché pip freeze
ti dà tutto l’ambiente, comprese le dipendenze secondarie, terziarie...
Per fortuna c’è un modo per salvare solo i pacchetti installati manualmente, quelli che tu hai deciso di mettere nel progetto.
La soluzione (pip freeze)
Per scrivere solo i pacchetti installati manualmente (escludendo quindi quelli installati come dipendenze automatiche) in un file requirements.txt, puoi usare il comando:
pip list --not-required --format freeze > requirements.txt
--not-required
elenca i pacchetti non richiesti da altri pacchetti che tendenzialmente corrispondono a quelli installati manualmente.
Tuttavia esistono alcuni progetti open source che approcciano il problema da un punto di vista diverso. Uno di questi è pipreqs
L'altra soluzione (pipreqs)
pipreqs è uno strumento che scansiona il codice sorgente del tuo progetto (i file .py) e genera un requirements.txt basato solo sui pacchetti realmente usati nei tuoi import. In pratica guarda cosa usi, non cosa hai installato!
Per utilizzarlo dovrai prima installarlo con il seguente comando:
pip install pipreqs
A questo punto potrai utilizzarlo semplicemente con il comando:
pipreqs /path/to/project
oppure se sei già nella root del progetto:
pipreqs .
Questo genererà (o sovrascriverà) il file requirements.txt
con solo i pacchetti effettivamente usati nel codice.
Attenzione però 👀
pipreqs non include i pacchetti se non li hai importati esplicitamente. Se un pacchetto viene usato indirettamente (es. tramite import dinamici o estensioni C), potresti doverlo aggiungere manualmente.
Inoltre il file generato non congela le versioni precise (==x.y.z) come fa pip freeze
, ma cerca di dedurle dal tuo ambiente.
Per forzare le versioni precise usa il comando:
pipreqs . --force --use-local
Author: Fantantonio
Date: 13/12/2024