Python venv Foglio di riferimento rapido

alcune utili command per venv

Indice

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.

Un python sta cercando di aprire una scatola di legno.

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:
    source venv/bin/activate
    
    Ora il prompt della shell dovrebbe mostrare il nome dell’ambiente.

Disattivare l’ambiente virtuale

  • Su tutti i sistemi:
    deactivate
    
    Questo ti riporta al Python del sistema.

Installare pacchetti

  • Con pip:
    pip install
    
    Esempio:
    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:
    pip install -r requirements.txt
    
    Assicurati che l’ambiente virtuale sia attivo prima di eseguire questi comandi.

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 ==) in requirements.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.