Ahora que ya sabes montar tu entorno de trabajo con Python basado en Miniconda, vamos a ver cómo puedes gestionar varios entornos en paralelo con Conda y cómo puedes gestionar las dependencias para poder recuperarlas con facilidad siempre que quieras.
¿Para qué podemos necesitar algo así?
Cuando trabajas con proyectos de IA lo habitual es que quieras usar la versión más reciente de los paquetes que necesites. Sin embargo, si trabajas con otros o rescatas un proyecto anterior, querrás usar versiones específicas, no solo de los paquetes sino de también del propio runtime de Python.
También, a veces, ciertos paquetes necesitan versiones concretas de Python o de ciertos paquetes, incluso más antiguas que la que está disponible en un momento dado.
Todo esto hace que gestionar todo en un solo entorno de Python o conda sea complicado y propenso a problemas.
Para solventar este problema están los entornos de conda. En este vídeo te explico de manera práctica cómo crearlos y gestionarlos:
Aquí te dejo las principales instrucciones que vemos en el vídeo para que las puedas tener a mano:
Cómo crear y activar entornos de conda
Por defecto conda crea un entorno que se llama base
, y que contiene la versión base de Python y los paquetes que necesita para funcionar todo bien.
Puedes ver los entornos que tienes creados en tu equipo con:
conda env list
Y podemos añadir un nuevo entorno con la instrucción:
conda create --name prueba
Esto crea un nuevo entorno llamado prueba
que está vacío y que utiliza la misma versión de Python que el entorno de base. No llega con crearlo, sino que tenemos que activarlo para poder usarlo, lo cual se hace con:
conda activate prueba
Si ahora listamos nuestros entornos veremos que antes del nuevo entorno aparece un asterisco *, esto indica que es el entorno activo sobre el que estamos trabajando.
Ahora mismo ya podríamos instalar paquetes de Python aquí, y quedarían instalados en este entorno sin interferir con otros entornos, incluyendo el base.
OJO: el cambio de entornos no funciona desde PowerShell. Si trabajas con VS Code en Windows asegúrate de cambiar el terminal a Command Prompt para poder cambiar de entorno.
Para salir de un entorno y volver al base hay que usar conda deactivate
. Si lo aplicamos y volvemos a listar los entornos, veremos que el entorno activo ahora es el base.
Crear entornos con versiones específicas de Python
Aparte de aislar los paquetes para que no haya interferencias otro de los grandes beneficios de usar entornos en conda es que podemos crearlos con versiones específicas de Python, incluso de Python 2, que pueden ser muy viejos. Esto nos da una gran flexibilidad a la hora de trabajar.
Por ejemplo, con esta instrucción creamos un entorno con la versión 2.7 de Python:
conda create -n py27 python:2.7
Donde -n
es la versión abreviada de --name
, py27
es el nombre que le he dado y con python:2.7
especifico la versión que me interesa tener en este entorno.
Llegados a este punto, es posible que conda nos pida instalar paquetes y bibliotecas concretas, quizá más antiguas, para poder dar soporte a esa versión.
Si se da este caso, conda nos lo listará y simplemente tendremos que aceptar para instalarlos. Estos paquetes solo estarán disponibles en este entorno.
Para verificar que se ha instalado la versión correcta activamos el entorno:
conda activate py27
y comprobamos la versión con:
python --version
También podremos verificar los paquetes instalados con conda list
.
Eliminar un entorno de conda
Para eliminar un entorno de conda tenemos que desactivarlo primero si es que estamos dentro:
conda deactivate
y luego lo eliminamos con:
conda remove --name py27 --all
Fíjate en ese --all
. Está ahí para asegurarnos de eliminar todos los paquetes que tenga dentro además del propio entorno, y así evitar que queden descolgados.
Cómo instalar paquetes Python con conda
En primer lugar nos cambiamos a "pruebas" para no trabajar sobre el entorno:
conda activate prueba
Vamos a recordar la versión de Python que teníamos, ya verás por qué:
python --version
y listamos los paquetes con conda list
para comprobar qué tenemos instalado, que en este caso será ninguno.
Ahora, por ejemplo, vamos a instalar el paquete pandas en nuestro entorno (en el entorno base ya lo tienes por defecto):
Pandas es el paquete más utilizado del mundo para cargar, manipular, etiquetar, convertir y en general gestionar cualquier tipo de datos. Si vas a hacer análisis de datos vas a utilizar (sí o sí) pandas. Además, en Visual Studio Code lo necesitas para visualizar las variables en el visor, como ya hemos visto en el post anterior.
conda install pandas
En el vídeo vemos todos los paquetes que se van a instalar. Una cosa interesante es que actualiza Python también, que lo considera como un paquete más.
Python es simplemente otro paquete más para conda, así que podremos instalar la versión que queramos en un entorno con conda install python=x.y.z
Si ahora listamos los paquetes veremos todas las dependencias que tiene Pandas.
¿Y qué pasa si queremos llevarnos un proyecto en el que estamos trabajando a otro equipo? Pues que tendremos que llevarnos exactamente las mismas dependencias. Esto es lo que veremos en el siguiente punto.
Instalar todas las dependencias de un proyecto
En conda podemos instalar varios paquetes a la vez simplemente poniendo sus nombres (y también versiones si nos interesa) justo a continuación. Por ejemplo:
conda install numpy pandas matplotlib
Otra opción sería crear un archivo requirements.txt
donde escribamos a mano el nombre de cada dependencia (uno por línea):
numpy
pandas
matplotlib
Y ahora podría instalarlo con:
conda install --file requirements.txt
¡OJO! Asegúrate de que este archivo esté codificado en UTF-8. Si no sabes cómo, en el vídeo te explico cómo comprobarlo en VS Code
Esto está bien cuando tenemos pocos paquetes, somos disciplinados y no nos olvidamos de meterlos a mano cuando los vamos necesitando, para guardar un registro.
Sin embargo, existe una opción mejor que consiste en exportar directamente el entorno que nos interese.
Exportar entornos de conda
Para exportar el entorno, primero nos aseguramos de que estamos trabajando sobre el entorno que nos interese y escribimos la siguiente instrucción:
conda env export > environment.yml
Este comando lo que hace es exportar todos los datos relativos al entorno en el que estamos trabajando en un archivo .yml
, un archivo de texto plano.
Además, si usamos el nombre environment.yml
, conda reconocerá este nombre, lo que nos será de mucha ayuda al clonarlo.
Por ejemplo, podemos recrear exactamente ese entorno en otro nuevo con:
conda env create -f environment.yml
Pero si ya estamos dentro de una carpeta que tiene ese archivo, lo usará automáticamente para instalar las dependencias porque reconocerá el nombre del archivo. Pero de todas formas es mucho mejor si se lo indicamos.
También podemos instalarlas en el entorno actual con:
conda env update -f .\environment.yml
Clonar un entorno de conda
Y también podemos clonar un entorno directamente en otro para seguir trabajando en paralelo con:
conda create -n miclon --clone prueba
En este caso el entorno "miclon" será un clon del entorno "prueba".
Un par de detalles sobre los entornos y Visual Studio Code
Un par de detalles ya para terminar: cuando estamos trabajando en un notebook en VS Code podemos ver arriba a la derecha el entorno en el que estamos trabajando, y si hacemos clic sobre él podremos cambiar de entorno.
Ahora bien, si hemos creado o modificado un nuevo entorno desde el terminal tendremos que reiniciar VS Code para que nos lo reconozca desde ahí.
Así que cuando trabajes con un notebook fíjate bien en qué entorno estás trabajando porque, si no te funciona, es posible que no estés en el entorno correcto.
Y por último, recuerda una vez más que si usas PowerShell desde el propio VS Code no funcionará el cambio de entorno, pero sí todo lo demás. Mejor usar cmd de toda la vida.
¡Espero que te resulte útil!