El día que Pipenv llegó para salvarnos de nuestros pecados
Jun 17, 2019
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 historía
Las dependencias son dificiles, 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!
¿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.
– Anya Reyes