La gestión de entornos y dependencias en Python ha sido históricamente un punto de fricción para muchos desarrolladores. A lo largo del tiempo han surgido herramientas como pip
, virtualenv
, pip-tools
o Poetry
, cada una con su propio enfoque para resolver estos retos. Sin embargo, muchas veces implican compromisos en rendimiento, simplicidad o compatibilidad. En este artículo exploraremos cómo uv
, una herramienta moderna escrita en Rust, ofrece una alternativa rápida y eficiente para gestionar entornos virtuales y resolver dependencias de forma más fluida y predecible.
En este artículo te presento uv
, una herramienta moderna y ultrarrápida para la gestión de proyectos en Python. Escrita en Rust, uv
combina la funcionalidad de múltiples herramientas tradicionales en una sola solución liviana, eficiente y fácil de usar. Desde la instalación de dependencias hasta la creación de entornos virtuales con versiones específicas de Python, uv
se perfila como una excelente alternativa para mejorar tus flujos de desarrollo.
Ya sea que trabajes en proyectos personales, empresariales o colaborativos, adoptar uv
puede ayudarte a reducir tiempos de configuración, evitar conflictos de versiones y simplificar el manejo de herramientas CLI dentro del ecosistema Python.
¿Qué es uv
?
uv
es una herramienta desarrollada por Astral que proporciona una forma ultrarrápida de manejar la instalación de dependencias, creación de entornos virtuales y resolución de versiones. Esta herramienta fue escrita en Rust, lo que le otorga una gran ventaja en velocidad frente a herramientas tradicionales como pip
, virtualenv
o Poetry
.
Entre sus principales características destacan:
- Instalación de dependencias extremadamente rápida.
- Resolución de conflictos de versiones con una experiencia más predecible.
- Compatibilidad con los archivos
pyproject.toml
yrequirements.txt
. - Sustitución directa de herramientas como
pip
,pip-tools
,venv
yPoetry
.
Instalación
Puedes instalar uv
de forma muy sencilla desde la terminal con el siguiente comando:
$ curl -LsSf https://astral.sh/uv/install.sh | sh
Esto descargará e instalará la versión más reciente de uv
directamente desde su repositorio oficial.
Casos de uso
Creación de código portable
Uno de los casos de uso más interesantes de uv
es la posibilidad de crear scripts de Python autocontenidos, es decir, que incluyan las dependencias necesarias declaradas directamente en el archivo fuente. Esto permite distribuir aplicaciones pequeñas de forma mucho más simple, sin necesidad de archivos adicionales como requirements.txt
.
Veamos un ejemplo básico. Supongamos que queremos crear un script que imprima un emoji:
from emoji import emojize
print(emojize(":thumbs_up:"))
El código anterior requiere el módulo de emoji
, y en lugar de declarar esta dependencia en un archivo externo, podemos usar uv
para integrarla directamente al script:
$ uv add --script app.py 'emoji'
Este comando modifica el archivo app.py
agregando la información de las dependencias como comentarios:
# /// script
# requires-python = ">=3.8"
# dependencies = [
# "emoji",
# ]
# ///
from emoji import emojize
print(emojize(":thumbs_up:"))
A partir de aquí, cualquier desarrollador que tenga uv
instalado puede ejecutar el script directamente con:
$ uv run app.py
Installed 2 packages in 6ms
👍
Este enfoque no solo simplifica la distribución, sino que también mejora la trazabilidad y portabilidad del código, algo especialmente útil para scripts, prototipos o herramientas CLI internas.
Administración de ambientes virtuales
Otro caso de uso interesante de uv
es la flexibilidad que ofrece en la creación y manejo de entornos virtuales. A diferencia de venv
o virtualenv
, uv
permite seleccionar explícitamente la versión de Python que se desea usar, lo cual es especialmente útil cuando se trabaja con múltiples versiones en el mismo sistema.
A continuación, un ejemplo práctico donde se crea un entorno virtual usando Python 3.9, aunque el intérprete activo sea una versión distinta:
$ python -V
Python 3.8.1
$ uv venv py39 --python 3.9
Using CPython 3.9.6 interpreter at: /Applications/Xcode.app/Contents/Developer/usr/bin/python3
Creating virtual environment at: py39
Activate with: source py39/bin/activate
Después de activarlo:
$ source py39/bin/activate
(py39) $ python -V
Python 3.9.6
Esto facilita la administración de proyectos que requieren versiones específicas de Python, sin necesidad de recurrir a herramientas externas como pyenv
o manejar manualmente rutas de intérpretes. Basta con tener instaladas las versiones deseadas y uv
se encarga del resto.
Uso global de herramientas de línea de comandos
Una funcionalidad destacada de uv
es su capacidad para ejecutar herramientas de línea de comandos externas sin necesidad de instalarlas manualmente en el entorno actual. Esto se puede hacer de tres formas: de manera global, local dentro del proyecto, o incluso de forma temporal, sin dejar rastros.
Por ejemplo, si queremos formatear un archivo usando black
, pero no lo tenemos instalado en el entorno, podemos simplemente ejecutar:
$ uvx black app.py
Installed 8 packages in 21ms
All done! ✨ 🍰 ✨
1 file left unchanged.
El subcomando uvx
detecta que black
no está disponible y se encarga de instalarlo automáticamente en un entorno temporal y ejecutarlo. Esto es ideal para tareas puntuales como:
- Formateo de código con
black
- Análisis estático con
ruff
oflake8
- Ejecutar scripts auxiliares de desarrollo sin contaminar el entorno actual
Esta funcionalidad ahorra tiempo y evita la proliferación de dependencias innecesarias en cada entorno de desarrollo.
Conclusión
uv
representa una evolución natural en la gestión de entornos y dependencias en Python. Su enfoque en el rendimiento, la simplicidad y la compatibilidad lo convierten en una herramienta poderosa tanto para desarrolladores individuales como para equipos que buscan flujos de trabajo más eficientes y confiables.
A lo largo de este artículo exploramos algunos de sus casos de uso más interesantes:
- La creación de scripts autocontenidos con dependencias embebidas
- La gestión versátil de entornos virtuales con distintas versiones de Python
- La ejecución temporal de herramientas CLI sin necesidad de instalaciones persistentes
En mi experiencia, uv
ha reducido significativamente el tiempo que dedico a la configuración de entornos y ha hecho más predecible la resolución de dependencias. Aunque todavía está evolucionando, ya es una alternativa sólida frente a soluciones más tradicionales como Poetry
o pip-tools
.
Si estás buscando una herramienta moderna, rápida y más amigable para el desarrollo en Python, definitivamente vale la pena probar uv
.