Gestionar dependencias en Python con UV transforma una tarea lenta y frustrante en algo rápido y ordenado. Si trabajas en proyectos grandes donde mantener versiones y las dependencias de esas dependencias se vuelve un dolor de cabeza, esta herramienta creada por el equipo de Astral y construida sobre Rust es para ti.
Por qué UV mejora el manejo de dependencias en Python
El problema es viejo y conocido: cuando un proyecto crece, controlar cada versión y cada dependencia anidada se vuelve casi imposible de rastrear a mano. Aquí es donde entra UV.
UV es una herramienta que te permite instalar Python, crear entornos virtuales e instalar dependencias, todo desde un mismo lugar [00:19]. Y viene acompañada de un archivo clave llamado pyproject, que centraliza la configuración de casi todas las librerías que quieras tener en tu proyecto.
La gran ventaja de fondo es el rendimiento. Como UV usa Rust por debajo para ejecutar las instalaciones, la velocidad al instalar muchas dependencias mejora radicalmente [00:41].
¿Qué es UV en Python? Es una herramienta creada por Astral y basada en Rust que instala Python, crea entornos virtuales y gestiona dependencias desde un solo archivo llamado pyproject, con mucho mejor rendimiento que las opciones tradicionales.
Cómo instalar UV y crear tu primer proyecto
UV es compatible con macOS y Windows, lo que te permite usar exactamente los mismos comandos sin importar el sistema operativo [01:03]. Para tu equipo de desarrollo, esto elimina las diferencias entre plataformas.
La instalación es directa. Ejecutas pip install uv desde tu terminal, que trae todas las dependencias desde PyPI [01:20].
bash
pip install uv
Una vez instalado, el comando uv help te muestra todos los comandos disponibles dentro de la herramienta [01:40]. Y para arrancar sin crear archivos a mano, existe uv init.
Qué archivos crea el comando uv init
Cuando ejecutas uv init, se generan tres archivos automáticamente [02:07]:
- El python-version, donde defines la versión de Python del proyecto para que todos los desarrolladores usen la misma y se eviten incompatibilidades.
- El README, que arranca vacío y luego llenas con el contenido de tu proyecto.
- El pyproject, el archivo genérico que hoy los desarrolladores toman como estándar para manejar variables y dependencias.
Dentro del pyproject vas a encontrar una lista llamada dependencies que al inicio está vacía [02:44]. Ese es el corazón donde se irán registrando tus librerías.
Cómo agregar, quitar y sincronizar dependencias con UV
Aquí viene lo práctico del día a día. Cada comando tiene un propósito claro y todos activan el entorno virtual de forma automática.
Para agregar una librería usas uv add. Por ejemplo, uv add ruff [02:55]. Al ejecutarlo pasan dos cosas: Ruff aparece en el pyproject con su versión más reciente, y se crea el archivo uv.lock.
¿Para qué sirve el archivo uv.lock? Es un archivo que debes compartir con tu equipo porque lista las dependencias de tus dependencias con su versión específica, evitando incompatibilidades entre desarrolladores.
Por qué UV usa el entorno virtual .venv por defecto
Al agregar tu primera dependencia puede aparecer un warning indicando que el entorno virtual no coincide con el proyecto [03:20]. Esto ocurre porque UV crea su propio entorno virtual y usa ese.
El estándar nuevo es nombrar el entorno virtual como .venv, porque los editores de código lo detectan y lo utilizan automáticamente [03:38]. La recomendación es borrar cualquier entorno virtual creado antes y quedarte solo con este.
Si el warning sigue apareciendo después de resolverlo, suele ser porque la terminal quedó con la versión anterior habilitada. Ciérrala, vuélvela a abrir y ejecuta el comando de nuevo [04:23].
Qué hacen los comandos uv remove y uv sync
Para desinstalar paquetes usas uv remove. Al ejecutar uv remove requests, se borra del pyproject y también se eliminan las dependencias que ya no son necesarias [04:44]. Como esas librerías solo existían para dar soporte a requests, UV detecta que sobran y las limpia por ti.
El otro comando clave es uv sync [05:20]. Este es el que usarán los desarrolladores que utilicen tu aplicación.
¿Qué hace el comando uv sync? Sincroniza las dependencias de tu entorno virtual para que queden idénticas a las que están escritas en el archivo del proyecto. Si borraste una librería, la elimina; si la agregaste, la instala.
Por ejemplo, si borras Ruff del archivo y ejecutas sync, se elimina; si lo vuelves a agregar y ejecutas sync de nuevo, vuelve a instalarlo [05:50]. Así todos trabajan sobre exactamente la misma base.
Buenas prácticas al trabajar con UV en tus proyectos
Hay un detalle que no puedes pasar por alto: nunca subas la carpeta .venv a ningún repositorio [06:40]. Esa carpeta solo es útil para ti en tu sistema operativo, y cada sistema maneja versiones e instalaciones distintas.
El reto que te propongo es sencillo pero revelador. Arma una lista de requerimientos grande usando tanto el archivo requirements.txt como el pyproject, y compara cuál de los dos instala más rápido [06:22]. Vas a notar la diferencia que hace Rust por debajo.
Y recuerda la ventaja que lo une todo: al usar UV siempre trabajas con los mismos comandos, sin importar el sistema operativo [07:03]. Eso simplifica la vida de cualquier equipo de desarrollo.
¿Ya probaste UV en alguno de tus proyectos? Cuéntame en los comentarios qué diferencia de rendimiento notaste frente a tu flujo anterior.