¿qué es virtualenv? Virtualenv es una herramienta que nos permite realizar entornos python aislados. Imagine que tiene una aplicación que necesita la versión 2 de una biblioteca, pero otra aplicación requiere la versión 3. ¿Cómo puede utilizar y desarrollar ambas aplicaciones?
Si instala todo en /usr/lib/python2.7/site-packages (o cualquiera que sea la ubicación estándar de su plataforma), es fácil terminar en una situación en la que involuntariamente actualice un paquete.
En otro caso, imagina que tienes una aplicación que está completamente desarrollada y no quieres hacer ningún cambio en las bibliotecas que está usando, pero al mismo tiempo comienzas a desarrollar otra aplicación que requiere las versiones actualizadas de esas bibliotecas.
¿Qué harás? ¡Usa virtualenv! Crea entornos aislados para su aplicación de Python y esto nos permitirá instalar bibliotecas de Python en ese entorno aislado en lugar de instalarlas globalmente.
Para instalarlo, simplemente escriba este comando en el shell:
$ pip install virtualenv
Los comandos más importantes son:
$ virtualenv myproject
$ source myproject/bin/activat
Este primero crea un entorno virtualenv aislado en la carpeta myproject y el segundo comando activa ese entorno aislado.
Mientras crea el virtualenv, debe tomar una decisión. ¿Quiere que este virtualenv use paquetes de los paquetes de sitio de su sistema o los instale en los paquetes de sitio del virtualenv? De forma predeterminada, virtualenv no dará acceso a los paquetes globales del sitio.
Si desea que virtualenv tenga acceso a los paquetes de sistema, tenemos que activar --system-site-packages al crear su virtualenv de esta manera:
$ virtualenv --system-site-packages mycoolproject
Y Virtualenv se puede desactivar con :
$ deactivate
Ejecutar Python después de la desactivación usará la instalación de Python del sistema.
Puede usar smartcd, que es una biblioteca para bash y zsh y le permite alterar su entorno bash (o zsh) mientras hace cd. Puede ser muy útil activar y desactivar un virtualenv cuando cambia de directorio.