Python, Pip y Entornos Virtuales
A la hora de trabajar con Python en distintos proyectos puede darse el caso de que necesitemos instalar librerías que no son compatibles debido a sus dependencias, o porque requieren diferentes versiones de Python.
Es por ello que se suele trabajar con entornos virtuales, que no son mas que un directorio que contiene binarios de Python y módulos específicos; los cuales, comúnmente están asociados a un proyecto a modo de dependencias.
Cuando se ejecuta el script de activación /path/to/venv/bin/activate
,
se modifican ciertas variables de entorno de la shell, de modo que, en lugar
de llamar al intérprete y módulos globales, se hace referencia a aquellos que
se encuentran ubicados en el directorio del entorno virtual. Así, se logra ese
“aislamiento”, que no debe confundirse con virtualización o contenedores.
Crear un entorno virtual
Para crear entornos virtuales se suelen usar los módulos venv
o virtualenv
.
El primero viene incluido a partir de Python3.3, mientras que el segundo se
debe instalar como un módulo adicional ya que es mantenido por terceros.
Para instalar virtualenv
.
pip install virtualenv
Ejemplos para crear un entorno virtual con cualquiera de los 2 módulos.
python -m venv /path/to/env1
python -m virtualenv /path/to/env2
virtualenv /path/to/env3
Es recomendable tener un directorio dedicado para almacenar nuestros
entornos. Por ejemplo, /home/user/.venvs
.
NOTA: si vamos a crear el entorno directamente en el repositorio de nuestro
proyecto, no olvidemos agregar el directorio del entorno a nuestro .gitignore
para evitar rastrear el código de las dependencias. Basta con rastrear el
archivo requeriments.txt
, el cual contiene la declaración de dependencias
de nuestro proyecto.
Activar/desactivar el entorno
Para activar el entorno.
source /path/to/env
Una vez en el entorno, veremos el nombre del mismo en el prompt de nuestra
línea de comandos, y ya podremos instalar módulos usando
pip install <PKG-NAME>
.
Para salir del entorno.
deactivate
Generar el archivo requirements.txt
Este archivo contiene los pares module_name==version
que indican las dependencias
de nuestro proyecto, por lo que se recomienda el rastreo.
Para ver todas las dependencias instaladas podemos usar pip list
o pip freeze
, la diferencia entre estos 2 comandos es que el primero es mas
legible para el usuario, mientras que el segundo se usa para redirigir la salida
al archivo requeriments.txt
.
Dicho esto, para generar éste archivo usamos.
pip freeze > requeriments.txt
NOTA: el archivo requirements.txt
NO se actualiza solo al instalar nuevos
paquetes, debemos actualizarlo manualmente con el comando anterior cada que
hacemos un cambio en las dependencias.
Comandos básicos de PIP
Una vez dentro del entorno de nuestro proyecto, podemos proceder a instalar paquetes usando Pip.
Instalar paquete.
pip install <PACKAGE_NAME>
Desinstalar paquete.
pip uninstall <PACKAGE_NAME>
Actualizar paquete.
pip install --upgrade <PACKAGE_NAME>
Instalar dependencias desde requeriments.txt
.
pip install -r requeriments.txt
Buscar paquetes.
pip search <STR>