En el mundo del desarrollo de software, especialmente en proyectos Python, la gestión de dependencias puede convertirse rápidamente en un desafío (o dolor de cabeza🫠) .

Instalar, desinstalar, instalar nuevamente

Tradicionalmente, los desarrolladores utilizan un archivo requirements.txt para listar las librerías necesarias para un proyecto. Este enfoque, aunque ampliamente adoptado, tiene varias desventajas que pueden complicar el desarrollo y mantenimiento de aplicaciones.

Aquí es donde entra en juego Poetry : una herramienta diseñada para simplificar y mejorar la gestión de dependencias en proyectos Python 🐍.

El Problema con los requirements.txt

El proceso estándar en muchos proyectos Python incluye la creación de un entorno virtual, la instalación de librerías, y finalmente, la generación de un archivo requirements.txt mediante el comando pip freeze > requirements.txt. Aunque este método es funcional, presenta varios problemas:

  • Dependencias innecesarias: Es común que, durante la fase de exploración de nuevas librerías 📚, las instalemos, no las usemos y olvidemos que estaban. Esto resulta en un requirements.txt abultado con dependencias no utilizadas.🚮
  • Gestión manual y tediosa: Actualizar las librerías suele requerir eliminar el entorno virtual, crear uno nuevo y reinstalar las dependencias una a una, lo cual es un proceso bastante propenso a errores y omisiones.

¿Qué es Poetry y cómo soluciona estos problemas?

Poetry es una herramienta que facilita la gestión de dependencias en Python. Su enfoque es similar al de package.json en proyectos de desarrollo web, donde un archivo de configuración central maneja todas las dependencias del proyecto.

Características

Archivo pyproject.toml: En lugar de requirements.txt, Poetry utiliza pyproject.toml 🗒️ para declarar las librerías y sus versiones, así como otras configuraciones del proyecto. Esto elimina las dependencias innecesarias y simplifica el archivo de configuración.

  • Gestión Automatizada: Poetry automatiza la actualización y sincronización de dependencias 🔁, evitando la necesidad de gestionarlas manualmente. Esto reduce el riesgo de errores y omisiones al actualizar o reinstalar paquetes.
  • Entornos Virtuales Integrados: Poetry maneja automáticamente la creación y gestión de entornos virtuales, asegurando que las dependencias estén aisladas y consistentes en todos los entornos de desarrollo y producción.

Casos de Uso

Desarrollos comerciales: Muchas empresas han adoptado Poetry como herramienta estándar para el manejo de dependencias en sus proyectos Python, debido a su eficiencia y capacidad para mantener la consistencia en los entornos de desarrollo.

  • Publicación de Paquetes: Cuando se necesita publicar o actualizar paquetes en el índice de paquetes de Python (PyPI), Poetry proporciona herramientas robustas para gestionar las versiones y dependencias, facilitando el proceso de publicación.
  • Proyectos de Investigación y Colaboración: En proyectos con múltiples colaboradores, Poetry asegura que todos los participantes trabajen con el mismo conjunto de dependencias, evitando inconsistencias y problemas de compatibilidad.

Librería funpymodeling

En Escuela de Datos Vivos utilizamos Poetry para la publicación de nuestra librería, `funpymodeling`, la cual está orientada a análisis exploratorio y preparación de datos para machine learning.

🔗 Te dejamos el github, y aquí un quick start.

Poetry sirve justamente para publicar paquetes de Python en PyPI, el sitio de donde se descargan las librerías python con pip 🚀

¿Cómo usarlo?

Imaginemos que creamos una app para el clima.

Lo instalamos:

curl -sSL https://install.python-poetry.org | python3 -

Luego creamos el dir de poetry:

poetry new clima-app

Dentro imaginemos que necesitamos la biblioteca requests para realizar llamadas HTTP a una API meteorológica, la agregamos:

poetry add requests

Dentro del directorio del proyecto clima_app, imaginemos que toda nuestra magia esta en un archivo llamado weather.py entonces necesitamos podemos ejecutar el script directamente usando Poetry:

poetry run python clima_app/weather.py

De esta forma, nuestro script weather.py se ejecutará en un entorno con todas las dependencias instaladas.

La clásica alternativa: pipenv

Pipenv: es una herramienta que busca unir lo mejor de varios mundos: la gestión de paquetes con Pip y la gestión de entornos virtuales (similar a Virtualenv). Es promovida por la propia Python Packaging Authority (PyPA) como la herramienta recomendada para la gestión de dependencias en Python.

Utiliza estos dos archivos para manejar dependencias. Pipfile reemplaza el tradicional requirements.txt y Pipfile.lock 🔐 asegura que las instalaciones sean consistentes en todos los entornos al especificar versiones exactas de las dependencias.

Conclusión

Aprender a manejar paquetes, dependencias y proyectos en Python te habilitará al mundo opensource, ya sea con librerías como `funpymodeling`, como muchas otras del mundo de machine learning y desarrollo backend.

Así que si estás buscando optimizar y simplificar la configuración de tus proyectos Python, definitivamente vale la pena considerar Poetry y Pipenv para poner en orden tus proyectos y no olvidar actualizaciones ni dependencias.