Simplemente evitaría el uso de virtualenv
después de Python3.3 + y en su lugar usaría la biblioteca estándar enviada venv
. Para crear un nuevo entorno virtual, escribiría:
$ python3 -m venv <MYVENV>
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, use otool
. Por ejemplo, desde 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)
En consecuencia, evitaría virtualenvwrapper
y pipenv
. pyvenv
es obsoleto. pyenv
Parece que se usa a menudo donde virtualenv
se usa, pero también me mantendría alejado de él, ya que creo que venv
también hace para lo que pyenv
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 biblioteca pip 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 a venv
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 necesite admin
privilegios en algún momento para actualizar las bibliotecas. Así que creo que también es mejor usarlo venv
.
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 usemos venv
.