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 los dos (y virtualenvwrapper si corresponde)?
python
virtualenv
virtualenvwrapper
pyenv
verdad1ness
fuente
fuente
pyenv
confundas conpyvenv
Respuestas:
Pyenv y virtualenv son herramientas muy diferentes que funcionan de diferentes maneras para hacer diferentes cosas:
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 usan 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 excelentepy
selector de python en ventanas conpy -3 -m venv desired/env/path
. Creará el directorio especificado condesired/env/path
configure y lo completará adecuadamente. En general, es muy parecido a usar VirtualEnv.Herramientas adicionales
Hay varias herramientas que vale la pena mencionar y considerar, ya que pueden ayudar con el uso de uno o más de los anteriores:
fuente
venv
, ahora en la biblioteca estándar?virtualenv
le permite crear una instalación personalizada de Python, por ejemplo, en un subdirectorio de su proyecto. Cada uno de sus proyectos puede tener su propiopython
(o incluso varios) bajo su respectivo virtualenv. Está perfectamente bien que algunos / todos los virtualenvs tengan incluso la misma versión depython
(por ejemplo, 2.7.16) sin conflicto: viven por separado y no se conocen entre sí. Si desea usar cualquiera de esospython
s, debeactivate
hacerlo (ejecutando un script que modificará temporalmente suPATH
para asegurarse de que elbin/
directorio de virtualenv sea lo primero). A partir de ese momento, llamarpython
(opip
etc.) invocará la versión de ese virtualenv hasta quedeactivate
lo restablezcaPATH
.pyenv
opera en una escala más amplia quevirtualenv
: 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 elpython
comando. Suena similar pero el uso práctico es un poco diferente. Funciona anteponiendo supython
script shim a suPATH
(permanentemente) y luego decidiendo qué "real"python
invocar. Incluso puede configurar pyenv para llamar a una de sus pitones virtualenv (utilizando elpyenv-virtualenv
complemento). Las versiones de Python que instala usandopyenv
van a su$(pyenv root)/versions/
directorio (por defecto, la raíz de pyenv es ~ / .pyenv), por lo que son más 'globales' que virtualenv. Por lo general, no puede duplicar las versiones de Python instaladaspyenv
, 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 el
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 depyenv
. Una vez hecho esto, los virtualenvs individuales son libres de divergir al tener instalados diferentes módulos (o versiones de los mismos).En breve:
virtualenv
le permite crear instalaciones de python locales e independientes mediante la clonación de las existentespyenv
le 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)fuente