Hoy vamos a aprender a utilizar pipenv que "es una herramienta que pretende traer lo mejor de todos los mundos de paquetes a Python." ¿Por qué lo vamos a aprender a usar? porque es #lanuevamejorherramientaquedefinitivamentedebesestarutilizandoentusproyectosdePython that’s why! no solo reemplaza a pip y reemplaza a venv, su misión es verdad: tiene lo mejor de todos los package managers que he utilizado.

La historia

Somethings never change

Las dependencias son difíciles, en todos los lenguajes, en todos los frameworks en todos los IDEs las dependencias y saber cómo manejarlas es una de las cosas que es importante hacer bien. Python desde hace varios años ha sido bastante bueno gracias a pip el Package Installer for Python. Pero pip generalmente ha sido utilizado en conjunto con venv

Y si venv era casi indispensable hasta hoy. La idea era generar un entorno virtual para un proyecto específico, con su propia versión del lenguaje y sus propios paquetes. El flujo más común es: (a) se crea un entorno con venv (b) se instalan las dependencias con pip (c) se crea un archivo requirements.txt utilizando pip freeze > requirements.txt

Esto tiene el efecto de que, en general, se puede recrear un entorno virtual en otra computadora y recrear las dependencias con el mismo requirements.txt con pip install -r requirements.txt pero este procedimiento no reconoce entre dependencias de desarrollo y dependencias de producción, y no hay lockfiles.

Dónde empezar

Empecemos con que pipenv no es instalable con pip, en vez de eso utiliza el manejador de dependencias de tu sistema, en mi caso brew install pipenv. En Linux, pero sobre todo en Windows (WSL) puedes utilizar Linuxbrew.

Crear un proyecto

Para crear un proyecto, solo hace falta crear un directorio e inicializar el entorno con pipenv install

mkdir test
cd test
pipenv install

Incluso puedes definir la versión de python utilizando algo similar a pipenv --python 3.7 dependiendo de la versión que quieres utilizar.

Esto genera un archivo Pipfile, que similar a npm o bundle, tiene secciones para dependencias de desarrollo y dependencias de producción. También especifica los repositorios desde dónde se van a obtener los paquetes y la versión de python que el proyecto necesita.

Para empezar a utilizar el ambiente solo es necesario activarlo con pipenv shell y para instalar dependencias puedes utilizar pipenv install <paquete>

pipenv shell
pipenv install requirements

Cada que haces una instalación actualizará el Pipfile.lock, ¡que es un lockfile!

#quemocion

¿Por qué queremos un lockfile?

Un lockfile es algo presente en otros manejadores de dependencias pero que no existía en pip la ventaja de tenerlo es que mientras que tu Pipfile lleva el seguimiento de las cosas que quieres instalar tu Pipfile.lock lleva el seguimiento de las cosas que de verdad estan instaladas. Cosas como las dependencias de tus dependencias.

También tiene ‘hashes’ de los paquetes instalados, entonces si vuelves a instalar las dependencias en un sistema diferente vas a recibir advertencias si es que lo que se esta descargando es diferente a lo que se instaló al momento que se creó el lockfile.

Y es un modo útil de saber si alguna cosa en la cadena de dependencias esta introduciendo alguna vulnerabilidad a lo que estas construyendo.


Esto es todo lo que necesitas saber para empezar a utilizar pipenv y para saber por qué necesitas utilizarlo. Si encontraste este artículo útil te invito a leer Modelando las probabilidades en Arkham Horror: The Card Game dónde vamos de las matemáticas a la programación para decifrar un juego de mesa.

Aprende Sheets: Curso práctico de Hojas de cálculo de Google
Aprende Sheets: Curso práctico de Hojas de cálculo de Google