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

pyenvconfundas conpyvenvRespuestas:
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/patho puede usar el excelentepyselector de python en ventanas conpy -3 -m venv desired/env/path. Creará el directorio especificado condesired/env/pathconfigure 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?virtualenvle 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 esospythons, debeactivatehacerlo (ejecutando un script que modificará temporalmente suPATHpara asegurarse de que elbin/directorio de virtualenv sea lo primero). A partir de ese momento, llamarpython(opipetc.) invocará la versión de ese virtualenv hasta quedeactivatelo restablezcaPATH.pyenvopera 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 elpythoncomando. Suena similar pero el uso práctico es un poco diferente. Funciona anteponiendo supythonscript shim a suPATH(permanentemente) y luego decidiendo qué "real"pythoninvocar. Incluso puede configurar pyenv para llamar a una de sus pitones virtualenv (utilizando elpyenv-virtualenvcomplemento). Las versiones de Python que instala usandopyenvvan 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
PATHo 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:
virtualenvle permite crear instalaciones de python locales e independientes mediante la clonación de las existentespyenvle 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