29 puntos por GN⁺ 2025-10-30 | 7 comentarios | Compartir por WhatsApp
  • uv simplifica de forma revolucionaria la instalación de Python y la gestión de entornos virtuales, resolviendo los problemas de configuración compleja de entornos en el ecosistema Python
  • Escrito en Rust, ofrece velocidad y estabilidad, y maneja instalación de versiones de Python, gestión de paquetes y resolución de dependencias con un solo comando
  • Reconoce automáticamente pyproject.toml y configura el entorno del proyecto, y con uv sync permite reproducir un entorno de desarrollo completamente idéntico entre equipos
  • Con comandos como uv run, uv add y uvx, permite ejecutar sin activar el entorno virtual, además de agregar paquetes y hacer ejecuciones puntuales
  • Al garantizar consistencia en la instalación y ejecución de Python, uv es visto como un punto de inflexión que eleva significativamente la productividad de los desarrolladores y la eficiencia de colaboración

Resumen de uv

  • uv es una herramienta gratuita y de código abierto para administrar Python desarrollada por Astral, con el objetivo de simplificar el complejo proceso de configuración de entornos
    • Astral es el equipo detrás de herramientas de desarrollo Python como Ruff
    • uv permite instalar versiones de Python, instalar paquetes, administrar entornos virtuales y resolver dependencias, y en velocidad es muy superior a las herramientas existentes
  • Está desarrollado en Rust, por lo que ofrece un rendimiento excelente y funciona en casi cualquier plataforma, incluyendo macOS, Linux y Windows

Instalación y uso básico

  • La instalación es muy sencilla y puede hacerse con una sola línea usando curl o un comando de PowerShell
  • Como no modifica la instalación existente de Python, se puede probar con seguridad

Gestión del entorno del proyecto

  • uv administra automáticamente el entorno virtual de cada proyecto Python y configura el entorno al detectar el archivo pyproject.toml
    • En pyproject.toml se definen la versión de Python, la lista de dependencias, el nombre y la versión del proyecto, entre otros datos
    • Ejemplo:
      [project]  
      name = "my_project"  
      version = "1.0.0"  
      requires-python = ">=3.9,<3.13"  
      dependencies = ["astropy>=5.0.0", "pandas>=1.0.0,<2.0"]  
      
    • Este enfoque ofrece una definición de entorno más clara y estandarizada que pip

Crear un proyecto nuevo

  • Con el comando uv init se puede crear fácilmente un proyecto nuevo
    • Crea automáticamente archivos esenciales como pyproject.toml y README.md
    • Admite distintos tipos de inicialización con opciones como --bare y --package
    • Se pueden revisar las opciones detalladas con uv init --help

Sincronizar un proyecto existente

  • Si el proyecto ya tiene pyproject.toml, puede usarse de inmediato con el comando uv sync
    • Instala automáticamente la versión de Python
    • Crea un entorno virtual en el directorio .venv
    • Genera uv.lock, que registra la información exacta de versión de todos los paquetes
  • Con el comando uv run se pueden ejecutar scripts de Python sin activar el entorno
    • Ejemplos: uv run myscript.py, uv run jupyter lab

Gestión de dependencias y versiones de Python

  • Con uv add numpy>=2.0 es posible agregar y administrar dependencias automáticamente
    • No hace falta editar pyproject.toml manualmente
  • Con uv python pin 3.12.9 se puede fijar una versión específica de Python, garantizando la reproducibilidad del entorno

uvx: ejecución puntual rápida

  • uvx es un comando que permite ejecutar herramientas directamente sin configurar un entorno aparte
    • Ejemplos: uvx ruff, uvx jupyter lab, uvx --with pandas,pyarrow ipython
    • Gracias al caché, puede re-ejecutarse muy rápido, lo que lo hace útil para trabajo experimental
  • Así, los desarrolladores pueden configurar fácilmente entornos temporales de ejecución sin depender de un entorno virtual fijo

Si esto todavía no te convence: una nota personal

  • Durante el desarrollo de The Astrosky Ecosystem, se adoptó uv para unificar el entorno Python en múltiples sistemas operativos
    • Ayudó a que todos los desarrolladores y servidores usaran exactamente la misma instalación de Python y las mismas versiones de dependencias
    • uv también administra el entorno Python en GitHub Actions y en los servidores de producción
  • Gracias a uv, desaparecieron los problemas de desajuste entre entornos de instalación y prueba, y la colaboración entre desarrolladores se volvió más simple

