1 puntos por GN⁺ 2025-02-19 | Aún no hay comentarios. | Compartir por WhatsApp
  • 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 pip y venv
    • 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 PATH o 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 pip y venv, 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 pip y venv sin aprender uv run, uv add ni uvx
    • 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.8 instala 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 PATH mal 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 init crea de forma predeterminada .venv, pyproject.toml, un repositorio git con .gitignore para Python, README.md y hello.py
  • Las dependencias raíz se pueden declarar en pyproject.toml o agregar con uv add
  • uv remove limpia correctamente el repositorio
  • uv lock --upgrade-package <package>==<version> permite actualizar paquetes con cautela, una versión a la vez
  • uv build crea un paquete .whl desde el proyecto, pero uv no exige que el proyecto sea compilable
  • uv run ejecuta 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, pipenv y poetry llegaban 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
  • El ejemplo uv add httpie==2 muestra paso a paso que httpie==2.0.0 depende de requests>=2.22.0, pero el proyecto depende de requests==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 notebook ejecuta Jupyter en el proyecto actual, pero no agrega Jupyter ni sus dependencias al proyecto
  • uvx --with pendulum -p 3.13t python descarga e instala una nueva build No-GIL de Python, crea un entorno virtual temporal, instala pendulum y luego inicia el shell de Python
  • uvx es una herramienta similar a npx para Python, y puede verse como una versión bien hecha de pipx
  • 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ó
  • 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-standalone pueden 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
  • 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_PYTHON tení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
  • uvx y uv tool install, al igual que pipx, fomentan instalar herramientas fuera del proyecto
    • Es adecuado para herramientas independientes como yt-dlp o httpie
    • 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

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 pip y venv
    • 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.

Aún no hay comentarios.