uv es una herramienta de Astral para trabajar con Python desde una sola interfaz: puede gestionar versiones de Python, proyectos, dependencias, entornos virtuales, herramientas de línea de comandos y scripts con dependencias declaradas.
La URL ya tiene una intención de búsqueda propia. En la ventana de 90 días revisada acumuló 67 impresiones, con consultas como “que es uv en python” cerca de posición 9 y “uv python que es” alrededor de posición 9. Eso justifica conservar una página específica de uv, pero no las afirmaciones antiguas de que es “la más rápida”, de que los desarrolladores ya abandonaron pip o de que reemplaza universalmente cuatro herramientas.
Qué es uv
Astral presenta uv como un gestor de paquetes y proyectos Python. Su alcance actual va más allá de instalar paquetes: incluye comandos para crear proyectos, resolver y sincronizar dependencias, ejecutar código dentro del entorno del proyecto, instalar versiones de Python y ejecutar herramientas.
La referencia oficial de funcionalidades está en la documentación de uv.
Un flujo de proyecto típico utiliza:
uv init mi-proyecto
cd mi-proyecto
uv add requests
uv run python main.py
uv trabaja con pyproject.toml para las dependencias declaradas del proyecto y con uv.lock para conservar una resolución reproducible.
Proyecto, entorno y lockfile: tres cosas distintas
Es útil separar estos conceptos.
pyproject.toml
Describe el proyecto y sus dependencias directas. Por ejemplo, si agregas requests, el proyecto registra que depende de ese paquete sin necesidad de escribir manualmente una versión exacta de cada subdependencia.
.venv
Es el entorno virtual donde se instalan las dependencias para ejecutar el proyecto. uv puede crear y mantener este entorno como parte del flujo del proyecto, por lo que no necesitas activarlo para usar comandos como uv run.
uv.lock
Registra la resolución completa que uv utilizará para sincronizar el proyecto. El lockfile permite que desarrolladores y entornos automatizados partan de una resolución coherente en vez de volver a resolver libremente cada dependencia en cada instalación.
El comando:
uv sync
sincroniza el entorno del proyecto con lo declarado y bloqueado.
uv add, uv remove, uv lock, uv sync y uv run
Estos comandos cubren tareas diferentes:
uv add httpx
Añade una dependencia al proyecto.
uv remove httpx
La elimina.
uv lock
Actualiza la resolución bloqueada sin que el objetivo principal sea ejecutar el proyecto.
uv sync
Sincroniza el entorno con el proyecto y su lockfile.
uv run pytest
Ejecuta un comando en el contexto del proyecto, utilizando el entorno correspondiente.
Para un equipo, esta separación es más importante que memorizar una lista de “ventajas”: permite decidir cuándo estás modificando dependencias, cuándo estás materializando el entorno y cuándo simplemente ejecutas algo.
Gestionar versiones de Python
uv también puede instalar y seleccionar versiones de Python. Por ejemplo:
uv python install 3.13
uv python pin 3.13
Esto puede simplificar un equipo que antes dependía de un gestor de versiones separado, pero no significa que siempre debas reemplazar la herramienta que ya funciona en tu infraestructura. Un proyecto con imágenes Docker, runners administrados o políticas corporativas puede tener otra fuente canónica para Python.
¿En qué se diferencia de pip?
pip es, ante todo, un instalador de paquetes Python. uv cubre instalación compatible con flujos de pip, pero además ofrece un modelo de proyecto con lockfile, sincronización, ejecución, gestión de Python y herramientas.
Por eso la comparación “uv vs pip” puede ser engañosa si se interpreta como dos productos con exactamente el mismo alcance.
Si sólo necesitas instalar un paquete dentro de un entorno que ya administras, pip puede seguir siendo suficiente. Si quieres que una sola herramienta coordine proyecto, resolución, entorno y ejecución, uv cubre más etapas.
Compatibilidad con requirements y comandos tipo pip
uv incluye una interfaz uv pip para trabajar con entornos y archivos compatibles con flujos tradicionales. Por ejemplo:
uv pip install -r requirements.txt
Esto permite incorporar uv sin convertir inmediatamente cada repositorio a un proyecto gestionado con uv.lock.
Es importante no confundir ambos modos:
uv pip ...se parece al flujo tradicional de instalación en un entorno;uv add,uv lock,uv syncyuv runpertenecen al flujo de proyecto deuv.
Scripts con dependencias declaradas
Python admite metadata inline para scripts, y uv puede utilizarla al ejecutar un archivo. Un ejemplo mínimo:
# /// script
# dependencies = ["httpx"]
# ///
import httpx
print(httpx.get("https://example.com").status_code)
Luego:
uv run script.py
Esto es útil para utilidades autocontenidas que necesitan una o varias dependencias sin convertir cada script en un repositorio completo.
Herramientas con uvx
uvx permite ejecutar herramientas Python en entornos aislados. Por ejemplo, una herramienta de línea de comandos puede utilizarse sin instalarla permanentemente dentro del proyecto actual.
Ese flujo se parece conceptualmente a lo que otras herramientas ofrecen para aplicaciones Python aisladas, pero conviene evaluar cada entorno existente antes de migrarlo sólo por uniformidad.
¿Es más rápido que pip?
Astral destaca el rendimiento como una característica de uv, y su implementación está orientada a resolver, descargar y preparar dependencias eficientemente. Sin embargo, una cifra universal del tipo “10x” o “100x” no describe todos los proyectos, cachés, redes, plataformas ni comparaciones posibles.
Si la velocidad importa en tu caso, mide tu propio flujo:
- parte de un entorno limpio;
- usa las mismas dependencias;
- distingue una instalación fría de una con caché;
- repite varias veces;
- compara también reproducibilidad y mantenimiento, no sólo segundos.
Cómo evaluar una migración desde pip
No necesitas transformar un repositorio estable porque una herramienta sea nueva o popular.
Mantén el flujo actual cuando
- el proyecto es pequeño y funciona bien;
- el entorno está administrado por otra capa;
- cambiar herramientas rompería CI, documentación o procesos sin aportar un beneficio claro;
- una dependencia o plataforma importante todavía exige un flujo particular.
Considera un proyecto gestionado con uv cuando
- quieres declarar dependencias en
pyproject.toml; - necesitas un lockfile compartido;
- quieres sincronizar entornos de forma explícita;
- manejas varias versiones de Python;
- quieres unificar ejecución, herramientas y dependencias en una interfaz.
Haz la migración en una rama y verifica tests, build, scripts, contenedores y CI antes de sustituir el flujo anterior.
Un ejemplo de recorrido mínimo
Para explorar uv sin tocar un proyecto importante:
uv init prueba-uv
cd prueba-uv
uv add httpx
uv run python -c "import httpx; print(httpx.__version__)"
uv tree
Después inspecciona pyproject.toml, uv.lock y .venv. Entender qué archivo controla cada parte del estado resulta más valioso que copiar comandos de memoria.
Fuentes y actualización
uv evoluciona rápidamente. Para comandos y comportamiento actuales conviene usar la documentación oficial de proyectos y la referencia de funcionalidades en lugar de asumir que una guía antigua sigue describiendo exactamente la versión instalada.
Si estás aprendiendo Python
No necesitas aprender uv antes de comprender imports, módulos, dependencias y entornos. Una ruta razonable es entender primero qué problema resuelve un entorno aislado y luego comparar cómo venv/pip y uv materializan ese concepto.
Crezendo mantiene áreas de formación relacionadas con programación; la disponibilidad y el contenido exacto deben confirmarse. Puedes revisar los talleres vigentes o consultar una necesidad concreta. Esta página no anuncia un curso permanente de uv, Python o herramientas de Astral.