Conclusión

  • uv elimina de raíz la complejidad de instalar y administrar Python, y permite que los desarrolladores colaboren de forma estable en un mismo entorno
  • Gracias a su velocidad y a la estabilidad de su base en Rust, uv es considerado “la mayor innovación que ha ocurrido en el ecosistema Python en la última década”

7 comentarios

 
kkksss 2025-11-06

Pensé que pdm era casi muy similar a uv, pero no se habla mucho de pdm.

 
yuntae 2025-10-30

Parece que las publicaciones sobre uv ya no cambian mucho en contenido.

 
pmc7777 2025-10-30

Maven y Gradle también..

 
GN⁺ 2025-10-30
Opiniones en Hacker News
  • Antes se decía que el tooling de Python era suficiente, pero ahora que los desarrolladores de Python han probado un ecosistema basado en lockfiles como npm, cargo o bundler, da gusto ver que por fin entienden sus ventajas
    npm también tiene problemas, pero las instalaciones consistentes y los archivos de bloqueo son un concepto realmente excelente

    • No hay nada más aterrador que tener que ejecutar el proyecto de Python de otra persona
      Sorprende que la gestión de entornos haya sido tan incómoda durante tanto tiempo
    • Me pregunto por qué tardó tanto
      No sé si tantos intentos fallaron simplemente por la dificultad de la gestión de paquetes, o si hacía falta financiamiento de VC
    • Desde hace tiempo he usado pip freeze > requirements.txt y pip install -r requirements.txt
      Si no usas rangos de versiones, en la práctica requirements.txt cumple la función de lockfile
      Por eso me parece que el entusiasmo reciente por el “lockfile oficial” está un poco exagerado
    • npm también pasó bastante tiempo sin lockfile
      Creo que la llegada de yarn fue clave para que npm mejorara
    • Llevo haciendo desarrollo web desde 1998, y creo que PNPM es mucho mejor que npm
      Es más rápido, más eficiente y determinista
      Para más detalles, ver pnpm.io/motivation
  • Con scripts de UV fue posible distribuir clientes/servidores MCP en un solo archivo
    Artículo relacionado: MCP server in a file

  • La mayoría de mis scripts son de un solo archivo, así que agregar esto al principio simplifica muchísimo la vida
    #!/usr/bin/env -S uv run --script
    Así el script se comporta como si fuera un ejecutable independiente, y uv instala automáticamente los módulos necesarios

    • Desde el punto de vista de seguridad, este enfoque tiene cierto riesgo
      porque quien escribió el script podría ocultar dependencias maliciosas
      Estaría bien tener una función de lista blanca
    • A la fecha de hoy, puedes usar la bandera de fecha máxima de lanzamiento para fijar versiones sin lockfile
      Aunque algunos paquetes no detectan la fecha de lanzamiento (por ejemplo, yaml)
    • Para ejecutarlo necesitas tener uv instalado, así que no es completamente standalone
    • También necesitas soporte para /usr/bin/env -S, y en los nombres de dependencias debes usar el nombre del paquete de distribución que usa el comando uv pip install
      Esto sigue el estándar PEP 723 y pipx también lo soporta
    • Se necesita conexión a internet, y dependiendo del estado del repositorio podrían instalarse versiones distintas
  • Antes de usar uv no me interesaba Rust, pero gracias a uv ahora muevo a Rust el código sensible al rendimiento
    Ojalá conda desapareciera por completo. En clústeres de ML los entornos de conda se vuelven enormes y además pierden reproducibilidad

    • Como alternativa a conda, me recomendaron pixi, basado en Rust. Reutiliza el solver de PyPI de uv
    • conda sí es reproducible si fijas las dependencias, pero los builds son lentos
    • Si estás en un clúster de ML, creo que debería estar containerizado, así que conda no haría falta
    • Me pregunto cómo se gestionan las dependencias de CUDA con uv
    • Para un enfoque open source sobre la gestión de dependencias grandes de ML, ver Metaflow docs y el blog de Fast Bakery
  • Antes estaba bastante satisfecho con la combinación pyenv + venv + pip + pipx, pero uv

    • tiene una resolución de dependencias rapidísima
    • con uv run, uv add y demás, la usabilidad mejoró muchísimo
    • integró varias herramientas en una sola
    • y además simplificó la instalación de Python
  • Es mucho más cómodo anteponer uv a un comando que activar manualmente un entorno
    La gestión de versiones de Python también se vuelve más fácil, y da una sensación de batteries included por proyecto
    Aún no sé qué tan estable será a largo plazo, pero ya lo uso por defecto en proyectos nuevos

    • Activar un entorno no es más que ajustar el PATH y el prompt
      Hay gente a la que no le gusta que uv detecte el entorno automáticamente
      No veo tan claro el valor de gestionar versiones de Python, pero recrear entornos con uv sí es mucho más rápido
    • Al anteponer uv, puedes ejecutar comandos de forma stateless, lo que facilita la colaboración
    • Lo uso junto con mise para la activación automática, pero el prefijo uv sigue siendo útil
    • La filosofía de uv es que los venv son desechables. Si algo falla, borras .venv y listo
    • En realidad, este tipo de configuración de entorno simplemente debería “funcionar”
  • Este post del blog coincide casi por completo con mi experiencia
    Hay menos fricción y todo es más simple
    Ojalá la comunidad de Python adoptara uv como herramienta predeterminada

  • Las herramientas basadas en Rust cambiaron por completo la velocidad del feedback
    Eso sí, me pregunto cómo gana dinero Astral. Recibió inversión, pero no tiene productos de pago

    • El modelo de negocio de Astral es vender software empresarial integrado con herramientas open source
      Por ejemplo, un registro de paquetes interno
      Entrevista relacionada: entrevista con Charlie Marsh
    • Un producto con potencial para convertirse en servicio de pago es Pyx
    • Conda también gana dinero solo con el acceso a “paquetes con seguridad reforzada”
      Si hay 10 millones de desarrolladores de Python, uv también debería ser perfectamente monetizable
  • Personalmente, creo que las anotaciones de tipos y la eliminación del GIL son más importantes que uv
    uv todavía está en una etapa temprana y también tiene incomodidades. Al final no deja de ser otro gestor de paquetes

    • Parte de por qué la gente elogia uv es que, en realidad, pip y venv también mejoraron gracias a los PEP estandarizados
      El nuevo resolver de pip y el aumento en la distribución de wheels jugaron un papel importante
      Artículo relacionado: Wheels are faster for pure Python
    • A nivel de lenguaje, eliminar el GIL sería un cambio mayor, pero todavía no hay muchos casos con utilidad real
    • Los type hints ya son una función antigua, introducida en 2015
    • uv no es solo un gestor de paquetes; también aporta mucho valor al simplificar la distribución
      También es interesante que esté escrito en Rust. Tiene una estructura que soporta otros lenguajes, como LLVM
      Desde la perspectiva del usuario final, uv es mucho mejor, y si resulta incómodo para quienes lo mantienen, entonces deberían dar feedback
    • Las anotaciones de tipos sirven para documentación, pero su utilidad práctica es limitada
      Si apareciera un modo estricto, quizá también podría mejorar el rendimiento, aunque eso chocaría con la filosofía del lenguaje
      Aun así, si conda desapareciera, estaría dispuesto a cambiarme a uv
  • A mí no me gusta uv

    • Intenta hacer demasiadas cosas: quiere reemplazar de una sola vez a pip, pyenv, virtualenv e incluso ruff
    • Hay que usar uv pip, así que tampoco es un reemplazo completo
    • Tiene peor compatibilidad con Docker
    • Y hay muchas variables de entorno nuevas, lo que aumenta la complejidad
    • No me parece raro que pyenv, virtualenv y pip existan por separado
      Pero pip y venv también se rompen seguido y son más difíciles de depurar
    • En realidad, pip, pyenv y virtualenv siempre se usan juntos, así que una herramienta integrada tiene sentido
      uv no reemplaza a ruff
      Y ni siquiera hace falta tocar las variables de entorno
    • uv pip no llama a pip, sino que ofrece una interfaz compatible
      En la práctica, uv sí reemplaza a pip
      Me pregunto a qué problemas concretos de compatibilidad con Docker se refieren
    • Si lo gestionas con uv add, uv sync y uv run, resulta mucho más ergonómico y rápido
      Para más detalles, ver la documentación conceptual de dependencias de uv
    • En mi experiencia, uv cumple bien varios roles. Me pregunto qué problemas concretos te tocó enfrentar
 
aer0700 2025-11-01

Está bueno que uv sea rápido, pero también me hace pensar en cómo habría sido si hubieran ido por el camino de mejorar pip.

 
ztaka 2025-11-02

Lo estoy usando mucho en ML y Web, y espero que uv pronto se vuelva una tecnología aburrida jaja

 
doolayer 2025-10-30

Cuando veo un repo que solo tiene requirements y no pyproject.toml, ya me parece anticuado jaja;