Hai installato un pacchetto per un progetto e adesso un progetto completamente diverso crasha. Ti suona familiare? Complimenti, hai appena scoperto perché esistono gli ambienti virtuali.
Il problema in 30 secondi
Python ha una singola cartella globale site-packages dove pip install scarica tutto. Se il Progetto A ha bisogno di pandas 1.5 e il Progetto B ha bisogno di pandas 2.1, scoppia una rissa. L’ultimo installato vince, e l’altro progetto si rompe. In silenzio, ovviamente — Python è educato così.
Un ambiente virtuale dà a ogni progetto la sua cartella site-packages isolata. Il Progetto A ha il suo pandas 1.5, il Progetto B ha il suo pandas 2.1, e non sanno nemmeno dell’esistenza l’uno dell’altro. Problema risolto.
Il metodo integrato: venv
Python include venv dalla versione 3.3. Non serve installare nulla.
# Crea un ambiente virtuale nella cartella .venv
python -m venv .venv
# Attivalo (Linux/macOS)
source .venv/bin/activate
# Attivalo (Windows)
.venv\Scripts\activate
# Ora pip install va dentro .venv, non nel Python di sistema
pip install pandas==2.1.0
Quando hai finito, deactivate per tornare al Python di sistema. La cartella .venv è una normalissima directory — cancellala e l’ambiente sparisce.
Cose che tutti dimenticano
- Aggiungi
.venv/al.gitignore. Non si committa l’ambiente. Si committa unrequirements.txt(opyproject.toml) e lo si ricrea dove serve in fase di deploy. - Congela sempre le dipendenze.
pip freeze > requirements.txtsalva le versioni esatte che hai installato. Senza questo passaggio,pip installprende l’ultima versione e le cose possono rompersi in produzione. - Un ambiente per progetto. Non condividere ambienti tra progetti diversi a meno che tu non voglia rivivere esattamente il problema che stavi cercando di risolvere.
Poetry: l’opzione da grandi
venv + pip + requirements.txt funziona ma ha spigoli vivi. Poetry racchiude l’intero workflow in un unico strumento:
# Installa poetry (una volta sola)
pip install poetry
# Inizia un nuovo progetto
poetry init
# Aggiungi una dipendenza
poetry add pandas
# Installa dal lock file (versioni esatte, riproducibile)
poetry install
Poetry genera un pyproject.toml (le tue dipendenze) e un poetry.lock (versioni bloccate di ogni dipendenza, sotto-dipendenze incluse). Il lock file è quello che rende le build riproducibili — va committato.
Poetry crea e gestisce l’ambiente virtuale per te in automatico. Non devi mai attivarlo manualmente; poetry run python script.py esegue all’interno dell’ambiente.
Quando usarlo
- Progetti con più di una manciata di dipendenze
- Qualsiasi cosa che va in produzione o viene condivisa con un team
- Quando sei stanco di sincronizzare manualmente il
requirements.txt
uv: il ragazzino veloce
uv è uno strumento relativamente nuovo (del team Astral, gli stessi di ruff) che sostituisce pip, pip-tools, virtualenv e parti di Poetry in un singolo binario scritto in Rust. È veloce — 10–100× più rapido di pip per la risoluzione e l’installazione.
# Installa uv
pip install uv
# Crea un venv
uv venv
# Installa da requirements
uv pip install -r requirements.txt
# Oppure gestisci un progetto (workflow simile a Poetry)
uv init
uv add pandas
uv sync
uv sta ancora maturando, ma è già eccellente per:
- Installazione rapida delle dipendenze nelle pipeline CI
- Progetti dove vuoi un unico strumento per ambienti + pacchetti
- Chiunque sia stufo di aspettare 30 secondi che pip risolva un albero di dipendenze
Quale scegliere?
| Ti serve… | Usa |
|---|---|
| Qualcosa che funziona e basta, senza installare nulla | venv + pip |
| Build riproducibili + gestione dipendenze | Poetry |
| Velocità sopra tutto, il bleeding edge ti va bene | uv |
| Un notebook di data science, con il minimo sforzo | conda |
Se stai iniziando, venv + pip va benissimo. Impara come funzionano gli ambienti a livello fondamentale prima di aggiungere astrazioni sopra. Quando sentirai il dolore di gestire manualmente il requirements.txt su più progetti, Poetry sarà il passo naturale successivo.
La cosa importante non è quale strumento usi. È che ne usi uno. Lanciare pip install nel Python globale è il modo perfetto per ritrovarti a reinstallare tutto da zero ogni sei mesi.
La regola in una frase
Ogni progetto Python ha il suo ambiente virtuale, sempre, senza eccezioni, anche se è un piccolo script. I tre minuti che servono per configurarlo risparmiano tre ore di debugging di conflitti tra dipendenze dopo.