Qual è la relazione tra virtualenv e pyenv?


175

Di recente ho imparato a utilizzare virtualenv e virtualenvwrapper nel mio flusso di lavoro, ma ho visto pyenv menzionato in alcune guide, ma non riesco a capire cosa sia pyenv e come sia diverso / simile a virtualenv. Pyenv è un sostituto migliore / più recente per virtualenv o uno strumento gratuito? Se quest'ultimo cosa fa diversamente e come funzionano i due (e virtualenvwrapper se applicabile)?


3
fgimian.github.io/blog/2014/04/20/… : Tuttavia, esiste un'altra alternativa chiamata pyenv che presenta numerosi vantaggi significativi .
Martijn Pieters

11
Non essere come me e pyenvconfonderti conpyvenv
Utente

Risposte:


162

Pyenv e virtualenv sono strumenti molto diversi che funzionano in modi diversi per fare cose diverse:

  • Pyenv è un'estensione bash - non funzionerà su Windows - che intercetta le tue chiamate a Python, Pip, ecc., Per indirizzarle a una delle numerose catene di strumenti Python di sistema. Quindi hai sempre a disposizione tutte le librerie che hai installato nella versione di Python selezionata, pertanto è utile per gli utenti che devono passare da una versione all'altra di Python.

  • VirtualEnv , è puro Python, quindi funziona ovunque, crea una copia, facoltativamente , di una versione specifica di, Python e Pip locale nell'ambiente di attivazione che può o meno includere collegamenti all'attuale catena di strumenti di sistema, se non è possibile installa solo un sottoinsieme noto di librerie in quell'ambiente. In quanto tale, è quasi sicuramente molto meglio per i test e la distribuzione, poiché sai esattamente quali librerie, a quali versioni vengono utilizzate e una modifica globale non avrà alcun impatto sul tuo modulo.

pitone venv > 3.3

Si noti che da Python 3.3 in poi c'è un'implementazione integrata di VirtualEnv chiamata venv (con, su alcune installazioni un wrapper chiamato pyvenv - questo wrapper è deprecato in Python 3.6 ), che probabilmente dovrebbe essere usato in preferenza. Per evitare possibili problemi con il wrapper, è spesso una buona idea usarlo direttamente usando /path/to/python3 -m venv desired/env/patho puoi usare l'eccellente pyselettore Python su Windows con py -3 -m venv desired/env/path. Creerà la directory specificata con desired/env/pathconfigure e la popolerà in modo appropriato. In generale è molto simile all'utilizzo di VirtualEnv.

Strumenti aggiuntivi

Esistono diversi strumenti che vale la pena menzionare e considerare, in quanto possono aiutare con l'uso di uno o più dei precedenti:

  • VirtualEnvWrapper Gestisce e semplifica l'uso e la gestione di VirtualEnv - Cross Platform .
  • pyenv-virtualenv , installato da pyenv-installer , che fornisce gli strumenti PyEnv per la gestione e l'interfacciamento di VirtualEnv - con questo puoi avere un'installazione di base che include più di una versione di Python e creare ambienti isolati all'interno di ciascuno di essi - Linux / OS- X . Suggerito da Johann Visagie
  • PyInstaller può prendere il tuo codice Python, eventualmente sviluppato e testato sotto VirtualEnv, e raggrupparlo in modo che possa eseguire una piattaforma su cui non è installata la tua versione di Python - Nota che non è un compilatore incrociato, avrai bisogno di un Windows (virtuale -) macchina per costruire installazioni di Windows, ecc., ma può essere utile anche dove puoi essere sicuro che python verrà installato ma non puoi essere sicuro che la versione di python e tutte le librerie saranno compatibili con il tuo codice.

3
Probabilmente vale la pena menzionare pyenv-virtualenv, un plugin pyenv che consente a pyenv e virtualenv di funzionare perfettamente all'unisono. Se hai installato pyenv usando pyenv-installer, pyenv-virtualenv sarà già presente. * github.com/yyuu/pyenv-virtualenv * github.com/yyuu/pyenv-installer
wjv,

1
Che dire venv, ora nella libreria standard?
Flimm,

@Flimm: da Python 3.3 in poi venv fa parte della libreria standard e dovrebbe essere usato al posto di virtualenv poiché viene spesso descritto come "virtualenv done right" - reddit.com/r/learnpython/comments/4hsudz/pyvenv_vs_virtualenv
Steve Barnes

2
pyenv-virtualenv non è (o almeno non è più) solo Linux. È disponibile un pacchetto homebrew per una facile installazione su MacOS.
Girare il

Grazie per aver evidenziato l'interoperabilità!
HashRocketSyntax,

16

virtualenvconsente di creare un'installazione personalizzata di Python, ad esempio in una sottodirectory del progetto. Ciascuno dei tuoi progetti può quindi avere il proprio python(o anche più) sotto il rispettivo virtualenv. Va bene che alcuni / tutti i virtualenv abbiano anche la stessa versione di python(es. 2.7.16) senza conflitti: vivono separatamente e non si conoscono. Se vuoi usare uno di questi python, devi activatefarlo (eseguendo uno script che modificherà temporaneamente il tuo PATHper assicurarti che la bin/directory di virtualenv venga prima). Da quel momento, chiamando python(o pipecc.) Invocherai la versione di virtualenv fino a quando deactivatenon verrà ripristinata ( PATH).

pyenvopera su una scala più ampia di virtualenv- contiene un registro delle installazioni di Python (e può essere usato per installarne di nuove) e consente di configurare quale versione di Python eseguire quando si utilizza il pythoncomando. Sembra simile ma l'uso pratico è un po 'diverso. Funziona anteponendo il suo pythonscript shim al tuo PATH(in modo permanente) e quindi decidendo quale "reale" pythoninvocare. Puoi persino configurare pyenv per chiamare in uno dei tuoi pitoni virtualenv (usando il pyenv-virtualenvplugin). Le versioni di Python installate pyenvvanno nella sua $(pyenv root)/versions/directory (per impostazione predefinita, la radice di pyenv è ~ / .pyenv), quindi sono più "globali" di virtualenv. Di solito, non è possibile duplicare le versioni di Python installate pyenv, almeno non è l'idea principale.

Per creare un virtualenv con una specifica versione di Python, devi avere quella versione da qualche parte nel tuo sistema (sia che sia attiva PATHo meno) e essenzialmente clonarla nella virtualenv appena creata. Naturalmente, un modo per ottenere una versione particolare è installarlo tramite pyenv. Una volta fatto, i singoli virtualenv sono liberi di divergere avendo diversi moduli (o versioni) installati in essi.

In breve:

  • virtualenv consente di creare installazioni locali e indipendenti di Python clonandole da quelle esistenti
  • pyenv consente di installare contemporaneamente diverse versioni di python (a livello di sistema o solo per l'utente locale) e quindi scegliere quale tra la moltitudine di python eseguire in qualsiasi momento (compresi quelli creati da virtualenv o Anaconda)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.