Manejo
de entornos de python
Python es un lenguaje de programación densillo que nos permite hacer
muchas cosas, por ejemplo desarrollar aplicaciones y modelos de Machine
Learning.
Cuando desarrollamos en Python podemos escoger entre tener una
instalación global o una instalación en un ambiente aislado. Esto es de vital
importancia cuando desarrollamos distinas aplicaciones y cada una utiliza
versiones de los paquetes de los que depende; pero además permite
organizar nuestros programas, dejando de manera explícita las
dependencias que tienen, de tal manera que otra persona pueda usarlos
con facilidad.
Pip y Virtualenv
Pip es un paquete de Python que installa otros paquetes en algún entorno
en particular. Por ejemplo, pip install tensorflow instala el paquete
TensorFlow en el actual entorno de trabajo; que puede ser un entorno
virtual creado con Virtualenv o una instalación global.
Virtualenv es un paquete de Python que nos permite crear entornos
aislados de desarrollo, con el objetivo de evitar conflictos entre distintos
paquetes de Python. Para instalarlo, simplemente debemos correr el
comando pip install virtualenv .
También existe Pipenv, el cual reúne la funcionalidad de Pip y Virtualenv
en una sola herramienta.
Como en el curso estamos usando Conda, voy a omitir detalles de
Virtualenv, Pip y Pipenv, pero dejo los links para los que estén interesados.
Conda y Anaconda
Conda cumple las funciones de Virtualenv y Pip (o Pipenv): administra los
entornos e instala los paquetes o librerías. Además, Conda no está
restringido a Python; es un gestor de paquetes para varios lenguages de
programación, incluyendo R.
Anaconda es una distribución de Python que incluye varios paquetes útiles
pra Data Science y Machine Learning, como Numpy, Pandas, Scikit-learn,
entre otros. Es por eso que resulta conveniente para empezar a trabajar
rápidamente, especialmente para usuarios de Windows, ya que el
desarrollo de software suele ser más engorroso allí. La instalación de
Anaconda (o Miniconda, su versión con menos paquetes preconfigurados)
incluye Conda.
Los entornos de Conda se manejan desde la terminal de comandos.
Acontinuación los comandos más usados:
Crear un entorno. conda create --name <nombre del
entorno> python=<version de Python> <nombre de paquete 1>
<nombre de paquete 2> . Por ejemplo,
conda create --name datascience python=3.6
anaconda crea un entorno llamado datascience que trae
todos los paquetes que están incluidos en Anaconda.
conda create --name datascience python=3.6 numpy
pandas scikit-learn crea un entorno llamado
datascience que incluye Numpy, Pandas y Scikit-learn.
conda create --name vision python=3.6 numpy opencv
tensorflow crea un entorno llamado vision e instala
Numpy, Opencv y TensorFlow en él.
conda create --name oldenv python=2.7 crea un
entorno llamado oldenv que no incluye ningún paquete
especial.
Activar un entorno. activate <nombre del entorno>
(Windows) y source activate <nombre del entorno> (Linux o
macOS).
Listar mis entornos. conda env list o conda info --envs
Remover un entorno. conda env remove --name <nombre del
entorno>
Instalar un paquete en entorno activo. conda install -c
<ubicación del paquete> <nombre del paquete> , por ejemplo,
conda install -c conda-forge opencv .
Para más información, consulta la guía de usuario de Conda.
Finalmente…
Es importante conocer las dos herramientas, ya que ambas pueden
necesitarse en alguna situación en particular. Idealmente el entorno es
gestionado por alguien más dentro de la organización, pero esto no
siempre es posible o no podemos esperar a que alguien nos solucione los
problemas necesarios para continuar con nuestro trabajo.
Conda (y Anaconda) son bastante convenientes para liberarse de la
complejidad de instalar algunas dependencias externas a Python, como
librerías hechas en C, C++ o Fortran. Lo cual lo hace especialmente útil
para usuarios con poca experiencia en desarrollo de software y usuarios
Windows. Sin embargo, algunas herramientas de desarrollo, como algunas
librerías o herramientas para el despliegue de aplicaciones, aún no
funcionan apropiadamente con Conda, por ejemplo Zappa.
Por otro lado, Pip y Virtualenv solo se encargan de installar y gestionar los
paquetes de Python, por lo que cualquier otra dependencia se debe
solucionar por otro lado. Esto no es algo difícil si se desarrolla en un
entorno Linux o macOS.
Referencias
Pip
Virtualenv
Pipenv
Conda
Conda cheat sheet
Anaconda
Conda vs Pip