Cómo crear un entorno de desarrollo Django en Ubuntu con Virtualenv

Una de las mayores dificultades a la hora de manejar varios proyectos en Django, es el tema de las versiones de los paquetes. El caso de Django (especialmente si todavía tenemos conviviendo proyectos en python2 con otros en python3) es particularmente especial porque por algún motivo las nuevas versiones muchas veces no guardan demasiado bien la compatibilidad hacia atrás. Por eso, nos tenemos que replicar las mismas versiones de las librerías de Python que tenemos en producción en nuestro entorno de desarrollo.

Obviamente, manejar varias versiones de los paquetes de Python no tiene sentido si utilizamos el entorno instalado en el sistema operativo. Tenemos que recurrir a alguna forma de virtualización. Sólo así podremos tener varias versiones de una misma librería funcionando a la vez en nuestro entorno de desarrollo conviviendo en nuestro portátil de trabajo.

La solución utilizada en Python pasa por crear entornos virtuales a través de "Virtualenv". El concepto de la utilidad virtualenv es tan simple como poderoso. Nos permite crear distintos espacios virtuales cada uno con sus propias versiones de los paquetes. De este modo, podemos utilizar entornos virtuales concretos para cada uno de nuestros proyectos.

Instalar Virtualenv

Instalar virtualenv en nuestro sistema es tan fácil como recurrir al gestor de paquetes de nuestra distribución. En mi caso, que es Ubuntu, haría:

sudo apt-get install virtualenv python-virtualenv

También es posible instalar Virtualenv utilizando PIP:

sudo pip install virtualenv

Una vez instalada esta utilidad, lo que puedes hacer es crearte una carpeta para guardar todos tus entornos virtuales. Por ejemplo:

mkdir entornos_virtuales

Ahora, entramos en esa carpeta y creamos nuestro primer entorno virtual:

cd entornos_virtuales
virtualenv mi_primer_entorno

Trabajando con Virtualenv

Vamos a proceder a instalar las versiones de los paquetes que tenemos instalados en nuestro servidor de producción, en el entorno virtual que acabamos de crear:

Vamos a hacerlo con Django: si entramos en nuestro servidor de producción, podemos ver qué versión tenemos instalada

sergio@produccion:~$ python
Python 2.7.12 (default, Jul 18 2016, 15:02:52) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(1, 8, 7, 'final', 0)

Aquí podemos ver que la versión que necesitamos tener en nuestro entorno virtual es la 1.8.7. Pues bien, tan sólo tendremos que instalarla en él así:

Ahora vamos a entrar en nuestro entorno virtual recién creado:
cd mi_primer_entorno
source bin/activate # activamos el entorno
pip install Django==1.8.7 # install django 1.8.7

Ahora podemos comprobar que se ha instalado correctamente:

python  
import django
django.get_version() # you should get '1.3.0 final' 
quit()

Salir del entorno virtual y dar de baja

Si estamos dentro de un entorno virtual, podemos salir de él así:

deactivate

Y si queremos eliminar un entorno virtual, la orden es la siguiente:

rm -r ./bin && virtualenv --clear