¿Cuál es la diferencia entre pyenv, virtualenv, anaconda?

142

Soy un programador de ruby ​​tratando de aprender Python. Soy bastante familiar con pyenv ya que es como copiar y pegar desde rbenv. Pyenv ayuda a permitir tener más de una versión de Python en un sistema y también a aislar Python sin tocar la parte sensible del sistema.

Supongo que cada instalación de Python viene con paquete pip. Lo que todavía no entiendo es que hay muchas buenas bibliotecas de Python que sugieren usar este virtualenv y anaconda. Incluso puedo encontrar el plugin virtualenv para pyenv.

Ahora me estoy confundiendo con el propósito de estos dos pyenv y virtualenv. peor dentro de pyenv hay un plugin virtualenv.

mis preguntas son:

  • ¿Cuál es la diferencia entre pyenv y virtualenv?
  • ¿Hay alguna diferencia en el uso del comando pip dentro de pyenv y virtualenv?
  • ¿Qué hace este pyenv virutalenv?

Su explicación con el ejemplo será muy apreciada.

channa ly
fuente

Respuestas:

154

Editar: Vale la pena mencionar pipaquí también, conday piptiene similitudes y diferencias que son relevantes para este tema .

pip: el Administrador de paquetes de Python.

  • Puede pensar pipcomo el equivalente en Python del gemcomando ruby
  • pip no está incluido con python por defecto.
  • Puede instalar Python usando homebrew , que instalará pip automáticamente:brew install python
  • La versión final de OSX no incluía pip por defecto. Para agregar pip a la versión de python de su sistema Mac, puedesudo easy_install pip
  • Puede encontrar y publicar paquetes de Python usando PyPI: el índice de paquetes de Python
  • El archivo require.txt es comparable al ruby gemfile
  • Para crear un archivo de texto de requisitos, pip freeze > requirements.txt
  • Tenga en cuenta que, en este punto, tenemos Python instalado en nuestro sistema y hemos creado un archivo require.txt que describe todos los paquetes de Python que se han instalado en su sistema.

pyenv: Administrador de versiones de Python

  • De los documentos : pyenv le permite cambiar fácilmente entre múltiples versiones de Python. Es simple, discreto y sigue la tradición UNIX de herramientas de un solo propósito que hacen una cosa bien. Este proyecto se bifurcó de rbenv y ruby-build, y se modificó para Python.
  • Mucha gente duda en usar python3 .
  • Si necesita usar diferentes versiones de python, le pyenvpermite administrar esto fácilmente.

virtualenv: Python Environment Manager.

  • De los documentos : El problema básico que se aborda es una de las dependencias y versiones, y los permisos indirectos. Imagine que tiene una aplicación que necesita la versión 1 de LibFoo, pero otra aplicación requiere la versión 2. ¿Cómo puede usar ambas aplicaciones? Si instala todo en /usr/lib/python2.7/site-packages (o cualquiera que sea la ubicación estándar de su plataforma), es fácil terminar en una situación en la que actualiza involuntariamente una aplicación que no debería actualizarse.
  • Para crear un virtualenv, simplemente invoque virtualenv ENV, donde ENVes un directorio para colocar el nuevo entorno virtual.
  • Para inicializar virtualenv, debes hacerlo source ENV/bin/activate. Para dejar de usar, simplemente llame deactivate.
  • Una vez que active el virtualenv, puede instalar todos los requisitos del paquete de un espacio de trabajo ejecutándose pip install -rcontra el requirements.txtarchivo del proyecto .

Anaconda: Package Manager + Environment Manager + Bibliotecas científicas adicionales.

  • De los documentos : Anaconda 4.2.0 incluye una instalación fácil de Python (2.7.12, 3.4.5 y / o 3.5.2) y actualizaciones de más de 100 paquetes de Python científicos y analíticos preconstruidos y probados que incluyen NumPy, Pandas , SciPy, Matplotlib e IPython, con más de 620 paquetes más disponibles a través de un simpleconda install <packagename>
  • Como desarrollador web, no he usado Anaconda. Es ~ 3GB incluyendo todos los paquetes.
  • Hay una minicondaversión reducida , que parece ser una opción más simple que usar pip+ virtualenv, aunque no tengo experiencia en usarlo personalmente.
  • Si bien le condapermite instalar paquetes, estos paquetes están separados de los paquetes PyPI, por lo que es posible que aún necesite usar pip adicionalmente dependiendo de los tipos de paquetes que necesite instalar.

Ver también:

Wade Williams
fuente
3
Probablemente esto podría usar una actualización ahora, cf stackoverflow.com/a/49084152/14420
matt wilkie
9
¿Podría actualizarse para incluirlo en pipenv, ya que actualmente parece ser la herramienta de empaquetado Python recomendada oficialmente por Python.org?
Wavesailor
1
¿Cuál es el problema con la instalación de un mero 3GB de bibliotecas? No querrá implementar todas esas bibliotecas, pero el hecho de que tenga un valor de 3GB de bibliotecas instaladas no significa que necesite implementarlas todas. Y eso es una pequeña cantidad de espacio en el disco duro en estos días. Actualmente utilizo una instalación de anaconda y gestionan mis entornos con venv, pero estaba considerando si usar conda para mis entornos virtuales también (no creo que lo haga, venv me parece un flujo de trabajo más fluido).
David
@David, llego un poco tarde, pero ¿puedes ampliar en venv me parece un flujo de trabajo más fluido ?
AMC
1

Analogía simple:

  • pyenv ~ rbenv
  • pip ~ bundler
  • env virtual gemset en rvm. Esto puede ser gestionado por bundler directamente sin gemset.

Como uso python3, prefiero el entorno virtual incorporado en python3 llamado venv .venv es simple y fácil de usar. Te recomendaría que leas sus documentos oficiales. El documento es corto y conciso.

En ruby, realmente no necesitamos un entorno virtual porque el paquete lo cuida. Tanto el entorno virtual como el bundler son geniales, pero tienen un concepto diferente pero intentan resolver el mismo problema.

channa ly
fuente