4 puntos por GN⁺ 2025-06-24 | 1 comentarios | Compartir por WhatsApp
  • 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

 
GN⁺ 2025-06-24
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.

    • La mejor parte de uv es que es completamente compatible con el flujo de trabajo basado en venv que ya usabas; se resuelve simplemente ejecutando uv venv.
    • Además, uv se siente mucho más fácil de explicar, especialmente al guiar a principiantes. La combinación de pip + archivo de configuración + venv era confusa: había que crear e instalar en el venv correcto, recordar shebangs raros o activar el venv cada vez que corrías scripts o pruebas, y los mensajes de error tampoco ayudaban del todo. Al enseñárselo a gente nueva, esas herramientas se sentían bastante engorrosas. Ahora basta con recordar "uv run", "uv add" y "uv sync", así que el equipo lo adopta con mucha menos resistencia.
    • En mi caso usaba asdf y luego me pasé a mise, así que me da curiosidad cómo se comparan con herramientas más generales como uv.
    • Mencionaste que el caché de pip ocupaba mucho espacio y que tampoco se podía mover bien de ubicación; me pregunto si uv aprovecha mejor el almacenamiento del repositorio, y si es así, si será porque comparte mejor los archivos.
    • Hace poco vi una guía sencilla en un repositorio experimental que empezaba con "uv a b c" y la probé. Parece que internamente hay bastante duplicación, pero en uso real, sobre un host base GNU-Debian-Ubuntu, no tuve ningún problema y todo funcionó sin complicaciones.
  • 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.

    • A veces instalar un paquete toma como 200 ms, así que apenas alcanzas a notar una mínima demora entre presionar Enter y ver el prompt de vuelta. Con Poetry, en cambio, te da tiempo hasta de ir por un café, así que la diferencia de velocidad es clarísima.
    • A mí me pasó igual; la experiencia es tan fluida que hasta parece que no fuera Python.
    • Tuve una experiencia parecida hace poco, y desde entonces me cambié por completo a uv.
    • Yo también desconfié al principio, pero después de probarlo ya no pude volver atrás.
  • 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.

    • Creo que ese consejo casi siempre aplica cuando se le habla a principiantes que no conocen bien lo que ya existe; es decir, cuando alguien intenta reinventar algo sin entender las limitaciones del sistema actual ni cómo podría mejorarse. Para expertos de verdad, no aplica igual.
    • Más que reinventar la rueda, la metáfora sería que cambiaron una rueda de madera por otra de un material mucho más sólido que puede girar 10 veces más rápido.
    • Con solo ver la historia de la gestión de paquetes en Python, da la impresión de que todo el mundo entra pensando que puede hacerlo mejor que lo anterior.
    • De hecho, el dicho de "no reinventar la rueda" ni siquiera tiene mucho sentido; las ruedas reales también han seguido evolucionando, y no hay razón para que en software no podamos construir ruedas mejores.
    • Cambiando un poco de tema, me da curiosidad por qué la gente prefiere decir "order of magnitude better" en vez de usar simplemente la forma corta "10x".
  • 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.

    • No es un caso raro en absoluto; mucha gente hace side projects en VPS baratos, yo incluido con bastante frecuencia, aunque no en AWS. Gracias por compartirlo; ojalá mejore la autodetección.
  • Ú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 run al principio, puedes ejecutar scripts de Python al instante, así que me ha resultado una herramienta muy útil.

    • Le enseñé esta forma de trabajar a Claude Project con un prompt especializado, y así puede generar automáticamente un script completo con dependencias incluidas a partir de una sola instrucción. El cutoff de Claude 4 es de marzo de 2025, y en Claude Sonnet 4 esta función ya trabaja incluso sin prompt adicional. Por ejemplo, si le pasas una URL, genera de inmediato código que usa httpx y beautifulsoup para hacer scraping y devolver una lista de enlaces en CSV. material relacionado resultado del script de Claude
    • También uso este truco junto con el app-mode de los notebooks de Marimo.io. Si la otra persona solo tiene uv instalado, puedes compartirle fácilmente apps reactivas y reproducibles al vuelo, con preparación mínima. Es una combinación increíble.
    • Ahora ya me acostumbré a correr scripts pequeños de forma improvisada en el momento. Ya no tengo que preocuparme por el entorno ni por administrar dependencias, y eso hace todo mucho más cómodo. artículo sobre the little scripter, video relacionado en YouTube, GitHub de ez-mcp
    • Corrigiendo una lectura errónea del ejemplo: en el contexto de un proyecto, uv add --script y simplemente uv add no son lo mismo. Además, vale la pena revisar la documentación oficial porque hay muchas funciones útiles, como run --with o el soporte de PEP723. guía oficial
    • Pregunta: ¿qué significa exactamente "mydependencies"? ¿Se refiere al archivo de configuración?
  • Probé 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.

    • Ya tampoco uso pyenv ni poetry.
  • 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.

    • Eso sí, después descubrí que ruff solo cubre parte de las verificaciones de pylint y que deja pasar errores demasiado obvios sin detectarlos, incluso código que ni siquiera puede ejecutarse, lo cual fue decepcionante.
  • Últimamente me gustó mucho este patrón para correr pequeños scripts ejecutables, así que lo uso con frecuencia:

    #!/usr/bin/env -S uv --quiet run --script
    # /// script
    # requires-python = ">=3.13"
    # dependencies = [
    #   "python-dateutil",
    # ]
    # ///
    #
    # [python script that needs dateutil]  
    
    • La línea shebang es demasiado difícil de memorizar; me gustaría que existiera una forma más simple como #!/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.