
671 - Descubre la herramienta que cambiará como usas Python
#uv es la herramienta perfecta para gestionar proyectos y dependencias de #python y que viene a sustituir a #pip #poetry #pyenv #virtualenv y otras
Como ya te he comentado en mas de una ocasión, la llegada de Rust, está suponiendo una auténtica revolución. Los desarrolladores apoyados en Rust se han lanzado, no solo a reescribir antiguas aplicaciones y herramientas, si no que están creando nuevas. Pero no solo beneficia al mundo de herramientas Linux, o de herramientas en general, también está beneficiando a otros lenguajes de programación, como Puede ser JavaScript, TypeScrypt o Python, por citarte alguno de ellos. Y es precisamente de este último, de Python, del que quiero hablarte en este episodio, en concreto de una herramienta que cambiará probablemente la forma en la que gestionas tus proyectos en Python. Y es que se trata de una evolución de algunas de las herramientas que te he ido mencionando en los últimos tiempos relacionado con Python. Desde luego, si no utilizas Poetry o rye, deberías de probarlas, porque le dan una vuelta a la gestión de proyectos de Python, y la herramienta de la que te quiero hablar en este episodio, es desde luego, la herramienta que cambiará como usas Python, y sobre todo como gestionas los proyectos de Python.

Descubre la herramienta que cambiará como usas Python
Una evolución
Por ponerte en antencedentes, en el episodio 531 de hace ya algo mas de un año, te hable sobre gestionar tus proyectos Python con Poetry, y poco después, hace algo mas de seis meses, en concreto en el episodio 613, te hablé de el uso de Rye para tus proyectos Python.
En este tiempo, he seguido de cerca el proyecto uv, que se enmarca dentro de Astral, que son Herramientas de desarrollo de alto rendimiento para el ecosistema de Python. Dentro de Astral, encontrarás herramientas con ruff que es un linter y formateador para Python o rye, sobre el que hablé recientemente.
Durante este tiempo, primero de uso de Poetry, para posteriormente pasarme a rye y terminar recientemente en uv, todo ha tenido sentido. Desde mi punto de vista en el ecosistema Python, faltaban herramientas como las que te he mencionado anteriormente, para facilitar el trabajo de los desarrolladores.
En este tiempo, trabajar con herramientas como cargo para Rust o pnpm para JavaScript, me ha hecho darme cuenta de la necesidad de una herramienta similar para el ecosistemas de Python, y el descubrimiento de, primero Poetry, posteriormente rye y ahora uv, no han hecho si no confirmar mis sospechas.
Sobre uv
uv es un increíblemente rápido y potente gestor de paquetes y proyectos para el ecosistema Python implementado en Rust. En concreto, es como el anillo único, un único anillo para gobernarlos a todos, una única herramienta que te permitirá reemplazar a pip
, pip-tools
, pipx
, poetry
, pyenv
, twine
, virtualenv
y muchas mas. Ya no necesitas utilizar distintas herramientas para gestionar las dependencias o tu proyecto de Python. Ahora con uv, lo tienes todo en una única herramienta de forma que solo tienes que aprender esta herramienta para poder trabajar tanto con tu proyecto como para gestionar tus dependencias.
El propósito de uv va mas allá de reemplazar a pip o virtualenv, lo que pretende es darte una experiencia más rápida, eficiente y coherente tanto para el desarrollo local como para entornos de CI/CD. Dado, que uv, integra la creación de entornos virtuales, instalación de paquetes y la gestión de dependencias en un solo flujo de trabajo, simplifica y acelera el ciclo de vida de cualquier proyecto en Python.
La motivación detrás de uv surge de la necesidad de una herramienta que no solo gestione paquetes, sino que también proporcione un entorno coherente y reproducible para los desarrolladores de Python. Al integrar funcionalidades que antes requerían múltiples herramientas (como pip, pip-tools, pipx, poetry, pyenv, twine y virtualenv), uv busca reducir la complejidad y mejorar la experiencia del desarrollador. Además, su implementación en Rust le permite ofrecer un rendimiento superior, siendo entre 10 y 100 veces más rápido que pip en la instalación y gestión de paquetes.
dev.to
Desde su lanzamiento, uv ha sido adoptado rápidamente por la comunidad de Python debido a su capacidad para simplificar flujos de trabajo y mejorar la eficiencia en la gestión de proyectos. Su desarrollo continuo refleja el compromiso de Astral con la innovación y la mejora constante de las herramientas disponibles para los desarrolladores de Python.
Características
Te detallo a continuación las características de uv extraídas directamente del proyecto de GitHub,
- 🚀 Herramienta todo-en-uno: Reemplaza pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv y más, simplificando la gestión de proyectos en Python.
- ⚡ Velocidad impresionante: Hasta 10-100 veces más rápido que pip, gracias a su implementación en Rust.
- 🗂 Gestor de proyectos integral: Usa un archivo de bloqueo universal (universal lockfile) para garantizar entornos reproducibles.
- ❇️ Ejecución de scripts: Soporte para metadatos de dependencias en línea, permitiendo correr scripts Python de forma eficiente.
- 🐍 Gestor de versiones de Python: Instala y gestiona diferentes versiones de Python sin herramientas externas.
- 🛠️ Gestor de herramientas: Ejecuta e instala herramientas publicadas como paquetes Python.
- 🔧 Interfaz compatible con pip: Proporciona un CLI familiar pero mucho más rápido.
- 🏢 Soporte para workspaces estilo Cargo: Ideal para proyectos grandes y escalables.
- 💾 Eficiencia en el uso de disco: Utiliza un caché global para deduplicar dependencias y ahorrar espacio.
- ⏬ Fácil instalación: No requiere Rust o Python para instalarse, solo un comando curl o pip.
- 🖥️ Multiplataforma: Compatible con macOS, Linux y Windows.
Instalación
La instalación es tremendamente sencilla, tal y como te he mencionado en las características, con tan solo un curl o con pip, lo puedes instalar. En concreto,
curl -LsSf https://astral.sh/uv/install.sh | sh
o con pip
,
pip install uv
Y ¿como actualizarlo?. Aquí viene la primera de las magias de uv
. Tan solo tienes que ejecutar el siguiente comando desde tu terminal para tenerlo actualizado,
uv self update
Gestionando proyectos Python con uv
Gestionar un proyecto Python con uv es tremendamente fácil, y vamos paso a paso.
- Crear el proyecto
uv init proyecto
- Entras en el directorio donde se ha creado tu proyecto
cd proyecto
Si ya tienes creado el directorio donde está tu proyecto, simplemente tienes que ejecutar uv init
.
De cualquier forma lo que encontrarás es lo siguiente,
.
├── hello.py
├── pyproject.toml
├── README.md
└── uv.lock
Cuando ejecutes uv run
, uv sync
o uv lock
se creará el correspondiente entorno virtual.
pyproject.toml
continene la información sobre tu proyecto.python-version
contiene la versión de Python que utiliza tu proyecto.venv
es el directorio en el que se encuentra el entorno virtual.uv.lock
contiene la información exacta de las dependeicas de tu proyecto
Gestionando las dependencias de tu proyecto
De nuevo gestionar las dependencias de tu proyecto utilizando uv
es realmente sencillo, y finalmente lo que hace es simplemente añadir esas dependencias al archivo pyproject.toml
. Así,
uv add requests
añade el paqueterequests
a tu proyectouv remove requests
quita el paqueteuv lock --upgrade-package requests
actualiza o intenta actualizar el paquete a la última versión compatible
También te permite añadir dependencias que sean únicamente para el desarrollo, como por ejemplo,
uv add ruff --dev
Gestionando Python
Si tienes instalado Python en tu equipo uv
lo detecta y lo utiliza sin ninguna configuración adicional. sin embargo, uv
te permite instalar y gestionar distintas versiones de Python. Así por ejemplo,
uv python install
instala la última versión disponible de Pythonuv python install 3.8
instalará la versión correspondiente
Para cambiar la versión de tu proyecto simplemente tienes que utilizar el comando,
uv python pin 3.8
Ejecución de scripts
Un script no es mas que un archivo que se puede ejecutar en solitario con un python script
. La ventaja de utilizar uv
ess que lo ejecuta con todas las dependencias necesarias. Esto es tan sencillo como ejecutar,
uv run tu-script.py
Herramientas
uv
incluye un interfaz para interaccionar con herramientas. Y esto lo puedes hacer instalando las herramientas o sin instalarlas. Si lo quieres hacer sin instalarla puedes utilizar uvx
. Por ejemplo, puedes instalar la herramienta ruff
, con tan solo ejecutar,
uv tool install ruff
O incluso, como indicaba, ejecutar directamente con uvx ruff
o uvx black *.py
.
Integraciones
Además de esto, es sencillo integrar uv
con otro software, en concreto con Docker
, Jupyter
, GitHub Actions
, o en el desarrollo de aplicaciones con FastAPI
.
En concreto, yo lo estoy utilizando para Docker, como por ejemplo puedes ver en este Dockerfile
Mi experiencia
Para mi, la evolución desde Poetry hasta uv
ha sido la mas lógica. Gestionar los paquetes a la manera tradicional después de utilizar cargo
o pnpm
no tenía mucha lógica, y ver como se hace con uv
entra dentro de mi concepción.
Otro de los problemas a los que me solía enfrentar era los entornos de trabajo con distintas versiones de Python, y aquí, de nuevo, uv
lo resuelve de forma excepcional
Desde luego que para mi estas herramientas, han sido un antes y un después, y desde luego, estoy convencido que se van a convertir en el estándar de facto para la gestión de proyectos. Desde luego mi recomendación es que lo pruebes si no lo has hecho ya.
Gracias
Muchas gracias por la info. Solo comentarte que casi siempre que leo un post tuyo lo marco tu mensaje como favorito.