Entornos virtuales con Python

¿Te has encontrado alguna vez con problemas para instalar una librería adicional a tu instalación de Python? Generalmente estos problemas se deben a errores en las dependencias de los paquetes. El problema ocurre cuando quieres instalar una librería que necesita una versión específica de otra librería. Por ejemplo quieres instalar la versión 1.0 de Pandas y esta necesita la versión 2.0 de Numpy. Hasta aquí todo bien. El problema ocurre porque tienes instalada otra librería, por ejemplo tensorflow que requiere que la versión de Numpy sea la 2.1. Dado que no puedes tener las dos versiones a la vez, se produce el error y te tienes que encargar manualmente de elegir qué versiones quieres tener instaladas.

Este es el principal motivo por el que usaremos los entornos virtuales de Python. Existe otro motivo importante. Cuando queremos compartir nuestra aplicación, si la otra persona no tiene las mismas versiones de las librerías que nosotros, podrá tener problemas para ejecutar el código u obtendrá resultados erroneos. Con los entornos virtuales, le podremos enviar nuestra configuración y se instalarán en su sistema las mismas versiones de las librerías que estamos utilizando nosotros.

Gestores de entornos para Python

Los tres principales gestores de entornos para Python de los que vamos a hablar en este artículo son Conda, Venv y Pipenv.

Mi recomendación es utilizar Conda para usuarios principiantes. Para usuarios más avanzados recomiendo Venv o Pipenv. Hay bastante controversia entre cual de los dos es mejor, podemos encontrar artículos argumentando a favor de Venv y a favor de Pipenv.

Conda

Conda generalmente se instala junto con Anaconda, una distribución de Python que instala la mayoría de librerías necesarias para realizar proyectos de Data Science con Python. Es una distribución muy pesada que instala también muchos paquetes que no usaremos nunca.

Recomiendo utilizar Conda junto con Anaconda si es tu primera vez instalando Python y no sabes muy bien qué estás haciendo. Es una forma fácil de instalarlo, solo tendrás que ejecutar el instalador que encontrarás en la web de Anaconda y seguir los pasos.

Una vez instalado, ejecuta la terminal de Anaconda. Desde aquí podrás abrir python, jupyter notebook, jupyter lab y demás aplicaciones instaladas con Anaconda.

Icono de la terminal de anaconda

Desde la terminal también podrás gestionar los entornos de conda. Podrás ver los entornos que existen en tu sistema con este comando:

conda env list

Por defecto, si no has modificado nada tendrás un único entorno llamado base:

Listado de entornos de Anaconda

Ahora creamos un entorno nuevo:

conda create --name test_todoia

Si volvemos a ejecutar el comando anterior para ver la lista, veremos que aparece el nuevo entorno:

Listado de entornos de Anaconda

Por defecto en la terminal seguimos dentro del entorno base. Lo que queremos es utilizar el entorno que acabamos de crear. Para ello usamos este comando:

conda activate tests_todoia
activando un entorno de Anaconda

Ahora tenemos activo el entorno tests_todoia. Siempre aparece el entorno activo entre paréntesis al principio de cada línea en la terminal.

Dentro del nuevo entorno vamos a instalar un par de paquetes, Pandas y Numpy.

conda install pandas numpy

Una vez instalados los paquetes, veamos cómo compartir el entorno con otra persona para que tenga instaladas las mismas versiones de todas las librerías. Lo único que tendremos que hacer es compartir el archivo environment.yml. Lo generamos con este comando:

conda env export > environment.yml

Puedes ver el archivo exportado aquí. La persona a la que enviemos el entorno deberá instalarlo con este comando:

conda env create -f environment.yml

Y activarlo con el mismo comando que utilizamos nosotros:

conda activate tests_todoia

Por último veamos cómo eliminar el entorno. Primero debemos desactivarlo y volver al entorno base.

conda activate base
conda remove --name test_todoia --all

Venv

Venv viene instalado por defecto con Python desde la versión 3.3. Como no tenemos que instalar nada, empezamos creando el entorno. Deberemos tener la terminal abierta en la carpeta en la que guardamos el proyecto para tener los archivos relacionados con el entorno accesibles.

python -m venv tests_todoia

Activamos el entorno con:

Para Windows:
tests_todoia\Scripts\activate.bat

Para Linux y Mac:
source tests_todoia/bin/activate

Ahora podemos instalar paquetes con pip

pip install pandas numpy

Para compartir los paquetes instalados y sus versiones, generamos un archivo requirements.txt.

pip freeze > requirements.txt

Puedes ver el archivo generado aquí. A partir de este archivo cualquiera puede instalar las mismas versiones de las librerías:

pip install -r requirements.txt

Pipenv

Pipenv está creada en base a Venv. Sus principales ventajas son su facilidad de uso y que los archivos de dependencias que genera registran las versiones exactas de cada paquete.

Como se trata de una herramienta externa, hay que instalarlo:

pip install pipenv

Activamos el entorno virtual e instalamos pandas y numpy:

pipenv shell
pipenv install pandas numpy

Una vez instalados los paquetes, podemos bloquear el entorno. Esto generará la versión definitiva de Pipfile.lock

pipenv lock

Podemos compartir los archivos Pipfile y Pipfile.lock generados a otra persona para que al cargar el entorno, instale las versiones adecuadas de los paquetes con este comando:

pipenv install --ignore-pipfile

Albert Sanchez Lafuente

Estudié Ingenieria Industrial en la UPC. Continué mi formación en inteligencia artificial junto a la asociación Saturdays.AI de la que he formado parte del equipo de Barcelona desde sus inicios.