- uv es una herramienta de gestión de paquetes y proyectos de Python extremadamente rápida, basada en Rust
- Puede reemplazar en una sola herramienta a pip, pip-tools, pipx, poetry, pyenv, virtualenv y más
- Ofrece un rendimiento de hasta 10 a 100 veces más rápido, ahorro de espacio en disco, caché potente y soporte cross-platform
- Incluye funciones para un entorno de desarrollo integrado como gestión de scripts, proyectos, herramientas y múltiples versiones de Python
- Permite implementar un flujo de trabajo moderno de desarrollo en Python, optimizado para productividad, proyectos a gran escala y alta velocidad de trabajo
Introducción al proyecto open source y puntos diferenciales
- uv integra en una sola herramienta las funciones de varias herramientas de gestión de Python existentes, como pip, pip-tools, pipx, poetry, pyenv, virtualenv y twine
- Está desarrollado en Rust, por lo que ofrece un rendimiento sobresaliente, con velocidades de instalación y sincronización 10 a 100 veces más rápidas que el pip tradicional
- Ofrece optimización del uso de disco mediante caché global y eliminación de duplicación de dependencias, además de una CLI intuitiva y compatibilidad familiar con pip
- Puede instalarse como ejecutable independiente en múltiples plataformas como macOS, Linux y Windows
- Se distingue por su mayor comodidad de uso, incluyendo instalación independiente, integración con pip y pipx, y soporte de autoactualización propio
Características principales (Highlights)
- Con una sola herramienta, uv puede reemplazar diversas funciones de pip, pip-tools, pipx, poetry, pyenv, twine y virtualenv
- Proporciona un rendimiento de instalación/actualización/sincronización de 10 a 100 veces más rápido que pip tradicional
- Gestiona dependencias del proyecto con base en lockfile y soporta workspaces y universal lockfile
- Permite declarar dependencias inline en scripts y ejecutarlos con aislamiento automático de entorno
- Soporta gestión/instalación/cambio de múltiples versiones de Python
- Permite ejecutar e instalar herramientas distribuidas como paquetes de Python (reemplazo de pipx)
- Es compatible con la interfaz de pip y añade funciones extra, como sobrescritura de versiones y resolución independiente de la plataforma
- Su workspace estilo Cargo está optimizado para proyectos de gran escala
- Su caché global minimiza la duplicación de dependencias y mejora la eficiencia del espacio en disco
- Puede instalarse y usarse con curl, pip o pipx incluso sin entorno Rust/Python
- Ofrece soporte multiplataforma para macOS, Linux y Windows
- Fue creado por el equipo que desarrolló Astral y Ruff
Gestión de proyectos (Project Management)
- Soporta por completo dependencias, entornos, archivos lock y workspace a nivel de proyecto
- El comando
uv init inicializa automáticamente un proyecto y crea un virtualenv
- Con
uv add se agregan dependencias, y con uv lock y uv sync se automatizan la sincronización de paquetes y las auditorías de seguridad
- Reemplaza las funciones de herramientas modernas de gestión de proyectos Python como Poetry y Rye, garantizando mejor rendimiento y mayor velocidad
- También permite compilar y publicar proyectos no gestionados por uv
Gestión de scripts (Scripts)
- Permite declarar metadatos inline de dependencias en scripts de un solo archivo
- Al ejecutar un script, soporta aislamiento automático del entorno virtual e instalación de dependencias
- Con
uv add --script se gestionan dependencias por script, y con uv run se ejecutan con aislamiento de entorno
- Está optimizado para scripts de uso puntual, como en ciencia de datos o automatización
Gestión de herramientas (Tools)
- Permite instalar y ejecutar herramientas CLI distribuidas como paquetes de Python, al estilo de pipx
- Con
uv tool install y uvx se puede usar ejecución global o en entorno temporal
- Soporta verificación de herramientas instaladas, gestión de versiones y actualizaciones
Gestión de versiones de Python
- Permite instalar fácilmente y cambiar al instante entre varias versiones de Python
- Se pueden gestionar múltiples versiones en paralelo y fijar una versión por proyecto con
.python-version
- También soporta implementaciones alternativas como pypy con la misma interfaz
- Incluye comandos como
uv python install y uv python pin para instalar, fijar y activar versiones
Interfaz de pip (Pip Interface)
uv pip y uv venv pueden reemplazar completamente a pip, pip-tools y virtualenv
- Incluye funciones avanzadas como override de versiones de dependencias, resolución independiente de plataforma y builds reproducibles
- Funciona como reemplazo drop-in de pip sin cambiar el flujo de trabajo existente, con una mejora de rendimiento de 10 a 100 veces
- Soporta conversión de requirements.in a requirements.txt, creación de entornos virtuales y sincronización de requirements
Plataforma y política de versiones
- Soporta varios sistemas operativos: Windows, macOS y Linux
- La información sobre políticas y plataformas compatibles puede consultarse en la documentación oficial
Contribuciones (Contributing)
- Busca apoyar a contribuyentes de todo nivel, desde principiantes hasta expertos, y ofrece guías relacionadas
FAQ
- La pronunciación de uv se representa como “yu-ve”
- El estilo se mantiene fijo en minúsculas: “uv”
Trasfondo técnico y agradecimientos (Acknowledgements)
- El algoritmo de resolución de dependencias utiliza PubGrub
- La implementación de Git está basada en Cargo
- La estrategia de optimización toma mucha inspiración de herramientas modernas de empaquetado como pnpm, Orogene, Bun y Posy
Licencia
- Puede usarse bajo MIT o Apache-2.0
- El código contribuido también se licencia de forma dual bajo las mismas condiciones
1 comentarios
Comentarios de Hacker News
Hasta hace unos meses pensaba que nunca usaría uv, porque ya estaba acostumbrado a venv y pip, y no creía necesitar otra herramienta, pero hace poco me tocó trabajar en un servidor compartido sin permisos de root, con varios paquetes y drivers rotos, y necesitaba pytorch; por esa experiencia me pasé por completo a uv. Con pip todo tardaba mucho, el caché ocupaba muchísimo espacio y además era incómodo cambiar su ubicación. Con uv, en cambio, todo funcionó demasiado bien y quedé muy satisfecho. Si todavía lo estás dudando, te recomiendo probarlo aunque sea 5 minutos.
uv venv.La primera vez que usé uv, era tan rápido comparado con pip que pensé que algo había salido mal o que en realidad no había funcionado.
Creo que uv y ruff son un gran contraejemplo de la idea de "nunca reinventes la rueda". Cuando el objetivo está claro, a veces sí se puede lograr algo muy superior a lo existente.
En sistemas pequeños o de bajos recursos, como un AWS T2.micro con Windows, uv intenta hacer demasiadas descargas concurrentes y termina en timeout. Se puede resolver limitando la concurrencia a 1 o 2 con la variable de entorno
UV_CONCURRENT_DOWNLOADS. Siento que la configuración predeterminada de uv es demasiado agresiva, y estaría bien que mejorara ajustando automáticamente por servidor, por ejemplo usando la velocidad de descarga como referencia.Últimamente he estado usando uv en mi laptop para proyectos personales, y viniendo de pip, la velocidad se siente tan absurda que varias veces dudé si de verdad se había ejecutado bien.
Me encanta el comando
uv add <mydependencies> --script mycoolscript.py, y si además pones#!/usr/bin/env -S uv runal principio, puedes ejecutar scripts de Python al instante, así que me ha resultado una herramienta muy útil.uv add --scripty simplementeuv addno son lo mismo. Además, vale la pena revisar la documentación oficial porque hay muchas funciones útiles, comorun --witho el soporte de PEP723. guía oficialProbé uv hace tiempo y me sorprendió lo absurdamente rápido y fácil de usar que era. A estas alturas casi ya no hay razón para usar pip, y si solo trabajas con Python, tampoco necesitas conda.
Me encanta UV. También me gusta Ruff del equipo de Astral, así que moví todo el linting y formateo desde pylint + Black hacia Ruff. Mi tiempo de lint bajó de 90 segundos a menos de 1.5 segundos, y fue impactante.
Últimamente me gustó mucho este patrón para correr pequeños scripts ejecutables, así que lo uso con frecuencia:
#!/usr/bin/env uvx. Cada vez que quiero usarlo termino teniendo que buscarlo otra vez.Estoy completamente satisfecho y no quiero volver a pip/twine/requirements.txt. Varios proyectos tenían wheels compartidos en un GitLab interno, y pude reemplazar 10 líneas de YAML por solo dos: "uv build" y "uv publish". Es más fácil traer dependencias y también ver de una sola vez cuáles son las principales, sin mezclarlo todo en un requirements.txt.