¿Cómo utilizar Entornos virtuales en Python?

May 5, 2021

Si estás iniciando con Python, uno de los conceptos a aprender son los entornos virtuales. Estos nos permiten tener nuestros paquetes o módulos aislados unos de otros, a medida que vamos trabajando en distintos proyectos. Pero, ¿por qué esto sería importante? Veamos un caso de ejemplo:

El problema

Asumiremos que estamos usando un sistema operativo Linux.

Imaginemos que tenemos un Proyecto1 que usa Django 1.8, además de otros paquetes, y tenemos que instalar en nuestra máquina esa versión en particular para poder trabajar en él. Para hacer esto podemos usar el administrador de paquetes pip de la siguiente manera:

$ pip install Django==1.8

Luego de hacer esto tendremos Django instalado y listo para trabajar. ¡Perfecto, no hay problemas entonces! Pero, ¿qué sucede si debemos trabajar en otro proyecto (Proyecto2) y este tiene como requerimientos Django 2.2? Lo primero que pensamos es usar pip e instalar esa versión:

$ pip install Django==2.2

Luego de correr este comando tenemos la versión 2.2 instalada de manera exitosa y podremos trabajar en este segundo proyecto. ¡Pero esperen! ¿Por qué me indica que desinstaló exitosamente Django-1.8? Esto sucede porque, en principio, pip usa la misma ruta de carpetas en un sistema operativo y, cuando nosotros cambiamos la versión de un paquete ya pre-instalado, este se actualizará. El grave problema de esto es que proyecto 1 seguramente no podrá ser ejecutado sin errores, ya que la versión que usará es la 2.2 en vez de la 1.8.

Solución: entornos virtuales

Actualmente la versión de python recomendada para trabajar es la versión 3. Con esta versión viene instalado el módulo venv con la librería estándar. 

> De ahora en adelante asumimos que la versión de python que usaremos es 3.x.-

En primer lugar debemos elegir una carpeta de nuestro sistema operativo para alojar el entorno virtual, ya que al usar el módulo venv, este creará una serie de archivos y carpetas nuevos. Supongamos entonces que elegimos una carpeta que llamaremos mis-entornos-virtuales, a esto lo podemos crear con el siguiente comando:

$ mkdir mis-entornos-virtuales

$ cd mis-entornos-virtuales

Luego de tener la carpeta, y posicionarnos dentro, crearemos nuestro primer entorno virtual. Para esto en la terminal escribiremos: 

$ python3 -m venv venv-proyecto1

Luego de presionar enter encontraremos una carpeta llamada venv-proyecto1, con una estructura muy similar a la siguiente:

Ahora bien, ¿cómo se usa este entorno virtual? Para eso ejecutaremos el siguiente comando en nuestra terminal:

$ source venv-proyecto1/bin/activate

Luego de esto notaremos que nuestro prompt cambió y nos indica que está usando el entorno virtual: (venv-proyecto1) $

Esto nos indica que de ahora en adelante, mientras tengamos el entorno activo, toda instalación de paquetes que hagamos usando el comando pip instalará dichos paquetes dentro de la carpeta correspondiente al entorno, y lo más importante, no afectará a otros entornos virtuales (incluso al sistema operativo).

Ese experimento lo podemos comprobar creando otro entorno para el proyecto-2, llamemoslo vev-proyecto2, activandolo en otra terminal e instalando las distintas versiones de Django en cada uno.

La siguiente imagen muestra un ejemplo:

En este ejemplo usamos un parámetro de pip llamado freeze.

Con esta introducción simple y rápida pudimos ver la utilidad de los entornos virtuales, cuando tenemos muchos proyectos en nuestro sistema operativo. Es muy común cuando estamos trabajando en desarrollo de software que tengamos múltiples proyectos y debamos ir cambiando entre ellos en el día a día.

Por Luciano Leves,
Python developer en GM2.