Tutorial de Python virtualenv

Serpiente pitón mascota del lenguaje Python Python por William Warby. CC BY. Imagen con calidad y tamaño reducidos.

Un 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 entorno virtual y la versión 1.3 en otro 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 virtualenv

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

Los siguientes comandos instalarán la utilidad virtualenv para las versiones 2 y 3 de Python.

# Debian o Ubuntu
$ sudo apt-get install python-virtualenv virtualenv

# Fedora
$ sudo dnf install python2-virtualenv python3-virtualenv

# CentOS
$ sudo yum install python-virtualenv python34-virtualenv

# Archlinux
$ sudo pacman -S python2-virtualenv python-virtualenv

También es posible instalar virtualenv utilizando el instalador de paquetes de Python pip:

# macOS con Homebrew
$ pip install virtualenv

# Debian, Ubuntu, Fedora
$ sudo pip install virtualenv

# Archlinux
$ sudo pip2 install virtualenv

Cómo crear un entorno virtual de Python con virtualenv

virtualenv con Python 3

Para crear un entorno virtual con Python 3, simplemente ejecutamos el comando virtualenv de la siguiente manera:

$ virtualenv env --python=python3

Python 3 debe estar instalado de antemano para poder crear el entorno virtual.

virtualenv con Python 2

Para crear un entorno virtual con Python 2, simplemente ejecutamos el comando virtualenv de la siguiente manera:

# Debian, Ubuntu, CentOS o Fedora
$ virtualenv env

# macOS con Homebrew, Archlinux
$ virtualenv env --python=python2

Lastimosamente, no es posible crear un entorno virtual que contenga las dos versiones de Python al mismo tiempo.

Estructura de un entorno virtual de Python

La ejecución de comandos anteriormente explicados crean el directorio env/ con la siguiente estructura:

env/
  bin/
  include/
  lib/
    site-packages/

En el directorio bin/ se encuentran los ejecutables necesarios para interactuar con el entorno virtual. En el directorio include/ se encuentran algunos archivos de cabecera de C (cuya extensión es *.h) necesarios para compilar algunas librerías de Python.

Finalmente, en el directorio lib/ se encuentra una copia de la instalación de Python así como un directorio llamado site-packages/ en donde se almacenan los paquetes Python instalados en el entorno virtual.

Cómo activar un entorno virtual de Python con virtualenv

Para activar un entorno virtual de Python, se ejecuta el script activate de virtualenv instalado en el directorio bin/:

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

El prompt de la terminal indica que el entorno virtual mi_proyecto está activado. Ya es posible utilizar los paquetes Python instalados en el entorno virtual así como instalar paquetes adicionales.

Cómo desactivar un entorno virtual de Python con virtualenv

Para desactivar un entorno virtual, porque se necesita trabajar en otro diferente, se ejecuta el comando deactivate de virtualenv. No es necesario ir al directorio del entorno virtual para realizar esta operación:

(env)$ deactivate
$

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

Cómo instalar paquetes en un entorno virtual de Python

Después de activarlo, lo único que resta es instalar los paquetes que sean necesarios usando el instalador de paquetes pip.

Al momento de crear un entorno virtual, la utilidad virtualenv instala de manera automática el ejecutable pip.

Por ejemplo, para instalar Django se ejecuta el siguiente comando:

(env)$ pip install Django

Notese que el prompt de la terminal indica que el entorno virtual env está activado de antemano.

¿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 entorno virtual. Una vez que el entorno virtual está activado, todas las librerías de Python que se instalen solo podrán ser usadas al activar ese entorno virtual específico.