- Tras usar uv durante un año en varios entornos de clientes, simplifica mucho el inicio de proyectos Python y la gestión de dependencias, por lo que vale la pena probarlo primero si el entorno lo permite
- Mantiene casi intacto el flujo de trabajo existente con pip/venv, pero funciona de forma más rápida y estable, por lo que el costo de migración suele ser bajo
- Agrupa en una sola herramienta la instalación de Python, entornos virtuales, archivos de bloqueo, ejecución, compilación y ejecución temporal de herramientas, reduciendo mucho el costo de experimentar con proyectos
- Sin embargo, hay limitaciones reales: fallas al resolver dependencias heredadas, alcance de soporte de
python-build-standalone, caché que puede crecer a más de 20 GB, políticas de seguridad corporativas y la barrera de la CLI - Si sigues trabajando con Python, aunque uses uv, debes conocer pip y venv, y prepararte para entornos donde uv no esté permitido o no encaje
El punto de partida que vuelve difíciles los proyectos Python
- La raíz del mayor problema en Python está en el bootstrapping: preparar Python en sí e iniciar un proyecto nuevo
- Muchos de los problemas de empaquetado que aparecen después también se originan más en la instalación inicial de Python y la configuración del proyecto que en la instalación de dependencias o la compilación de paquetes en sí
- La forma de instalar Python varía según el sistema operativo, y también cambian los valores predeterminados y las trampas
- Aunque es un lenguaje adecuado para principiantes, instalar Python exige muchos conocimientos previos
- Python lo usan grupos muy diversos: estudiantes, científicos de datos, desarrolladores de IA, desarrolladores web, administradores de sistemas, biólogos, geógrafos, desarrolladores de plugins, etc.
- Las diferencias de entorno de ejecución son enormes —máquinas Windows corporativas, laptops personales con Debian, universidades, organismos públicos, startups, fuerzas armadas, laboratorios, grandes empresas—, por lo que es difícil cubrirlo todo con un solo tutorial
PATH,PYTHONPATH, la coexistencia de varias versiones de Python, paquetes opcionales en Linux, Python como dependencia del sistema y la popularidad de las extensiones compiladas aumentan la complejidad- Una buena herramienta de gestión de proyectos Python debe cumplir estas condiciones
- Debe funcionar independientemente del bootstrapping de Python
- Debe unificar la instalación y ejecución de Python entre plataformas y situaciones
- Debe servir de puente con herramientas básicas como
pipyvenv - Debe tener un resolvedor de dependencias potente
- Debe manejar fácilmente instalaciones simples y también permitir tareas complejas, como instalar dependencias bloqueadas en otro sistema operativo
- Debe ser fácil de instalar y usar, y lo bastante confiable como para delegarle una parte importante del stack
El enfoque de bootstrapping de uv
- uv se instala y actualiza de forma completamente independiente de Python, y la instalación de uv y la de Python no se afectan entre sí
- Los problemas de bootstrapping de Python, problemas con
PATHo problemas de importación no afectan a uv en sí - Se reduce la confusión sobre si instalarlo en el sistema o en un entorno virtual, o sobre cómo podrían afectar a uv nuevas palabras clave o deprecaciones
- uv primero ofreció interfaces de
pipyvenv, lo que permitió usarlo con proyectos, herramientas y formas de pensar existentes- Fue una decisión que tuvo en cuenta a la comunidad existente y al código heredado
- Los usuarios pueden usarlo como en el flujo de trabajo tradicional de
pipyvenvsin aprenderuv run,uv addniuvx - La velocidad y confiabilidad obtenidas en las tareas básicas ya dan motivos para migrar
- También ofrece instalación de Python
- Instala de forma uniforme en todos los sistemas operativos
- No requiere permisos de administrador
- Funciona independientemente del Python del sistema
- No hay conflictos aunque se instalen varias versiones
- Proporciona la misma biblioteca estándar e incluye
tkinter - También incluye versiones de Pypy, No-GIL y TCO
- Funciona sin shims, compilación ni valores predeterminados absurdos
Experiencia de instalación de Python y python-build-standalone
- El ejemplo
uv python install pypy3.8instala Python 3.8.16 en 2,71 segundos - Se puede ejecutar del mismo modo en Mac o Windows
- No aparecen paquetes faltantes relacionados con Tcl, OpenSSL o Gzip, conflictos con otras fuentes de instalación de Python, paradigmas distintos según el sistema operativo, comandos faltantes ni
PATHmal configurado - La instalación de Python de uv utiliza python-build-standalone, y Astral adquirió ese proyecto y lo está mejorando
- Astral intenta devolver esos beneficios al proyecto upstream de cPython y también ha contribuido a proyectos open source adyacentes
Funciones de gestión de proyectos
uv initcrea de forma predeterminada.venv,pyproject.toml, un repositorio git con.gitignorepara Python,README.mdyhello.py- Las dependencias raíz se pueden declarar en
pyproject.tomlo agregar conuv add uv removelimpia correctamente el repositoriouv lock --upgrade-package <package>==<version>permite actualizar paquetes con cautela, una versión a la vezuv buildcrea un paquete.whldesde el proyecto, pero uv no exige que el proyecto sea compilableuv runejecuta comandos dentro del entorno virtual aunque este no esté activado- El usuario no necesita conocer la existencia del entorno virtual ni el concepto de activarlo
- Estos comandos actualizan el archivo de bloqueo de forma automática y transparente
- Como uv es rápido, casi no se nota que la actualización ocurre
- El usuario no necesita saber qué es un archivo de bloqueo
- Los archivos de bloqueo son multiplataforma, así que se puede desarrollar en Windows y desplegar en Linux
Rendimiento, estabilidad y mensajes de error
- El rendimiento de uv reduce el costo de instalar dependencias y experimentar con proyectos
- Permite empezar de nuevo rápidamente, así que se pueden repetir muchos intentos sin carga excesiva
- Herramientas como
pyenv,pipenvypoetryllegaban a romperse con stack traces en varios entornos, pero uv funcionó de forma muy robusta - En cuanto a la calidad de Astral, destacan especialmente tres aspectos
- Corrige bugs rápidamente y responde al feedback y a los reportes
- Tiene una fuerte cultura de testing y ofrece el conjunto de pruebas de resolución de dependencias como paquete separado
- Sus mensajes de error son muy buenos
- El ejemplo
uv add httpie==2muestra paso a paso quehttpie==2.0.0depende derequests>=2.22.0, pero el proyecto depende derequests==1, por lo que los requisitos son imposibles de satisfacer - Los mensajes de error de resolución de dependencias también están influenciados por pubgrub, pero los mensajes de error de uv en general siguen la misma dirección
- Al usar uv en contextos educativos, los estudiantes pudieron usarlo productivamente sin mucha intervención, algo que no ocurrió con otras herramientas
- Los proyectos profesionales nuevos obtuvieron fácilmente los beneficios de uv, pero en proyectos heredados pueden aparecer bloqueos
uvx y nuevas formas de uso
- uv ofrece como elementos básicos fuertes y rápidos la preparación y el aislamiento de Python y sus dependencias
- Antes, preparar Python y dependencias era una restricción lenta y propensa a romperse; con uv puede tratarse como una función que permite ajustar el flujo de trabajo
uv run --with jupyter jupyter notebookejecuta Jupyter en el proyecto actual, pero no agrega Jupyter ni sus dependencias al proyectouvx --with pendulum -p 3.13t pythondescarga e instala una nueva build No-GIL de Python, crea un entorno virtual temporal, instalapendulumy luego inicia el shell de Pythonuvxes una herramienta similar anpxpara Python, y puede verse como una versión bien hecha depipx- El soporte de dependencias inline cambia la forma de usar dependencias en pequeños scripts de Python
- Antes había que evitar dependencias en scripts pequeños o recurrir a soluciones alternativas engorrosas
- Ahora se pueden usar dependencias de forma rápida, transparente y autodescriptiva
- Estas funciones no son obligatorias, así que los usuarios pueden descubrirlas y adoptarlas cuando las necesiten
Donde uv falla o resulta incómodo
- uv no puede resolver por sí solo problemas reales de empaquetado
- Problemas como marcadores de versión incorrectos, falta de wheels o conflictos de nombres están fuera del control de uv
- Estos problemas son inherentes a la calidad de los datos en PyPI
- La razón por la que los problemas de empaquetado disminuyen con uv es que maneja correctamente otras partes
- Debido a su resolvedor de dependencias más estricto, pueden romperse entornos virtuales de proyectos heredados que dependían de la resolución laxa de versiones antiguas de
pip- En un caso con una base de código de 15 años recién migrada a Python 3 y apoyada sobre un historial desordenado de
pip freeze, uv no funcionó
- En un caso con una base de código de 15 años recién migrada a Python 3 y apoyada sobre un historial desordenado de
- La instalación integrada de Python de uv está limitada a versiones compiladas con
python-build-standalone- Con el instalador de python.org, deadsnake o pyenv se pueden instalar más versiones de Python
- Puede ser un problema en proyectos antiguos que requieren una versión específica de Python
- uv también funciona bien con Python instalado externamente, así que no es un bloqueo total
- Los ejecutables de
python-build-standalonepueden ser un poco más lentos- Según
pyperformance, Python 3.10 de uv fue 3% más lento que el Python de Ubuntu - También puede haber quienes quieran usar un Python compilado con optimizaciones para su hardware
- Según
- El espacio de caché también puede ser una desventaja
- Tras un año de uso, la caché de uv ocupaba más de 20 GB en disco
- Se puede borrar con
uv cache clean, pero entonces se pierde la ventaja de velocidad - A diferencia de
pip, uv usa hard links para que los paquetes ocupen espacio una sola vez, por lo que posiblemente use menos espacio que varios entornos virtuales completos anteriores
$UV_PYTHONtenía la incomodidad de forzar la versión de Python en lugar de dar una versión predeterminada, y el issue relacionado está en proceso de resolverse- uv es open source, pero es un producto de la empresa comercial Astral
- Astral aún no es rentable y todavía no ha presentado productos comerciales
- Hay quienes opinan que conviene ser cauteloso antes de delegarle una parte importante del stack
- Por otro lado, el costo de migrar a uv y el de salir de uv son bajos
- La mayor limitación es la adopción empresarial
- En entornos de grandes empresas con alta seguridad y bloqueados, instalar nuevas dependencias es muy difícil
- Si el área de seguridad de TI controla lo que se puede hacer en las máquinas, puede no permitir la instalación de uv
- Hasta que llegue a una versión estable y cumpla varios requisitos, tendrá muchas restricciones en entornos corporativos
- La CLI también es una barrera
- No son pocos los usuarios de Python que no están acostumbrados a la línea de comandos, especialmente en Windows
- Una de las razones por las que Anaconda tiene GUI es precisamente esta
- Exigir una herramienta CLI a principiantes absolutos eleva la barrera de entrada
uvxyuv tool install, al igual quepipx, fomentan instalar herramientas fuera del proyecto- Es adecuado para herramientas independientes como
yt-dlpohttpie - Herramientas de desarrollo como
mypy, sensibles a la versión de Python o a la sintaxis de bibliotecas, pueden causar problemas si se instalan con una versión de Python distinta a la del proyecto
- Es adecuado para herramientas independientes como
Cuándo evitar uv
- Hay cinco situaciones en las que no conviene usar uv
- Tienes un proyecto heredado que no funciona con la resolución de dependencias de uv y no tienes capacidad o interés en limpiarlo para migrar
- El entorno corporativo no permite usar uv
- No confías en uv porque aún no es una versión estable, porque Astral todavía no lanzó productos comerciales o porque el grupo de contribuidores de Rust es pequeño
- Necesitas una versión específica de Python que uv no ofrece y no quieres usar uv con un Python instalado externamente
- La CLI es un obstáculo demasiado grande para el equipo
- Los problemas de confianza y de versiones específicas de Python son más una elección que un bloqueo técnico
- Frente a restricciones de entorno corporativo, el usuario no puede hacer mucho
- En la práctica, lo central a considerar son las dependencias heredadas y la barrera de la CLI
- El consejo es simple
- Probar siempre uv primero
- Si no funciona, volver al método anterior o buscar una alternativa
- Si la CLI es el problema, se puede usar el instalador de python.org para preparar Python y proponer un plugin de IDE que envuelva uv
- Quienes pueden programar probablemente puedan aprender los fundamentos de línea de comandos necesarios para usar uv
Posición a futuro
- Para usarlo en entornos empresariales todavía falta cerrar la brecha hasta v1, y en empresas es difícil actualizar con frecuencia, por lo que una versión estable es importante
- Se prevé la posibilidad de agregar funciones de bundling que sean alternativa a pex/shiv, así como un backend de build
- La creación de instaladores para aplicaciones parece una conclusión lógica, pero es mucho más compleja porque incluso manejar correctamente el firmado ya es difícil
- Cuando se ordene el soporte de tareas, para necesidades personales ya estará en un estado con funciones suficientes
- Si Python es tu profesión, aún debes aprender a usar
pipyvenv- Porque algún día puedes encontrarte en una situación donde no puedas usar uv
- En conclusión, uv tiene bajo costo y grandes beneficios, por lo que en entornos donde pueda usarse es una solución de Pareto que vale la pena probar primero
Aún no hay comentarios.