Django Deployment 3: Virtualenv, virtualenvwrapper, pip

En el post anterior mostré como organizo cada uno de mis proyectos en django. En este post explicaré como instalar virtualenv, virtualenvwrapper y como uso pip y el file de requirements.txt para crear ambientes en mi sistema local y en el servidor de producción.

Para instalar virtualenv

$sudo easy_install virtualenv

Una vez instalado virtualenv es buena idea instalar virtualenvwrapper. Esta herramienta hace mucho mas facil utilizar virtualenv.

$sudo easy_install virtualenvwrapper

Ahora queda configurar virtualenvwrapper. Es necesario editar tu archivo ~/.bash_profile (en Mac OS X). Debes añadir dos lineas.

Primero una linea diciendo donde deben estar guardados todos tus ambientes virtuales. Es importante entender que los ambientes virtuales pueden estar guardados en cualquier parte de tu sistema y no tienen que estar en la misma carpeta del proyecto.

Por ejemplo un proyecto llamado pony_site lo guardaría en:

~/Projects/pony_website

y guardo el ambiente virtual en:

~/.virtualenvs/ponywebsite.example.com

Los próximos ejemplos son basado en estas preferencias. Así que ahora lo que debemos hacer es crear nuestro folder para guardar los ambientes virtuales

$cd ~

$mkdir .virtualenvs

Ahora añade estas lineas a tu ~/.bash_profile

vi ~/.bash_profile

export WORKON_HOME=$HOME/.virtualenvs

source /usr/local/bin/virtualenvwrapper.sh

Ahora cierra a abre nuevamente el Terminal para que tome los cambios.

Virtualenv

Cada proyecto que trabajo tiene su propio ambiente virtual. Para crear un ambiente

$mkvirtualenv ponysite.example.com –no-site-packages

esto crea la carpeta ~/.virtualenvs/ponysite.example.com y la opción –no-site-packages le dice a virtualenv que este ambiente no debe tener ninguna dependencia de los packages instalados a nivel de sistema. En otras palabras que se auto suficiente.

Ya que tenemos creado este ambiente podemos comenzar a usarlo haciendo:

$workon ponysite.example.com

Si te das cuenta ahora el “prompt” dice:

(ponysite.example.com)$

esto es para que estés consciente que estas usando un ambiente virtual. Para estar seguro que estas usando el ambiente virtual escribe:

(ponysite.example.com)$which python

esto debe contestar con ~/.virtualenvs/ponysite.example.com/bin/python. Si es así todo está bien.

Ahora como virtualenvwrapper convirtió a este ambiente virtual en el ambiente de python activo, este no tiene todo lo que necesitamos para trabajar una aplicación de django. Pero si tiene instalado easy_install y pip, ambos sistemas de instalación de modulos para python. En mi caso prefiero usar pip porque me permite tener un archivo de texto donde puedo definir los paquetes que necesita mi ambiente virtual.

Así que ahora puedo hacer referencia al archivo requirements.txt para instalar todo lo que necesito. Mi archivo requirements.txt base tiene solo dos lineas.


Para usar este archivo hacemos (en una sola linea)

(ponysite.example.com)$pip install ponysite.example.com -r ~/Projects/pony_site/requirements/requirements.txt

Esto se encarga de instalar los requisitos en el ambiente ponysite.example.com. Ya acabamos. Es importante recordar que siempre que se quiera trabajar en un proyecto debemos hacer el comando de $workon <virtualenv name> para que estemos usando los recursos de ese virtualenv. Una vez terminamos y no queremos usar más es ambiente hacemos:

(ponysite.example.com)$deactivate

$

y nuestro “prompt” y el PYTHONPATH vuelven a su estado normal.

En el próximo post voy a discutir como tengo organizado mi server de producción para hacer deployments de django usando mod_wsgi, virtualenv y pip.

<<Django Deployment 1: Instalación de mod_wsgi

<<Django Deployment 2: Organización de Archivos

Django Deployment 4: Server>>