¿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.
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:
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:
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
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