613 - Gestión de proyectos Python con Rye. Brutal.
Rye una herramienta brutal para gestionar tus proyectos #python donde puedes seleccionar desde la versión de #python añadir y quitar dependencias y mas
Hace casi ya un año de hablé de Poetry en el episodio 531. Un episodio que titulé Python. Poetry para mis ojos, en una de mis gracias. La cuestión, es que desde entonces he estado gestionando los proyectos en Python, precisamente utilizando esta herramienta, Poetry, y estoy muy satisfecho del resultado que he conseguido. Tanto es así, que incluso en las imágenes que genero para los contenedores Docker de Python utilizo Poetry. Pero hace un tiempo leí sobre otra herramienta, que me pareció realmente interesante porque tenía un enfoque en la rapidez, porque además estaba implementada en Rust, algo que ya te habrás imaginado prácticvamente desde que empecé a hablar. Por resumir, que he cambiado de Poetry a Rye, y es precisamente de lo que te quiero hablar en este episodio.
Gestión de proyectos Python con Rye. Brutal.
Aviso a Pythonicos
Antes de nada, indicar que Rye es una herramienta en fase experimental, con lo que, a lo mejor, la idea de migrar de Poetry a Rye, no es la mejor idea del mundo. Llámame loco, pero ya he cambiado de herramienta, por supuesto, con riesgo a equivocarme como todo hijo de vecino.
¿Y porque está decisión? Son varias las razones, pero una de las principales es básicamente lo que indica el propio desarrollador de la aplicación.
Rye es una herramienta todo en uno. La idea es que, como desarrollador de Python, lo único que necesitas conocer es Rye, porque Rye es tu puerta de entrada a la experiencia. Como usuario de Rye, ni siquiera necesitas instalar Python tú mismo, ya que Rye lo hace por ti. Esto significa que para usar Rye, solo necesitas instalar Rye, del resto se encarga Rye.
Una vez que Rye está instalado, él se encarga de hacer todo el trabajo sucio. Desde instalar el intérprete de Python, pasando por gestionar los entornos virtuales, así como, por supuesto, instalar los paquetes que necesites.
Instalación
Rye está disponible tanto para Linux, como para MacOS, como para Windows, y lo puedes instalar desde una versión compilada para tu sistema operativo o compilarla tu mismo utilizando Rust para ello.
En el caso de Linux, es tan fácil, como ejecutar el siguiente comando en una terminal,
curl -sSf https://rye.astral.sh/get | bash
Shims
Es necesario añadir el directorio de shims
tu PATH
. Esto de los shims
son los ejecutables que rye
gestiona, así como el propio rye
. Cualquier instalación de Python gestionada por rye
estará aquí. Así para añadirlo en el caso de Bash, tienes que utilizar el siguiente comando,
echo 'source "$HOME/.rye/env"' >> ~/.bashrc
En el caso de Fish, que es la shell que estoy utilizando,
set -Ua fish_user_paths "$HOME/.rye/shims"
Completado
Otra de las configuraciones fundamentales que tienes que hacer para tener una instalación de rye
plenamente funcional es el completado de la shell. Para esto, dependiendo de la shell que estés utilizando tendrás que seguir unos pasos u otros. Así, por ejemplo, en el caso de Bash, tendrás que hacer lo siguiente,
mkdir -p ~/.local/share/bash-completion/completions
rye self completion > ~/.local/share/bash-completion/completions/rye.bash
Mientras que en el caso de Fish,
rye self completion -s fish > ~/.config/fish/completions/rye.fish
Actualizando Rye
Otra de las características de rye
es que es una herramienta autogestionable. Así puedes actualizarla fácilmente con tan solo ejecutar,
rye self update
Configuración
Algo de lo que mas me ha convencido a la hora de utilizar Rye, es precisamente que la mayor parte de la configuración se encuentra donde debe, en el archivo pyproject.toml
. Aunque también hay algo de configuración global que influye en la forma en la que se comporta Rye.
La configuración global de Rye, se encuentra en el directorio ~/.rye
, si bien es posible modificarlo a través de una variable de entorno. No tengo claro todavía si quiero o no quiero hacerlo así, veremos.
Dentro de esta configuración global, se encuentran las toolchains. Y es que Rye no utiliza la instalación de Python del sistema. Al contrario de lo que hacen otros sistemas, Rye, descarga y gestiona sus propias instalaciones de Python, a las que, como ya te habrás imaginado llama toolchains. Aunque de esto ya te hablaré mas adelante.
config.toml
Dentro de esta configuración global de Rye se encuentra el archivo config.toml
, donde puedes definir la versión mínima de Python que quieres utilizar, la toolchain por defecto, licencia, autor, o el proxy, en caso de que lo quieras utilizar. Así como otra configuración que puedes modificar según tus necesidades.
Para modificar la configuración, de nuevo tienes que utilizar Rye, por ejemplo, si quieres configurar el proxy, lo puedes hacer de la siguiente forma,
rye config --set proxy.http=http://127.0.0.1:8080
self
En el directorio self
se encuentra un entorno virtual con todas las herramientas que Rye utiliza internamente.
py
Aquí es donde se guardan las toolchains que tengas en tu equipo. Puedes listar las que tienes en tu equipo con rye toolchain list
y si quieres ver todas las que tienes y las que puedes descargar lo puedes hacer con rye toolchain list --include-downloadable
. Así, puedes elegir exactamente la toolchain que necesitas
.
Para instalar una toolchain concreta es tan sencillo como hacer esto,
rye toolchain fetch cpython@3.8.5
shims
Aquí encontrarás todos las herramientas que necesites, por ejemplo, herramientas como pueden ser black
o ruff
. Si necesitas instalar cualquier herramienta o script, lo puedes hacer de nuevo utilizando Rye
, como por ejemplo,
rye tool install black
Utilizando Rye
Rye es realmente sencillo, pero sobre todo intuitivo de utilizar. Así por ejemplo, si quieres iniciar un nuevo proyecto, tan solo lo tienes que hacer ejecutando el siguiente comando,
rye init nuevo-proyecto
cd nuevo-proyecto
Esto genera una estructura como la que te muestro a continuación,
.
├── .git
├── .gitignore
├── .python-version
├── LICENSE.txt
├── pyproject.toml
├── README.md
└── src
└── nuevo_proyecto
└── __init__.py
Si te fijas, Rye se encarga de generar y configurar la estructura mínima de tu proyecto, con los parámetros que has definido en la configuración general. Una vez hecho esto el siguiente paso es ejecutar rye sync
. Esto lo que hace es crear un entorno virtual y escribe los archivos requirements.lock
y requirements-dev.lock
.
Para añadir una dependencia es igualmente sencillo e intuitivo, solo,
rye add requests
Y si lo que quieres es listar las dependencias de tu proyecto,
rye list
Y por supuesto, para quitar una dependencia, rye remove requests
.
De la misma manera para ejecutar una dependencia dentro de un entorno tienes que utilizar run
. Por ejemplo, puedes instalar ruff
y ejecutar el chequeo de la siguiente forma,
rye add ruff
rye sync
rye run ruff check .
Para activar el entorno virtual, lo tienes que hacer de la forma tradicional, y es utilizando . .venv/bin/activate
o en el caso de Fish
, utilizando source .venv/bin/activate.fish
.
Puedes mostrar la información de tu proyecto utilizando rye show
, lo que te devolverá algo similar a lo que te muestro a continuación,
project: nuevo-proyecto
path: /home/lorenzo/sandbox/nuevo-proyecto
venv: /home/lorenzo/sandbox/nuevo-proyecto/.venv
target python: 3.8
venv python: cpython@3.12.3
virtual: false
configured sources:
default (index: https://pypi.org/simple/)
Conclusión
Lo que realmente me ha gustado de Rye
es la simplicidad y que, tal y como indican sus desarrolladores, no necesitas conocer mas herramientas. Desde luego, esto es algo que decía de Poetry, pero sin dudarlo, Rye es la herramienta para gestionarlo todo en lo referente a Python con un proyecto.
Más información,