Poetry, el anillo único de Python

Las dependencias en Python, y en cualquier otro lenguaje de programación que trabaje con dependencias es un auténtico dolor. Esto no me lo puede negar nadie. Existen tantas opciones para gestionar dependencias en Python como colores, y es complejo decantarte por alguna. De la misma forma, hay otro problema para la gestión de los entornos de trabajo, desarrollo y programación. Igualmente, también tienes distintas formas para gestionarla, cada una de su padre y de su madre. Sin embargo, hace ya algún tiempo disponemos de Poetry, que a mi me gusta llamarlo el anillo único de Python, porque es la herramienta que te va a permitir gestionar de forma adecuada tanto dependencias, como el entorno de trabajo, sin necesidad de complicaciones. Una sola herramienta para gobernarlo todo, y desde la cual vas a gestionar las dependencias como trabajar con los entornos.

Poetry, el anillo único de Python

¿Que es Poetry?

Poetry es una herramienta para la gestión de dependencias y el empaquetado para Python. Esta herramienta te permite declarar las librerías que necesita tu proyecto Python, y además podrás gestionarlas, tanto instalar, como actualizar. Además de esto, Poetry tiene una lockfile que te permite asegurar instalaciones repetibles, y puede construir tu proyecto para distribuir

Instalación

Existen diferentes formas de instalar Poetry, pero al igual que hice con rust, voy a ir a la que mas me gusta últimamente, que es a partir del script facilitados por los desarrolladores de la aplicación,

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

A parte de esto es interesante instalar el autocompletado de esta herramienta para tu shell. Está disponible para Bash, Zsh y Fish. Por ejemplo, en el caso de Bash, lo puedes hacer de la siguiente forma,

poetry completions bash >> ~/.bash_completion

En el caso de Zhs,

poetry completions zsh > ~/.zfunc/_poetry

En mi caso particular, lo tengo de la siguiente forma,

poetry completions zsh > ~/.config/zsh/plugins/custom-completions/_poetry

Los inicios

Una vez instalado, lo primero es ver la versión que estamos utilizando. Para ello, simplemente tienes que ejecutar,

poetry --version

En el caso de que quieras actualizar Poetry, lo puedes hacer directamente desde Poetry, es decir, que tiene una herramienta de auto actualización. Para ello, ejecuta,

poetry self update

Si quieres ver si es necesaria alguna dependencia antes de instalar, puedes hacerlo utilizando el siguiente comando,

poetry self update --preview

Desinstalación

En el caso de que quieras dejar de utilizar Poetry, puedes emplear el siguiente script para desinstalarlo de tu sistema,

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

Uso básico

Para empezar, vamos a construir y configurar nuestro primer proyecto. Esto es tan sencillo, como ejecutar la siguiente instrucción,

poetry new demo

Esto genera la siguiente estructura de directorios y archivos,

.
├── README.md
├── demo
│   └── __init__.py
├── pyproject.toml
└── tests
    └── __init__.py

Y dentro del archivo pyproject.toml, encontrarás el siguiente contenido,

[tool.poetry]
name = "demo"
version = "0.1.0"
description = ""
authors = ["Lorenzo Carbonell <atareao@atareao.es>"]
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.11"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

[tool.pyright]
venvPath = "."
venv = ".venv"

Ya solo esto, es una auténtica maravilla para mi. Antes de poetry, cada vez que tenía que iniciar un nuevo proyecto, siempre me calentaba la cabeza con la estructura del proyecto. Soy consciente que esto suena a tontería, pero, me gusta el orden, y si alguien se encarga de ordenar y organizar, mejor para mi.

Indicar que he añadido tres líneas adicionales correspondientes tool.pyright, que permite que dentro de Neovim pueda trabajar con

Las dependencias

Hasta la fecha, siempre había gestionado las dependencias utilizando el archivo requirements.txt. Pero, para que nos vamos a engañar, esto es un auténtico incordio. Para hacer esto, terminaba recurriendo PyPi, para determinar los paquetes, etc. Ahora, me resulta mucho mas sencillo, porque directamente con poetry, puedo realizar búsquedas. Por ejemplo, para añadir una dependencia, simplemente, tengo que ejecutar,

poetry add <nombre-de-la-dependencia>

De la misma forma, en el caso de que quiera eliminar una de las dependencias de mi proyecto, tan solo tengo que ejecutar,

poetry remove <nombre-de-la-dependencia>

Además de las dependencias generales, las correspondientes a nuestro proyecto, main, también es posible añadir dependencias, por ejemplo únicamente para realizar el desarrollo. Por ejemplo, las herramientas de depuración,

poetry add debugpy --group dev

Pero no solo se trata de añadir y quitar dependencias, también es necesario actualizarlas, y esto es otra auténtico incordio, que se resuelve de forma sencilla con poetry. Tan solo es necesario ejecutar,

poetry update

En el caso de que solo quieras actualizar las dependencias del proyecto, lo puedes hacer con,

poetry update --only main

O si quisieras hacer lo mismo para desarrollo,

poetry update --only dev

¿Que pasa con tus antiguos proyectos?

Esto de Poetry, lo cierto es que lo he descubierto algo tarde, aunque teniendo en cuenta que yo llevo pythoneando desde antes de 2010, quizá no sea tan tarde. Y es que la versión inicial de Poetry es de febrero de 2018. Sea como sea, es necesario aprovechar al máximo las posibilidades que nos ofrece esta herramienta.

La cuestión, es que me ha enamorado tanto esto de Poetry, que he decidido migrar todos los proyectos a esta herramienta. Lo primero que me he preguntado, era si había posibilidades de utilizar esta herramienta una vez tu proyecto estaba en marcha, y efectivamente, y como no podía ser de otra forma, es posible.

Si estás en el mismo caso que yo, y quieres utilizar Poetry para gestionar algún que otro antiguo proyecto puedes hacerlo igual que yo. Lo primero es inicializar el proyecto, para esto ejecuta,

poetry init

Aquí te preguntará una serie de cuestiones para configurar tu proyecto. Las primeras relacionadas con el propio proyecto en si. Posteriormente te pedirá que indiques las dependencias tanto las propias del proyecto como las correspondientes al desarrollo.

Una vez llegados a esto punto, a lo mejor, quieres instalar las dependencias. Para ello, tienes que ejecutar,

poetry install --no-root

El vídeo

A continuación te muestro en vídeo lo mismo que te he contado hasta aquí,


Más información,

2 comentarios en “Poetry, el anillo único de Python

  1. MA
    Martin. hace 6 meses

    Yo también acabo de descubrir esta excelente herramienta. Me vino bien tu artículo.
    Quizas mas adelante podrias mostrar como se podria integrar a Docker. La edición del Docker file.
    Gracias por el artículo, saludos desde Argentina.

  2. SI
    Simonced hace 4 meses

    Excelente tu publicación, muy amena y justo al grano tal como cuando yo mismo me pongo a explorar nuevas herramientas. Gracias, ha sido de gran ayuda.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *