Simplemente evitaría el uso de virtualenvdespué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>
virtualenvintenta 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 virtualenvwrappery pipenv. pyvenves obsoleto. pyenvParece que se usa a menudo donde virtualenvse usa, pero también me mantendría alejado de él, ya que creo que venvtambién hace para lo que pyenvestá diseñado.
venvcrea 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 installmientras 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 sinsudoen algún directorio que ya posee, por lo que no necesitará sudopermisos 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.
pyenves similar a venvque le permite administrar múltiples entornos de Python. Sin embargo, pyenvno puede revertir cómodamente las instalaciones de la biblioteca a algún estado de inicio y es probable que necesite adminprivilegios 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.