Python venv Foglio di riferimento rapido
alcune utili command per venv
Venv è uno strumento per la gestione degli ambienti virtuali da riga di comando. Un’alternativa molto più semplice rispetto ad Anaconda. Ecco alcuni comandi utili per venv.
Foglio di riferimento per Python venv
Creare un ambiente virtuale
-
Comando standard (Python 3.3+):
python -m venv venv
Questo crea un ambiente virtuale chiamato
venv
nella tua directory corrente. -
Con una versione specifica di Python (se installata):
python3.10 -m venv venv
o utilizzando
virtualenv
:virtualenv -p /usr/local/bin/python3.10 venv
(Richiede il pacchetto
virtualenv
).
Attivare l’ambiente virtuale
- Su Windows:
.\venv\Scripts\activate
- Su macOS/Linux:
Ora il prompt della shell dovrebbe mostrare il nome dell’ambiente.source venv/bin/activate
Disattivare l’ambiente virtuale
- Su tutti i sistemi:
Questo ti riporta al Python del sistema.deactivate
Installare pacchetti
- Con pip:
Esempio:pip install
pip install numpy pandas
- Aggiornare pip (consigliato):
python -m pip install --upgrade pip
Congelare e esportare i requisiti
- Salvare i pacchetti dell’ambiente corrente:
pip freeze > requirements.txt
- Installare da un file dei requisiti:
Assicurati che l’ambiente virtuale sia attivo prima di eseguire questi comandi.pip install -r requirements.txt
Rimuovere un ambiente virtuale
deactivate
rm -rf <env path>
Errori comuni nella gestione degli ambienti virtuali Python
Dimenticare di attivare l’ambiente virtuale
- Un errore frequente è eseguire comandi senza attivare l’ambiente virtuale desiderato, portando all’installazione di pacchetti nell’ambiente globale o nel venv errato. Questo può causare conflitti di dipendenze e comportamenti imprevedibili.
Non fissare le versioni dei pacchetti
- L’uso di specificatori di versione non precisi (come
>=
invece di==
) inrequirements.txt
compromette la riproducibilità. Fissare le versioni esatte garantisce che tutti coloro che lavorano al progetto utilizzino le stesse versioni dei pacchetti, prevenendo problemi imprevisti durante il deployment o la collaborazione.
Mistura tra ambienti globali e virtuali
- Installare accidentalmente pacchetti globalmente o mescolare ambienti globali e virtuali può creare conflitti, soprattutto se diversi progetti richiedono versioni incompatibili dei pacchetti. Assicurati sempre di operare nell’ambiente corretto.
Includere gli ambienti virtuali nel controllo versione
- Includere la directory dell’ambiente virtuale (es.
venv/
) nel controllo versione ingrossa i repository e non è necessario. Aggiungi sempre le directory venv a.gitignore
per mantenere il repository pulito.
Non separare le dipendenze di sviluppo e produzione
- Non distinguere tra dipendenze di sviluppo e produzione può portare a deployment ingombrati o insicuri. Utilizza file dei requisiti separati o sezioni di configurazione per ciascuna.
Mancanza di documentazione e automazione
- Non documentare i passaggi per la configurazione dell’ambiente o non automatizzare il processo (con script o Makefile) rende più difficile l’onboarding di nuovi contributori e la riproducibilità degli ambienti.
Non pulire regolarmente gli ambienti vecchi
- Con il tempo, gli ambienti virtuali non utilizzati possono accumularsi, sprechi spazio su disco e causare confusione. Elimina regolarmente gli ambienti obsoleti per mantenere un workspace ordinato.
Ignorare i limiti tra Python del sistema e i gestori di pacchetti
- Modificare il Python del sistema o mescolare i gestori di pacchetti del sistema con pip può danneggiare gli strumenti del sistema e introdurre problemi difficili da diagnosticare. Utilizza sempre i venv per le dipendenze dei progetti e evita di interferire con i pacchetti gestiti dal sistema.
Tabella riassuntiva
Errore comune | Impatto |
---|---|
Dimenticare di attivare venv | Installa i pacchetti nell’ambiente errato |
Non fissare le versioni dei pacchetti | Costruzioni imprevedibili, bug difficili da riprodurre |
Mescolare ambienti globali e virtuali | Conflitti di dipendenze/versioni |
Includere le directory venv nel controllo versione | Repository ingombrati e disordinati |
Non separare le dipendenze di sviluppo e produzione | Deployment ingombrati o insicuri |
Mancanza di documentazione/automazione | Difficile onboarding, configurazioni inconsistenti |
Non pulire regolarmente gli ambienti vecchi | Spreco di spazio su disco, confusione |
Modificare il Python del sistema o i pacchetti | Instabilità del sistema, strumenti danneggiati |
Seguire le buone pratiche, come attivare sempre il venv, fissare le dipendenze, separare gli ambienti e mantenere una documentazione chiara, può aiutarti a evitare questi errori comuni.
Principali differenze tra Conda e ambienti virtuali per la riproducibilità
Funzione | Ambienti Conda | Ambienti virtuali Python (venv/virtualenv) |
---|---|---|
Ambito di gestione | Gestisce i pacchetti Python e le dipendenze non-Python (es. librerie di sistema, compilatori) | Gestisce solo i pacchetti Python tramite pip |
Controllo delle versioni di Python | Può specificare e installare qualsiasi versione di Python per ambiente | Utilizza la versione di Python installata nel sistema |
Consistenza tra piattaforme | Più consistente tra diverse OS (Windows, macOS, Linux) grazie alla gestione di tutte le dipendenze | Dipende dalle librerie del sistema, che possono variare per OS |
Fonti dei pacchetti | Utilizza i repository Conda (binari precompilati, stack scientifico) | Utilizza PyPI (pip) per i pacchetti Python |
Riproducibilità | Maggiore per progetti complessi, scientifici o multilingua; può esportare l’ambiente completo (conda env export ) |
Buona per progetti puramente Python; potrebbe mancare di riproducibilità se sono coinvolti dipendenze del sistema |
Dipendenze non-Python | Può installare e gestire (es. OpenBLAS, libpng) | Non può gestire; devono essere installate separatamente |
Esportazione/Importazione ambiente | conda env export / conda env create per la riproducibilità completa |
pip freeze > requirements.txt / pip install -r requirements.txt (solo pacchetti Python) |
Prestazioni | Più veloci e affidabili per grandi pacchetti scientifici (es. numpy, pandas) | Potrebbe richiedere la compilazione da sorgente, specialmente su Windows |
Complessità | Slightly higher setup and management overhead | Leggero, semplice per progetti Python base |
Riassunto dei punti chiave
-
Gli ambienti Conda sono ideali per la riproducibilità in progetti che richiedono sia dipendenze Python che non-Python, o quando è critica la replicazione esatta tra piattaforme. Conda gestisce l’intero stack, incluso Python stesso, le librerie e persino i compilatori, rendendolo più facile condividere e riprodurre ambienti complessi, specialmente in contesti di data science e ricerca.
-
Gli ambienti virtuali Python (
venv
/virtualenv
) sono leggeri e ottimi per isolare le dipendenze Python in progetti puramente Python. Tuttavia, non gestiscono le dipendenze a livello di sistema o non-Python, quindi la riproducibilità potrebbe essere compromessa se il progetto dipende da librerie esterne o da specifiche configurazioni del sistema. -
Esportare e condividere gli ambienti: Conda ti permette di esportare una specificazione completa dell’ambiente (
conda env export
), inclusi tutti i dipendenze e le loro versioni, che possono essere ricreati esattamente altrove. Con gli ambienti virtuali,pip freeze
cattura solo i pacchetti Python, non le dipendenze del sistema o la versione dell’interprete Python. -
Conclusione
Utilizza Conda per la massima riproducibilità in progetti scientifici, cross-platform o progetti complessi. Utilizza gli ambienti virtuali Python per progetti leggeri e puramente Python dove le dipendenze a livello di sistema non sono un problema.