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>