Python 3.3 incluye en su biblioteca estándar el nuevo paquete venv
. ¿Qué hace y cómo difiere de todos los otros paquetes que parecen coincidir con la expresión regular (py)?(v|virtual|pip)?env
?
1028
Python 3.3 incluye en su biblioteca estándar el nuevo paquete venv
. ¿Qué hace y cómo difiere de todos los otros paquetes que parecen coincidir con la expresión regular (py)?(v|virtual|pip)?env
?
virtualenv
ypyenv
no realizan la misma función, y no son alternativas entre sí. Mira mi respuesta.Respuestas:
Paquetes PyPI que no están en la biblioteca estándar:
virtualenv
es una herramienta muy popular que crea entornos aislados de Python para bibliotecas de Python. Si no está familiarizado con esta herramienta, le recomiendo que la aprenda, ya que es una herramienta muy útil, y haré comparaciones con ella para el resto de esta respuesta.Funciona instalando un grupo de archivos en un directorio (por ejemplo:)
env/
, y luego modificando laPATH
variable de entorno para prefijarlo con unbin
directorio personalizado (por ejemplo:)env/bin/
. Se coloca una copia exacta delpython
opython3
binario en este directorio, pero Python está programado para buscar bibliotecas en relación con su ruta primero, en el directorio del entorno. No es parte de la biblioteca estándar de Python, pero es bendecida oficialmente por PyPA (Python Packaging Authority). Una vez activado, puede instalar paquetes en el entorno virtual mediantepip
.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 laPATH
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 según laPYENV_VERSION
variable de entorno, o el.python-version
archivo o el~/.pyenv/version
archivo.pyenv
También facilita el proceso de descarga e instalación de múltiples versiones de Python, utilizando el comandopyenv install
.pyenv-virtualenv
es un complemento parapyenv
el mismo autor quepyenv
, para permitirle usarpyenv
yvirtualenv
al mismo tiempo convenientemente. Sin embargo, si está utilizando Python 3.3 o posterior,pyenv-virtualenv
intentará ejecutarlopython -m venv
si está disponible, en lugar de hacerlovirtualenv
. Puede usarvirtualenv
ypyenv
juntos sinpyenv-virtualenv
, si no desea las funciones de conveniencia.virtualenvwrapper
es un conjunto de extensiones paravirtualenv
(ver documentos ). Le da comandos comomkvirtualenv
,lssitepackages
y especialmenteworkon
para cambiar entre diferentesvirtualenv
directorios. Esta herramienta es especialmente útil si desea múltiplesvirtualenv
directorios.pyenv-virtualenvwrapper
es un plugin parapyenv
el mismo autor quepyenv
, para integrar convenientementevirtualenvwrapper
enpyenv
.pipenv
pretende combinarPipfile
,pip
yvirtualenv
en un comando en la línea de comandos. Elvirtualenv
directorio generalmente se coloca en~/.local/share/virtualenvs/XXX
,XXX
siendo un hash de la ruta del directorio del proyecto. Esto es diferente devirtualenv
, donde el directorio está típicamente en el directorio de trabajo actual.pipenv
está destinado a usarse al desarrollar aplicaciones de Python (a diferencia de las bibliotecas). Hay alternativas apipenv
, comopoetry
, que no enumeraré aquí, ya que esta pregunta es solo sobre los paquetes que tienen nombres similares.Biblioteca estándar:
pyvenv
es un script enviado con Python 3 pero desaprobado en Python 3.6 ya que tenía problemas (sin mencionar el nombre confuso). En Python 3.6+, el equivalente exacto espython3 -m venv
.venv
es un paquete enviado con Python 3, que puede ejecutar usandopython3 -m venv
(aunque por alguna razón algunas distribuciones lo separan en un paquete de distribución separado, comopython3-venv
en Ubuntu / Debian). Sirve para el mismo propósitovirtualenv
, pero solo tiene un subconjunto de sus características ( vea una comparación aquí ).virtualenv
sigue siendo más popular quevenv
, 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
ypip
, herramientas que funcionan con Python 2 y 3 y en una variedad de situaciones, y elija otras herramientas una vez que comience a necesitarlas.fuente
venv
realmente resolvió ese problema?venv
te permite actualizar a una nueva versión de Python más fácilmente.Simplemente evitaría el uso de
virtualenv
después de Python3.3 + y en su lugar usaría la biblioteca estándar enviadavenv
. Para crear un nuevo entorno virtual, escribiría:virtualenv
intenta copiar el binario de Python en el directorio bin del entorno virtual. Sin embargo, no actualiza los enlaces de archivos de la biblioteca incrustados en ese binario, por lo que si construye Python desde la fuente en un directorio que no sea del sistema con nombres de ruta relativos, el binario de Python se rompe. Como así es como se hace una copia distribuible de Python, es un gran defecto. Por cierto, para inspeccionar enlaces de archivos de biblioteca incrustados en OS X, useotool
. Por ejemplo, desde su entorno virtual, escriba:En consecuencia, evitaría
virtualenvwrapper
ypipenv
.pyvenv
es obsoleto.pyenv
Parece que se usa a menudo dondevirtualenv
se usa, pero también me mantendría alejado de él, ya que creo quevenv
también hace para lo quepyenv
está diseñado.venv
crea entornos virtuales en el shell que son frescos y de espacio aislado , con bibliotecas instalables por el usuario , y es seguro para múltiples python . Fresco porque los entornos virtuales solo comienzan con las bibliotecas estándar que se envían con python, debe instalar nuevamente cualquier otra bibliotecapip install
mientras el entorno virtual esté activo. Sandboxed porque ninguna de estas nuevas instalaciones de la biblioteca es visible fuera del entorno virtual, por lo que puede eliminar todo el entorno y comenzar de nuevo sin preocuparse por afectar la instalación de Python base. Bibliotecas instalables por el usuario porque la carpeta de destino del entorno virtual se crea sinsudo
en algún directorio que ya posee, por lo que no necesitarásudo
permisos para instalar bibliotecas en él. Finalmente, es seguro para múltiples python , ya que cuando se activan 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 similar avenv
que le permite administrar múltiples entornos de Python. Sin embargo,pyenv
no puede revertir cómodamente las instalaciones de la biblioteca a algún estado de inicio y es probable que necesiteadmin
privilegios en algún momento para actualizar las bibliotecas. Así que creo que también es mejor usarlovenv
.En los últimos años, he encontrado muchos problemas en los sistemas de compilación (paquetes de emacs, constructores de aplicaciones independientes de Python, instaladores ...) que finalmente tienen problemas
virtualenv
. Creo que Python será una mejor plataforma cuando eliminemos esta opción adicional y solo la usemosvenv
.fuente
add2virtualenv
modifica suPYTHONPATH
agregando un_virtualenv_path_extensions.pth
archivo personalizado debajosite-packages
. Alternativamente, puede actualizar laPYTHONPATH
variable de entorno en elbin/activate
archivo al que llama cada vez que activa el entorno virtual. O puede agregar enlaces simbólicos debajosite-packages
para señalar los directorios adicionales. Ambas alternativas son más transparentes a las herramientas de línea de comandos tradicionales que los desarrolladores utilizan ampliamente para solucionar problemas. El uso de una costumbre.pth
con un nombre indocumentado, hace que parezca más IMO mágico.PYTHONPATH
elimina la necesidad de hacerloadd2virtualenv
. Con respecto a la falta de ayuda en SO desde su primer comentario, mi única sugerencia es que vote de manera positiva si solucionan su problema, para motivar a las personas a que lo solucionen cuando publica ¿Media hora de investigación + redacción a cambio de un clic del mouse? Suena como un buen intercambio ...pyvenv
que está en desuso, nopyenv
. Es muy fácil confundirse con los nombres de estas herramientas.He bajado por la
pipenv
madriguera del conejo (de hecho es una madriguera profunda y oscura ... ) y desde que la última respuesta fue hace más de 2 años , sentí que era útil actualizar la discusión con los últimos desarrollos sobre el tema de sobres virtuales de Python I Lo he encontrado.DESCARGO DE RESPONSABILIDAD:
Esta respuesta es NO sobre la continuación de la discusión que rabia sobre los méritos de pipenv frente Venv como sobre soluciones- me hacen ningún endoso de cualquiera . Se trata de que PyPA respalde estándares conflictivos y de cómo el desarrollo futuro de virtualenv promete negar la elección de uno u otro. 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 es una solución de terceros, sino 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 , al igual que venv , se puede usar para crear sobres virtuales, pero adicionalmente incluye la administración de paquetes y lafuncionalidad de comprobación de vulnerabilidades . En lugar de usar
requirements.txt
,pipenv
ofrece administración de paquetes a través de Pipfile . Como PyPA respalda pipenv para la GESTIÓN DE PAQUETES , eso parece implicar quepipfile
es suplantarrequirements.txt
.SIN EMBARGO : pipenv usa virtualenv como su herramienta para crear sobres virtuales, NO venv, que está respaldado por PyPA como la herramienta de para crear sobres virtuales.
Estándares en conflicto:
Entonces, si decidirse por una solución de sobre virtual no fue lo suficientemente difícil, ahora tenemos PyPA que respalda dos herramientas diferentes que usan diferentes soluciones de sobre 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 el desarrollo virtualenv en la dirección de acomodar venv en futuras versiones :
Conclusión:
Por lo tanto, parece que habrá una convergencia futura entre las dos soluciones de envoltura virtual rivales, pero a partir de ahora pipenv , que utiliza
virtualenv
, varía materialmentevenv
.Dados los problemas que resuelve pipenv y el hecho de que PyPA ha dado su bendición, parece tener un futuro brillante. Y si virtualenv cumple con los objetivos de desarrollo propuestos, elegir una solución de envolvente virtual ya no debería ser un caso de pipenv O venv .
fuente
Actualización de abril de 2020
Estaba buscando lo mismo cuando me encontré con esta publicación . Creo que este problema de qué herramienta usar es bastante confuso y difícil para los nuevos usuarios de Python como yo. Esto es directamente desde el sitio web de PyPA con respecto a pipenv:
fuente
pipenv
equipo ha lanzado 2 versiones a PyPI:2020.5.28
y, más recientemente,2020.6.2
: pypi.org/project/pipenv/#history