Maneja los archivos requirements con pip-tools

El tema de los paquetes de Python, es un tema. Normalmente yo instalo los paquetes que necesto a mano con pip install, eso a su vez me instala un montón de dependencias. Luego, pinneo los paquetes que uso en el proyecto haciendo pip freeze para que luego esa instalación sea reproducible en otro equipo.

Sin embargo, con esto te perdés de un montón de cosas. Sobre todo, las actualizaciones de las dependencias de los paquetes que instalaste a mano. Vincent Driessen lo explica mucho mejor que yo en su blog post: Pin Your Packages.

Para facilitarnos esta tarea, este flaco Vincent creó la herramienta llamada pip-tools que soluciona este problema entre otros.

Básicamente consiste en dos herramientas: pip-compile y pip-sync.

Para poder mantener en orden nuestro entorno virtual y que todo vaya de forma correcta y actualizada, debemos crear un archivo requirements.in que será donde indicamos qué paquetes necesitamos. Por ejemplo en un proyecto que necesitemos Django y django-phonenumber-field:

# requirements.in
Django
django-phonenumber-field

y luego:

$ pip-compile
#
# This file is autogenerated by pip-compile
# Make changes in requirements.in, then run this to update:
#
#    pip-compile requirements.in
#

babel==2.2.0              # via django-phonenumber-field
django-phonenumber-field==1.0.0
Django==1.9.2
phonenumbers==7.2.4       # via django-phonenumber-field
pytz==2015.7              # via babel

Este comando nos va a generar nuestro archivo requirements.txt con todas las versiones de los paquetes necesarios, y sus dependecias, pinneados como corresponde. Pero además, cada una de esas dependencias tendrá un comentario que va a indicar porqué es necesaria o de dónde viene.

Finalmente, para poner a tiro nuestro entorno e instalar todas los requerimientos necesarios con esas versiones específicas, ejecutamos:

pip-sync

Pasan los días, las semanas y los meses. Salen nuevas versiones de los paquetes y no nos enteramos. Ahí volvemos a utilizar el comando pip-compile para que compruebe todos los paquetes necesarios y se fije si hay una nueva versión y demás. Crea nuevamente el requirements.txt y si vemos que queremos actualizar todos esos paquetes, hacemos un pip-sync.

¡De puta madre pip-tools!

Comentarios

Comments powered by Disqus