3. Administración de ambientes y librerías#
Muchas veces necesitaremos usar una librería específica para un proyecto de programación en particular
Si trabajamos en más de un proyecto surge la necesidad de hacer coexistir distintas versiones de librerías en nuestro sistema
En estos escenarios conviene utilizar ambientes virtuales. En particular conviene crear un ambiente virtual para cada proyecto en que trabajemos
Nota
Cada ambiente puede tener su propia versión de intérprete y librerías sin entrar en conflicto
Esto también nos abstrae de las librerías que están instaladas en nuestro sistema operativo
En esta lección veremos dos opciones para administrar ambientes y librerías
Opción 1: Usar Python virtualenv y el manejador de páquetes PIP (Pip Install Packages) para instalar paquetes de PyPI
Opción 2: Usar Conda
Se describirán ambas pero se recomienda usar conda por ser más versatil
3.1. Python virtualenv + PIP#
Para esta opción se requiere tener un intérprete de Python instalado y el paquete virtualenv
Para crear un ambiente llamado foo
en nuestro directorio actual abrimos un terminal y escribimos
virtualenv foo
Para activar el ambiente foo
source foo/bin/activate
Con el ambiente activado podemos instalar paquetes usando PIP.
Ejemplo: Instalar el paquete numpy versión 1.17 con
pip install numpy==1.17
Nota
Los códigos que ejecutemos dentro de foo usarán la versión de intérprete y librerías que hemos instalado en foo
Cuando terminamos de trabajar podemos salir del ambiente usando el comando
deactivate
Algunos comandos útiles de PIP (pip –help)
list, search, install, uninstall, show, ...
3.2. Conda#
Conda es un manejador de ambientes y paquetes para Python y otros lenguajes
Entre sus ventajas se encuentran:
Es multiplataforma (Windows, Mac y Linux)
No requiere tener compiladores instalados (conda los instala dentro del ambiente)
Se puede acceder a más de un repositorio usando channels
Puede usarse para manejar ambientes de Python, R, Ruby, Lua, Scala, Java, JavaScript, C/ C++, FORTRAN, etc
Conda viene en dos sabores llamados distribuciones
Anaconda: conda + Python + cientos de paquetes y herramientas preinstalados
Miniconda: conda + Python
Consejo
Sugiero miniconda para tener más control e instalar lo que en realidad necesitaremos
Para instalar miniconda descarga la versión de 64bits (y Python 3) correspondiente a tu sistema operativo
Luego
Para instalar en Windows corre el ejecutable
Para instalar en Linux abre un terminal y escribe el siguiente comando:
sh Miniconda3-latest-Linux-x86_64.sh
3.3. Utilizando conda#
En lo que sigue se asume la utilización de SO basado en Linux
3.3.1. Cargar las variables de entorno#
Supongamos que miniconda está instalado en el directorio
/home/foo/miniconda3
Primero debemos establecer alguas variables de entorno escribiendo en un terminal
source /home/foo/miniconda3/etc/profile.d/conda.sh
Con las variables de entorno habilitadas podemos usar el comando conda
Truco
Dos maneras para que el comando anterior se ejecute automáticamente cada vez que abrimos un terminal:
Agregar la linea
source /home/foo/miniconda3/etc/profile.d/conda.sh
al final de tu archivo .bashrc (si usas BASH) o .zshrc (si usas ZSH)
Crear un link simbólico
sudo ln -s /home/foo/miniconda3/etc/profile.d/conda.sh /etc/profile.d/conda.sh
3.3.2. Manejo de ambientes de conda#
Podemos listar los ambientes que existen en el equipo
conda env list
Por defecto existirá sólo el ambiente base
Para crear un ambiente de conda llamado bar
conda create -n bar
Para activar el ambiente llamado bar
conda activate bar
Asimismo, podemos desactivar un ambiente con
conda deactivate
Si necesitamos borrar un ambiente llamado bar
podemos hacerlo con
conda env remove -n bar
3.3.3. Manejo de paquetes y librerías#
(No olvides activar tu ambiente antes de probar los siguientes comandos)
Para buscar un paquete se usa la instrucción search, por ejemplo
conda search numpy
Que nos retorna una lista de paquetes con distintas versiones y builds
Podemos instalar una versión en particular usando
conda install numpy=1.16.2=py37_blas_openblash1522bff_0
Para borrar un paquete instalado usamos la instrucción remove o uninstall
conda remove numpy
Para hacer una lista de todos los paquetes instalados en el ambiente se utiliza
conda list
Finalmente podemos actualizar nuestro ambiente con instrucción update o upgrade
conda update --all
3.3.4. Manejo de canales#
Para ver los canales que tenemos configurados podemos usar
conda config --show channel
Nota
Cada repositorio de conda tiene un canal
El orden en que aparecen corresponde a su prioridad
Consejo
Un repositorio muy completo y útil es conda-forge
Para agregar conda-forge con prioridad mínima usamos
conda config --append channels conda-forge
Esto quiere decir que primero se busca el paquete en el canal default y si no se encuentra se busca en conda-forge
Para agregarlo con prioridad máxima usamos
conda config --add channels conda-forge
Más detalles de administración de canales en la documentación de conda
3.3.5. Más sobre ambientes#
Podemos crear un nuevo ambiente bar
que es un clon de un ambiente foo
con
conda create --name bar --clone foo
Si queremos compartir un ambiente llamado foo
, podemos exportar sus contenidos a formato yaml
con
conda activate foo
conda env export > environment.yml
Luego podemos compartir el archivo environment.yml y otra usuario con conda puede reconstruir foo
usando
conda env create -f environment.yml
Más detalles de administración de ambientes en la documentación de conda