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.
Ti faccio solo sapere che, a mio parere, esiste uno strumento molto migliore per la gestione dei pacchetti e degli ambienti in Python, rispetto a venv - uv. Dai un’occhiata: uv - Nuovo Gestore di Pacchetti, Progetti e Ambienti Python
Foglio di Trucchi 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 piattaforme:
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 previsto, portando all’installazione di pacchetti nell’ambiente globale o nel venv sbagliato. Questo può causare conflitti tra 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.
Mescolare Ambiente Globale e Virtuale
- 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 Ambienti Virtuali nel Controllo delle Versioni
- Includere la directory dell’ambiente virtuale (es.
venv/
) nel controllo delle versioni 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 l’installazione 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 Obsoleti
- Con il tempo, gli ambienti virtuali non utilizzati possono accumularsi, sprechi spazio su disco e causare confusione. Rimuovi regolarmente gli ambienti obsoleti per mantenere un workspace ordinato.
Ignorare i Limiti del Python e del Gestore dei Pacchetti del Sistema
- Modificare il Python del sistema o mescolare i gestori dei pacchetti del sistema con pip può danneggiare gli strumenti del sistema e introdurre problemi difficili da diagnosticare. Usa sempre i venv per le dipendenze dei progetti e evita di interferire con i pacchetti gestiti dal sistema.
Tabella Riepilogativa
Errore Comune | Impatto |
---|---|
Dimenticare di attivare venv | Installa i pacchetti nell’ambiente sbagliato |
Non fissare le versioni dei pacchetti | Costruzioni imprevedibili, bug difficili da riprodurre |
Mescolare ambiente globale e virtuale | Conflitti tra dipendenze/versioni |
Includere directory venv nel controllo delle versioni | Repository ingombrate, disordinate |
Non separare dipendenze di sviluppo e produzione | Deployment ingombrati/insecure |
Mancanza di documentazione/automazione | Difficile onboarding, configurazioni inconsistenti |
Non pulire gli ambienti obsoleti | Spreco di spazio su disco, confusione |
Modificare Python o pacchetti del sistema | Instabilità del sistema, strumenti danneggiati |
Seguire le best practice, come sempre attivare 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 dipendenze non-Python (es. librerie di sistema, compilatori) | Gestisce solo i pacchetti Python tramite pip |
Controllo della Versione di Python | Può specificare e installare qualsiasi versione di Python per ambiente | Utilizza la versione di Python installata nel sistema |
Consistenza Cross-Platform | Più consistente tra diversi OS (Windows, macOS, Linux) grazie alla gestione di tutte le dipendenze | Dipende dalle librerie del sistema, che possono differire per OS |
Fonti dei Pacchetti | Utilizza repository Conda (binari precompilati, stack scientifico) | Utilizza PyPI (pip) per i pacchetti Python |
Riproducibilità | Maggiore per progetti complessi, scientifici o multilingua; puoi 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 dell’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 |
Riepilogo 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 anche 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 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.