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:

  • Repositorio oficial con miles de paquetes disponibles

  • 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