Saltar al contenido

¿Cuál es la diferencia entre venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv, etc?

Solución:

Paquetes de PyPI que no están en la biblioteca estándar:

  • virtualenv es una herramienta muy popular que crea entornos de Python aislados para bibliotecas de Python. Si no está familiarizado con esta herramienta, le recomiendo que la aprenda, ya que es una herramienta muy útil, y la haré comparaciones en el resto de esta respuesta.

    Funciona instalando un montón de archivos en un directorio (por ejemplo: env/), y luego modificando el PATH variable de entorno a prefix con una costumbre bin directorio (por ejemplo: env/bin/). Una copia exacta del python o python3 binary se coloca en este directorio, pero Python está programado para buscar bibliotecas relativas a su ruta primero, en el directorio de entorno. No es parte de la biblioteca estándar de Python, pero está oficialmente bendecido por PyPA (Python Packaging Authority). Una vez activado, puede instalar paquetes en el entorno virtual utilizando pip.

  • pyenv se utiliza para aislar versiones de Python. Por ejemplo, es posible que desee probar su código con Python 2.7, 3.6, 3.7 y 3.8, por lo que necesitará una forma de cambiar entre ellos. Una vez activado, antepone el PATH variable de entorno con ~/.pyenv/shims, donde hay archivos especiales que coinciden con los comandos de Python (python, pip). Estas no son copias de los comandos enviados por Python; son scripts especiales que deciden sobre la marcha qué versión de Python ejecutar en función de la PYENV_VERSION variable de entorno, o la .python-version archivo, o el ~/.pyenv/version expediente. pyenv también facilita el proceso de descarga e instalación de múltiples versiones de Python, usando el comando pyenv install.

  • pyenv-virtualenv es un complemento para pyenv por el mismo autor que pyenv, para permitirte usar pyenv y virtualenv al mismo tiempo convenientemente. Sin embargo, si usa Python 3.3 o posterior, pyenv-virtualenv intentará correr python -m venv si está disponible, en lugar de virtualenv. Puedes usar virtualenv y pyenv juntos sin pyenv-virtualenv, si no desea las funciones de conveniencia.

  • virtualenvwrapper es un conjunto de extensiones para virtualenv (ver documentos). Te da comandos como mkvirtualenv, lssitepackages, y especialmente workon para cambiar entre diferentes virtualenv directorios. Esta herramienta es especialmente útil si desea múltiples virtualenv directorios.

  • pyenv-virtualenvwrapper es un complemento para pyenv por el mismo autor que pyenv, para integrar convenientemente virtualenvwrapper dentro pyenv.

  • pipenv tiene como objetivo combinar Pipfile, pip y virtualenv en un comando en la línea de comandos. los virtualenv el directorio normalmente se coloca en ~/.local/share/virtualenvs/XXX, con XXX siendo un hash de la ruta del directorio del proyecto. Esto es diferente de virtualenv, donde el directorio se encuentra normalmente en el directorio de trabajo actual. pipenv está destinado a ser utilizado al desarrollar aplicaciones Python (a diferencia de las bibliotecas). Hay alternativas a pipenv, tal como poetry, que no enumeraré aquí, ya que esta pregunta solo se refiere a los paquetes que tienen un nombre similar.

Biblioteca estándar:

  • pyvenv es un script enviado con Python 3 pero obsoleto en Python 3.6 porque tenía problemas (sin mencionar el nombre confuso). En Python 3.6+, el equivalente exacto es python3 -m venv.

  • venv es un paquete enviado con Python 3, que puede ejecutar usando python3 -m venv (aunque por alguna razón algunas distribuciones lo separan en un paquete de distribución separado, como python3-venv en Ubuntu / Debian). Tiene el mismo propósito que virtualenv, pero solo tiene un subconjunto de sus características (vea una comparación aquí). virtualenv sigue siendo más popular que venv, especialmente porque el primero es compatible con Python 2 y 3.

Recomendación para principiantes:

Esta es mi recomendación personal para principiantes: comience por aprender virtualenv y pip, herramientas que funcionan con Python 2 y 3 y en una variedad de situaciones, y elige otras herramientas una vez que empiezas a necesitarlas.

Simplemente evitaría el uso de virtualenv después de Python3.3 + y en su lugar use la biblioteca estándar enviada venv. Para crear un nuevo entorno virtual, escribiría:

$ python3 -m venv   

virtualenv intenta copiar el binario de Python en el directorio bin del entorno virtual. Sin embargo, no actualiza los enlaces de archivos de biblioteca incrustados en ese binario, por lo que si crea Python desde la fuente en un directorio que no es del sistema con nombres de ruta relativos, el binario de Python se rompe. Dado que así es como se hace una copia de Python distribuible, es un gran defecto. Por cierto, para inspeccionar los enlaces de archivos de biblioteca incrustados en OS X, utilice otool. Por ejemplo, desde dentro de su entorno virtual, escriba:

$ otool -L bin/python
python:
    @executable_path/../Python (compatibility version 3.4.0, current version 3.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)

Consecuentemente evitaría virtualenvwrapper y pipenv. pyvenv es obsoleto. pyenv parece usarse a menudo donde virtualenv se usa, pero me mantendría alejado de él también ya que creo venv también hace lo que pyenv está construido para.

