Tutorial de Python virtualenv

Python Python por William Warby. CC BY. Imagen con calidad y tamaño reducidos.

Un virtualenv o entorno virtual de Python es un ambiente creado con el objetivo de aislar recursos como librerías y entorno de ejecución, del sistema principal o de otros entornos virtuales. Lo anterior significa que en el mismo sistema, maquina o computadora, es posible tener instaladas multiples versiones de una misma librería sin crear ningún tipo de conflicto.

Cuando se está desarrollando software con Python, es común utilizar diferentes versiones de un mismo paquete. Por ejemplo, imaginemos que se está desarrollando un videojuego con la versión 1.2 de Pygame y mientras eso pasa, se comienza el desarrollo de otro videojuego que necesita las nuevas características presentes en la versión 1.3.

En este escenario, no es posible para los desarrolladores eliminar la version 1.2 e instalar la 1.3 en sus computadoras. Así que el problema a solucionar radica en cómo instalar las dos versiones de la misma librería con el fin de poder desarrollar ambos proyectos de forma simultánea.

La solución consiste en crear entornos virtuales. De esta manera, es posible instalar la versión 1.2 de Pygame en un virtualenv y la versión 1.3 en otro virtualenv diferente o en el sistema principal sin problema alguno.

Para poder utilizar este simple pero poderoso concepto es necesario instalar una utilidad que permita gestionar la creación y utilización de dichos entornos virtuales llamada virtualenv.

Cómo instalar la utilidad virtualenv

Se puede instalar la utilidad virtualenv utilizando el gestor de paquetes de las distribuciones Linux:

Los comandos mostrados en este tutorial aplican para la versión 2.7 de Python.

# Archlinux
$ sudo pacman -S python2-virtualenv

# Fedora
$ sudo dnf install python-virtualenv

# Debian, Ubuntu
# (esta opción instalará Python 3 y Python 2.7)
$ sudo apt-get install virtualenv python-virtualenv

También es posible instalar virtualenv utilizando pip:

# Linux, OS X
$ sudo pip install virtualenv

# Archlinux
# (si pip fue instalado usando el gestor de paquetes)
$ sudo pip2 install virtualenv

Cómo crear un Python virtualenv

Para crear un virtualenv simplemente se ejecuta el siguiente comando desde una terminal:

# Linux, OS X
$ virtualenv mi_proyecto

# Archlinux
# (si virtualenv fue instalado usando el gestor de paquetes)
$ virtualenv2 mi_proyecto

Lo que crea el directorio mi_proyecto/ con la siguiente estructura.

mi_proyecto/
  bin/
  include/
  lib/

En el directorio bin/ se encuentran los ejecutables necesarios para interactuar con el virtualenv. En include/ se encuentran algunos archivos de cabecera de C (cuya extensión es *.h) necesarios para compilar algunas librerías de Python. Y finalmente en lib/ se encuentra una copia de Python así como un directorio llamado site-packages/ en el cual se almacenan los paquetes Python instalados en el virtualenv.

Cómo activar un Python virtualenv

Para activar un virtualenv o entorno virtual, se ejecuta el script activate que se encuentra en el directorio bin/ del virtualenv:

$ cd mi_proyecto
$ source bin/activate
(mi_proyecto)$

El prompt de la terminal indica que el virtualenv está activado. De esta manera ya es posible utilizar los paquetes Python instalados en el virtualenv mi_proyecto así como instalar paquetes adicionales.

Cómo desactivar un Python virtualenv

Para desactivar un virtualenv porque se necesita trabajar en otro diferente, se ejecuta el comando deactivate. No es necesario ir a la carpeta del virtualenv para realizar la operación:

(mi_proyecto)$ deactivate
$

El prompt de la terminal indica que el virtualenv ha sido desactivado con éxito.

Cómo instalar paquetes en un Python virtualenv

Después de activarlo, lo único que resta es instalar los paquetes que sean necesarios usando el ejecutable pip que viene por defecto en cada virtualenv creado.

Por ejemplo, si se desea instalar Django, se ejecuta el siguiente comando:

(mi_proyecto)$ pip install django

Notese que el prompt de la terminal indica que el virtualenv mi_proyecto ya está activado.

¿En qué directorio ubico el código fuente de mi proyecto?

La ubicación del código fuente del proyecto en el que se está trabajando no es importante. Puede ser colocado inclusive dentro del directorio del virtualenv. Una vez que el virtualenv está activado, todas las librerías de Python que se instalen solo podrán ser usadas al activar ese virtualenv específico.