Aislándonos con VirtualEnv

Cuando se trabaja con Python, ya sea programando o usando un programa hecho en dicho lenguaje, puede encontrarse uno con ciertos problemas si no se aísla uno del sistema. Esto puede que suene un poco raro, pero, ¿cuantas horas habéis perdido al actualizar el sistema, actualización que cambiase la versión de python?

Es típico que al actualizar la versión del intérprete se nos rompan proyectos hechos con versiones anteriores; o al desplegarlos en otra máquina, que tenga diferentes versiones del intérprete o librerías. Bueno, pues hay maneras de evitar estos problemas, la que os voy a explicar se llama VirtualEnv.

VirtualEnv (código - documentación) nos permite crearnos un entorno aislado del sistema, en donde podemos tener el control de las versiones de python y de las librerías que usemos. Pero para usarlo necesitamos primero python, entonces, ¿qué era primero, el huevo o la gallina? Pues primero python, después virtualenv.

No debemos usar el python del sistema para correr virtualenv, porque entonces no hemos ganado nada. Así que lo que toca es ir al sitio web de python (http://www.python.org/) y descargarnos la versión concreta de python que queramos, y la compilamos (configure, make, make install).

Para compilar python hay que tener en cuenta varias cosas, la primera es que deberíamos tener instaladas en nuestro sistema una serie de librerías, y la otra es que no vamos a ejecutar ningún paso como root.

Hay una serie de librerías que conviene tener instaladas para evitar que el python resultante esté cojo, si python no encuentra una serie de librerías al compilarse carece de una serie de funcionalidades. Si la versión que compiláis es una 2.6 o superior entonces después del configure avisa. Las librerías que necesitáis son ssl, zip, bzip2, readline, etc.

No voy a explicar como compilar un python, pero sí recordad que cuando hagáis el configure no os olvidéis de poner la opción --prefix=/home/usuario/ruta_destino para que os lo instale después en el make install en vuestro home.

El python que acabamos de compilar es el que vamos a usar. Es posible reutilizar este python para otros proyectos que requieran de la misma versión, pero en ese caso hay que ser muy cuidadoso de no instalarle nada, y que quede siempre como recién instalado. De esta manera evitas que dependencias y librerías de varios proyectos se afecten entre sí.

Virtualenv es muy fácil de usar, una vez que tengamos compilado nuestro python sólo debemos hacer:

/ruta_al_python_compilado/bin/python virtualenv.py --no-site-packages nombre_entorno

Vayamos por partes. Lo primero es el intérprete de python, el que hemos compilado, no el del sistema. Lo segundo es el programa virtualenv que podéis conseguir en su forja (http://bitbucket.org/ianb/virtualenv). Lo tercero es una opción muy recomendable de virtualenv, y que significa que no busque librerías en el python que hemos usado para crear el entorno. Y por último el nombre del entorno aislado que vamos a crear.

¿Y qué hemos conseguido con todo esto? Pues hemos creado un entorno aislado para nuestro proyecto python, en dicho entorno no tendremos problemas de actualizaciones del intérprete, ni de parches aplicados a éste por la distribución que usemos, ni ningún conflicto de otro tipo. ¿Cómo lo usamos? Pues es bien fácil, lo primero es activar el entorno, para ello hacemos:

source entorno/bin/activate

Este comando nos activa el entorno y nos cambia las variables del sistema, el PATH, PYTHONPATH y demás. Ahora cuando ejecutemos python estaremos ejecutando el python del entorno, con las librerías del entorno y nada más. Este python permanecerá inmutable pese a actualizaciones del sistema, etc.

Para instalar dependencias podemos hacer uso de easy_install y pypi.

Con esto ya podéis desarrollar tranquilos en python :D

Para más técnicas y detalles del desarrollo con python no dejéis de leer este post del blog de lgs.

Show Comments