tecnologia

Cuando comencé (hace muy poco) a programar en Python, una de las cosas que más me atrajo fue la facilidad para crear entornos virtuales que me permitan mantener separados los proyectos, las dependencias de cada uno y sus correspondientes versiones. Esto me permitió jugar en cada proyecto con módulos específicos sin necesidad de estar instalándolos en todo el sistema. Y lo más divertido de todo: tenerlo configurado y andando toma menos de cinco minutos.

Es muy probable que casi todos los pythoneros conozcan virtualenv que es justamente la herramienta para crear los entornos virtuales. Lo que no estoy muy seguro, sobre todo viendo a un avezado developer como @DiegoRam, es que todos conozcan otra herramienta que le da esteroides a virtualenv y que se llama virtualenvwrapper.

Como todavía no tengo claro cual es el umbral de aburrimiento del público que lee mi blog, voy a asumir que es bajo y saltándome la parte pesada, voy a explicar como tener entornos virtuales con esteroides en exactamente 5 pasos.

Paso 1: Instalar virtualenv y virtualenvwrapper

Esto va a instalar ambas herramientas para que las tengamos disponibles a nivel sistema. Facílisimo, ni siquiera debería gastar un paso en esto(?):

[~] (sudo) pip install virtualenv
      ...
 [~] (sudo) pip install virtualenvwrapper

Paso 2: Configurar el directorio de entornos

Todos los entornos virtuales se van a alojar en un solo directorio y eso nos va a permitir crearlos, copiarlos, renombrarlos y borrarlos con suma facilidad… un paso adelante para la organización compulsiva. Creamos entonces un directorio llamado envs en nuestro directorio de trabajo (o en cualquier sitio que nos quede cómodo, yo elijo ponerlo dentro de mi directorio webdev).

Noten que el nombre envs es arbitrario, puede ser cualquiera que elijan.

[~/webdev] mkdir envs

Luego de crearlo, agregan las siguientes líneas a su archivo .bash_profile

export WORKON_HOME='~/webdev/envs' 
 export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python2.7
 export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'
 export PIP_VIRTUALENV_BASE=$WORKON_HOME
 export PIP_RESPECT_VIRTUALENV=true
 if [[ -r /usr/local/share/python/virtualenvwrapper.sh ]]; then
    source /usr/local/share/python/virtualenvwrapper.sh
 else
    echo "WARNING: Can't find virtualenvwrapper.sh"
 fi

Y finalmente desde la consola:

[~] source ~/.bash_profile

Paso 3: Crear y configurar un entorno virtual

Acá es donde se pone divertido. Simplemente escribimos el comando mkvirtualenv seguido del nombre que querramos darle al proyecto para crear un entorno virtual. Y no importa donde estemos parados en la consola, podemos hacerlo desde cualquier directorio que se va a ubicar correctamente en nuestro directorio envs.

[~/desktop] mkvirtualenv projectenv

Una vez creado, el entorno virtual se activa automáticamente. Se van a dar cuenta porque delante del prompt aparece el nombre del entorno entre paréntesis

(projectenv)[~/desktop]

Y si ejecutamos cdvirtualenv nos posiciona en el directorio del entorno para que podamos ver su contenido.

(projectenv)[~/desktop] cdvirtualenv
 (projectenv)[~/webdev/envs/projectenv] ls
  drwxr-xr-x  18 Max  staff   612B Aug 28 05:08 bin/
  drwxr-xr-x   3 Max  staff   102B Aug 28 05:08 include/
  drwxr-xr-x   3 Max  staff   102B Aug 28 05:08 lib/
 (projectenv)[~/webdev/envs/projectenv]

Todo lo que instalemos con pip o easy_install dentro del entorno, quedará disponible y limitado solo a éste entorno y no a nivel sistema. Bueno, eso es lo que queríamos, no? Para salir del entorno virtual y volver al mundo real (?) simplemente escribimos deactivate y vemos como desaparece el nombre del entorno entre paréntesis delante del prompt.

(projectenv)[~/webdev/envs/projectenv] deactivate
 [~/webdev/envs/projectenv]

Paso 4: Enlazar el directorio de trabajo

Ahora viene lo interesante: vamos a enlazar nuestro directorio de trabajo al entorno virtual para referenciar un proyecto a sus módulos y dependencias. Para eso, primero activamos el entorno con workon

[~] workon projectenv
 (projectenv)[~]

Una vez activado, nos movemos al directorio del proyecto (no del entorno!). Si aún no lo tenemos… bueno, lo creamos

(projectenv)[~] cd ~/webdev/projects
 (projectenv)[~/webdev/projects] mkdir projectdir
 (projectenv)[~/webdev/projects] cd projectdir
 (projectenv)[~/webdev/projects/projectdir]

Nota: yo llamé projectenv al entorno y projectdir al directorio del proyecto para que se diferencien bien en el ejemplo, pero la realidada es que pueden (y seguramente encuentren más conveniente) llamarlos de la misma manera.

Una vez dentro del directorio del proyecto, creamos el enlace con setvirtualenvproject:

(projectenv)[~/webdev/projects/projectdir] setvirtualenvproject

Listo el pollo, ya tenemos el proyecto enlazado al entorno virtual, y la proxima vez que lo activemos nos va mover directamente al directorio de trabajo:

[~/desktop] workon projectenv
 (projectenv)[~/webdev/projects/projectdir]

Paso 5: Buenas y malas noticias

Las buenas son que no hay un Paso 5. Pueden pensar que ya está todo up and running y para la mayor parte de los proyectos con esto es suficiente. Pero si son talibanes de la referencia y el conocimiento, les conviene leer la documentación porque hay muchos otros comandos útiles para virtualenv y virtualenvwrapper. Además, les voy a dejar como yapa dos excelente screencasts de Tuts+ que explican todo paso a paso en media hora. Si se les complica seguir lo que escribí en este post, les recomiendo que vean los videos porque son APB… a prueba de bloggers ;)

virtualenv

https://pypi.python.org/pypi/virtualenv

virtualenvwrapper

http://virtualenvwrapper.readthedocs.org/en/latest/

comments powered by Disqus