work tutorial mac installing python virtualenv virtualenvwrapper pyenv

python - tutorial - pyenv work on



¿Cuál es la relación entre virtualenv y pyenv? (2)

Recientemente aprendí a usar virtualenv y virtualenvwrapper en mi flujo de trabajo, pero he visto a pyenv mencionado en algunas guías, pero parece que no puedo entender qué es pyenv y cómo es diferente / similar a virtualenv. ¿Es pyenv un reemplazo mejor / más nuevo para virtualenv o una herramienta complementaria? Si es lo último, ¿qué hace de manera diferente y cómo funcionan juntos (y virtualenvwrapper si corresponde)?


virtualenv permite crear una instalación personalizada de Python, por ejemplo, en un subdirectorio de su proyecto. Cada uno de sus proyectos puede tener su propia python (o incluso varios) bajo su respectivo virtualenv. Está perfectamente bien que algunos / todos los virtualenvs tengan incluso la misma versión de python (por ejemplo, 2.7.16) sin conflicto: viven por separado y no se conocen entre sí. Si desea usar cualquiera de esos python s, debe activate (ejecutando un script que modificará temporalmente su PATH para asegurarse de que el directorio bin/ virtualenv sea lo primero). Desde ese punto, llamar a python (o pip etc.) invocará la versión de virtualenv hasta que la deactivate (lo que restaura la PATH ).

pyenv opera en una escala más amplia que virtualenv : contiene un registro de las instalaciones de Python (y puede usarse para instalar otras nuevas) y le permite configurar qué versión de Python ejecutar cuando usa el comando python . Suena similar pero el uso práctico es un poco diferente. Funciona anteponiendo su script shim python a su PATH (permanentemente) y luego decidiendo qué python "real" invocar. Incluso puede configurar pyenv para llamar a una de sus pitones virtualenv (utilizando el pyenv-virtualenv ). Las versiones de Python que instalas usando pyenv van a su $(pyenv root)/versions/ (por defecto, la raíz de pyenv es ~ / .pyenv), por lo que son más ''globales'' que virtualenv. Por lo general, no puede duplicar versiones de Python instaladas a través de pyenv , al menos no es la idea principal.

Para crear un virtualenv con una versión específica de Python, necesita tener esa versión en algún lugar de su sistema (ya sea en la PATH o no) y esencialmente clonarla en su virtualenv recién creado. Por supuesto, una forma de obtener una versión en particular es instalarla a través de pyenv . Una vez hecho esto, los virtualenvs individuales pueden divergir al tener diferentes módulos (o versiones de los mismos) instalados en ellos.

En breve:

  • virtualenv permite crear instalaciones de python locales e independientes mediante la clonación de las existentes
  • pyenv permite instalar diferentes versiones de python simultáneamente (ya sea en todo el sistema o solo para el usuario local) y luego elegir cuál de la multitud de pitones ejecutar en un momento dado (incluidas las creadas por virtualenv o Anaconda)

Pyenv y virtualenv son herramientas muy diferentes que funcionan de diferentes maneras para hacer cosas diferentes:

  • Pyenv es una extensión bash, no funcionará en Windows, que intercepta sus llamadas a python, pip, etc., para dirigirlas a una de las varias cadenas de herramientas de python del sistema. Por lo tanto, siempre tiene disponibles todas las bibliotecas que ha instalado en la versión seleccionada de Python, por lo que es bueno para los usuarios que tienen que cambiar entre diferentes versiones de Python.

  • VirtualEnv , es Python puro, por lo que funciona en todas partes, hace una copia de, opcionalmente , una versión específica de Python y Pip local para el entorno de activación que puede incluir o no enlaces a la cadena de herramientas del sistema actual, si no puede instale solo un subconjunto conocido de bibliotecas en ese entorno. Como tal, es casi seguro que sea mucho mejor para las pruebas y la implementación, ya que sabe exactamente qué bibliotecas, en qué versiones, se utilizan y un cambio global no afectará su módulo.

venv python> 3.3

Tenga en cuenta que desde Python 3.3 en adelante hay una implementación integrada de VirtualEnv llamada venv (con, en algunas instalaciones, un contenedor llamado pyvenv; este contenedor está en desuso en Python 3.6 ), que probablemente debería usarse con preferencia. Para evitar posibles problemas con el contenedor, a menudo es una buena idea usarlo directamente usando /path/to/python3 -m venv desired/env/path o puede usar el excelente selector de py python en ventanas con py -3 -m venv desired/env/path . Creará el directorio especificado con la configuración desired/env/path y lo completará de manera apropiada. En general, es muy parecido a usar VirtualEnv.

Herramientas adicionales

Hay una serie de herramientas que vale la pena mencionar y considerar, ya que pueden ayudar con el uso de uno o más de los anteriores:

  • VirtualEnvWrapper Administre y simplifique el uso y la administración de VirtualEnv - Cross Platform .
  • pyenv-virtualenv , instalado por pyenv-installer , que proporciona herramientas PyEnv para administrar e interactuar con VirtualEnv, con esto puede tener una instalación base que incluye más de una versión de python y crear entornos aislados dentro de cada uno de ellos ( Linux / OS) X Sugerido por Johann Visagie
  • PyInstaller puede tomar su código de Python, posiblemente desarrollado y probado bajo VirtualEnv, y agruparlo para que pueda ejecutar una plataforma que no tenga instalada su versión de Python: tenga en cuenta que no es un compilador cruzado, necesitará un Windows (virtual -) máquina para construir instalaciones de Windows, etc., pero puede ser útil incluso donde puede estar seguro de que se instalará python pero no puede estar seguro de que la versión de python y todas las bibliotecas sean compatibles con su código.