venv crea entornos virtuales en el shell que son Fresco y en caja de arena, con bibliotecas instalables por el usuario, y es caja fuerte multi-python. Fresco Debido a que los entornos virtuales solo comienzan con las bibliotecas estándar que se envían con Python, debe instalar cualquier otra biblioteca nuevamente con pip install mientras el entorno virtual está activo. Sandboxed debido a que ninguna de estas nuevas instalaciones de bibliotecas es visible fuera del entorno virtual, por lo que puede eliminar todo el entorno y comenzar de nuevo sin preocuparse por afectar su instalación base de Python. Bibliotecas instalables por el usuario porque la carpeta de destino del entorno virtual se crea sin sudo en algún directorio que ya posee, por lo que no necesitará sudo permisos para instalar bibliotecas en él. Finalmente es caja fuerte multi-python, ya que cuando se activan los entornos virtuales, el shell solo ve la versión de Python (3.4, 3.5, etc.) que se utilizó para construir ese entorno virtual.

pyenv es parecido a venv ya que le permite administrar múltiples entornos de Python. Sin embargo con pyenv no puede revertir convenientemente las instalaciones de la biblioteca a algún estado de inicio y es probable que necesite admin privilegios en algún momento para actualizar bibliotecas. Así que creo que también es mejor usar venv.

En los últimos años, he encontrado muchos problemas en los sistemas de compilación (paquetes emacs, creadores de aplicaciones independientes de Python, instaladores …) que, en última instancia, se reducen a problemas con virtualenv. Creo que Python será una mejor plataforma cuando eliminemos esta opción adicional y solo usemos venv.

EDITAR: Tweet del BDFL,

Yo uso venv (en stdlib) y un montón de alias de shell para cambiar rápidamente.

– Guido van Rossum (@gvanrossum) 22 de octubre de 2020

ACTUALIZACIÓN 20200825:

Agregado debajo “Conclusión“párrafo

He bajado el pipenv madriguera del conejo (es un agujero profundo y oscuro de hecho …) y ya que la última respuesta es de hace más de 2 años, consideró que era útil actualizar la discusión con los últimos desarrollos sobre el tema de los sobres virtuales de Python que he encontrado.

DESCARGO DE RESPONSABILIDAD:

Esta respuesta es NO sobre continuar el debate furioso sobre los méritos de pipenvversusvenv como soluciones envolventes No acepto ninguno de los dos. Se trata de PyPA respaldando estándares en conflicto y cómo el desarrollo futuro de virtualenv promete negar hacer un Cualquiera o elección entre ellos en absoluto. Me concentré en estas dos herramientas precisamente porque son las ungidas por PyPA.

venv

Como señala el OP, venv es una herramienta para virtualizar entornos. NO una solución de terceros, pero una herramienta nativa. PyPA respalda venv Para crear SOBRES VIRTUALES: “Modificado en la versión 3.5: ahora se recomienda el uso de venv para crear entornos virtuales”.

pipenv

pipenv– igual que venv – se puede utilizar para crear sobres virtuales, pero además se incorpora la función de gestión de paquetes y comprobación de vulnerabilidades. En lugar de usar requirements.txt, pipenv ofrece gestión de paquetes a través de Pipfile. Como PyPA respalda pipenv para GESTIÓN DE PAQUETES, eso parecería implicar pipfile es suplantar requirements.txt.

SIN EMBARGO: pipenv usos virtualenv como su herramienta para crear sobres virtuales, NOvenv que está respaldado por PyPA como la herramienta de referencia para crear sobres virtuales.

Estándares en conflicto:

Entonces, si decidirse por una solución de envolvente virtual no fue lo suficientemente difícil, ahora tenemos PyPA respaldando dos herramientas diferentes que utilizan diferentes soluciones de envolvente virtual. El furioso debate de Github sobre venv vs virtualenv que destaca este conflicto se puede encontrar aquí.

La resolución de conflictos:

El debate de Github al que se hace referencia en el enlace anterior ha dirigido virtualenv desarrollo en la dirección de acomodar venv en futuras versiones:

Prefiero venv incorporado: si el python de destino tiene venv, crearemos el entorno con eso (y luego realizaremos operaciones posteriores para facilitar otras garantías que ofrecemos)

Conclusión:

Por lo tanto, parece que habrá una convergencia futura entre las dos soluciones de envolvente virtual rivales, pero a partir de ahora pipenv– que usa virtualenv – varía materialmente de venv.

Dados los problemas pipenv resuelve y el hecho de que PyPA ha dado su bendición, aparece tener un futuro brillante. Y si virtualenv cumple sus objetivos de desarrollo propuestos, elegir una solución de envolvente virtual ya no debería ser una caso de cualquiera pipenv O venv.

Actualización 20200825:

Una crítica a menudo repetida de Pipenv Vi al producir este análisis que no se mantenía activamente. De hecho, ¿cuál es el punto de utilizar una solución cuyo futuro podría verse cuestionable debido a la falta de desarrollo continuo? Después de un período de sequía de aproximadamente 18 meses, Pipenv una vez más se está desarrollando activamente. De hecho, desde entonces se han publicado actualizaciones importantes y materiales.

Aquí tienes las reseñas y valoraciones

Acuérdate de que te damos el privilegio decir si tropezaste tu conflicto .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *