Qual'è la differenza tra pyenv, virtualenv, anaconda?


142

Sono un programmatore di rubini che cerca di imparare Python. Sono una bella famiglia con Pyenv poiché è come una copia e incolla da Rbenv. Pyenv consente di avere più di una versione di Python in un sistema e anche di isolare il Python senza toccare la parte sensibile del sistema.

Suppongo che ogni installazione di Python abbia un pacchetto pip. Quello che ancora non capisco è che ci sono molte buone librerie Python là fuori che suggeriscono di usare questo virtualenv e anaconda. Posso persino trovare il plugin virtualenv per pyenv.

Ora mi sto confondendo con lo scopo di questi due pienv e virtualenv. peggio dentro pyenv c'è un plugin virtualenv.

le mie domande sono:

  • qual'è la differenza tra pyenv e virtualenv?
  • C'è qualche differenza nell'uso del comando pip all'interno di pyenv e virtualenv?
  • cosa fa questo pyenv virutalenv?

la tua spiegazione con l'esempio sarà molto apprezzata.



Risposte:


154

Modifica: Vale la pena menzionare anche pipqui, come condae piphanno somiglianze e differenze che sono rilevanti per questo argomento .

pip: il gestore pacchetti Python.

  • Potresti pensare pipcome l'equivalente in pitone del gemcomando ruby
  • pip non è incluso in Python per impostazione predefinita.
  • Puoi installare Python usando homebrew , che installerà pip automaticamente:brew install python
  • La versione finale di OSX non includeva pip per impostazione predefinita. Per aggiungere pip alla versione di Python del tuo sistema Mac, puoi farlosudo easy_install pip
  • Puoi trovare e pubblicare pacchetti Python usando PyPI: L'indice dei pacchetti Python
  • Il file requisito.txt è paragonabile al rubino gemfile
  • Per creare un file di testo dei requisiti, pip freeze > requirements.txt
  • Nota, a questo punto, abbiamo installato Python sul nostro sistema e abbiamo creato un file requisito.txt che delinea tutti i pacchetti Python che sono stati installati sul tuo sistema.

pyenv: Python Version Manager

  • Dai documenti : pyenv ti consente di passare facilmente tra più versioni di Python. È semplice, discreto e segue la tradizione UNIX di strumenti monouso che fanno bene una cosa. Questo progetto è stato biforcato da rbenv e ruby-build e modificato per Python.
  • Molte persone esitano a usare python3 .
  • Se devi utilizzare versioni diverse di Python, pyenvti consente di gestirlo facilmente.

virtualenv: Python Environment Manager.

  • Dai documenti : il problema di base che si sta affrontando è una delle dipendenze e delle versioni e delle autorizzazioni indirette. Immagina di avere un'applicazione che richiede la versione 1 di LibFoo, ma un'altra applicazione richiede la versione 2. Come puoi utilizzare entrambe queste applicazioni? Se installi tutto in /usr/lib/python2.7/site-packages (o qualunque sia la posizione standard della tua piattaforma), è facile finire in una situazione in cui aggiorni involontariamente un'applicazione che non dovrebbe essere aggiornata.
  • Per creare un virtualenv, semplicemente invocare virtualenv ENV, dove ENVsi trova una directory per posizionare il nuovo ambiente virtuale.
  • Per inizializzare virtualenv, è necessario source ENV/bin/activate. Per smettere di usare, basta chiamare deactivate.
  • Una volta attivato il virtualenv, è possibile installare tutti i requisiti del pacchetto di un'area di lavoro eseguendo pip install -ril requirements.txtfile del progetto .

Anaconda: Gestione pacchetti + Gestione ambiente + Librerie scientifiche aggiuntive.

  • Dai documenti : Anaconda 4.2.0 include una facile installazione di Python (2.7.12, 3.4.5 e / o 3.5.2) e aggiornamenti di oltre 100 pacchetti Python scientifici e analitici pre-costruiti e testati che includono NumPy, Pandas , SciPy, Matplotlib e IPython, con oltre 620 ulteriori pacchetti disponibili tramite un sempliceconda install <packagename>
  • Come sviluppatore web, non ho usato Anaconda. È ~ 3 GB inclusi tutti i pacchetti.
  • Esiste una minicondaversione ridotta, che potrebbe essere un'opzione più semplice rispetto all'utilizzo di pip+ virtualenv, anche se non ho esperienza nell'usarlo personalmente.
  • Mentre condaconsente di installare pacchetti, questi pacchetti sono separati dai pacchetti PyPI, quindi potrebbe essere necessario utilizzare pip in aggiunta a seconda dei tipi di pacchetti che è necessario installare.

Guarda anche:


3
Questo probabilmente potrebbe usare un aggiornamento ora, cf stackoverflow.com/a/49084152/14420
matt Wilkie

9
Potrebbe essere aggiornato per includerlo in pipenv poiché attualmente sembra essere lo strumento di packaging Python ufficialmente raccomandato da Python.org?
Wavesailor,

1
Qual è il problema con l'installazione di librerie da 3 GB? Non vorrai distribuire tutte quelle librerie, ma solo perché hai installato librerie da 3 GB non significa che devi distribuirle tutte. E questa è una piccola quantità di spazio sul disco rigido in questi giorni. Attualmente utilizzo un'installazione di anaconda e loro gestiscono i miei ambienti con venv, ma stavo considerando se usare conda anche per i miei ambienti virtuali (non credo che lo farò - venv mi sembra un flusso di lavoro più fluido).
David,

@David Sono un po 'in ritardo, ma puoi espandermi su Venv mi sembra un flusso di lavoro più fluido ?
AMC

1

Analogia semplice:

  • pyenv ~ rbenv
  • pip ~ bundler
  • virtual env ~ gemset in rvm. Questo può essere gestito direttamente dal bundler senza gemset.

Da quando uso python3 preferisco l'ambiente virtuale integrato in python3 chiamato venv . venv è semplice e facile da usare. Ti consiglierei di leggere i suoi documenti ufficiali. Il documento è breve e conciso.

In ruby, non abbiamo davvero bisogno di un ambiente virtuale perché il bundler se ne occupa. Sia l'env virtuale che il bundler sono fantastici ma hanno un concetto diverso ma cercano di risolvere lo stesso problema.

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.