¿Tu script de Python falla por la versión? Ejecútalo con `uv` y olvídate del problema
Cuántas veces te ha pasado: descargas un script útil, lo ejecutas en la terminal y… `ModuleNotFoundError`. O peor aún: `This script requires Python 3.10, but you are running 3.12`. Empiezas a crear entornos virtuales, instalar versiones antiguas, pelear con `pip`, y al final terminas más cansado que programando. Si te suena familiar, respira hondo. Acaba de llegar `uv`, y está cambiando las reglas del juego.
🤔 ¿Qué es `uv` y por qué todo el mundo habla de él?
`uv` es un gestor de paquetes y proyectos para Python escrito en **Rust** por el equipo detrás de `ruff` (el linter que ya está revolucionando cómo escribimos código). Su promesa es simple pero poderosa: **que Python vuelva a ser rápido, predecible y sin fricciones**.
Pero lo que realmente lo hace especial no es solo su velocidad. Es su capacidad para **quitarle al usuario la responsabilidad de gestionar versiones y entornos**. `uv` hace el trabajo sucio en segundo plano. Tú solo escribes código y ejecutas.
✨ La magia: `uv run` y la resolución automática de versiones
Imagina este escenario: tienes un script que necesita Python 3.11 y tres librerías específicas. En el flujo tradicional tendrías que:
1. Ver qué versión tienes instalada.
2. Crear un entorno virtual (`python -m venv .venv`).
3. Activarlo (`source .venv/bin/activate`).
4. Instalar dependencias (`pip install -r requirements.txt`).
5. Rezar para que no haya conflictos.
Con `uv`, el proceso se reduce a **un solo comando**:
```bash
uv run mi_script.py
```
Si el script indica qué versión de Python necesita (ya sea mediante un `pyproject.toml` o con comentarios inline), `uv` hace todo lo demás:
- 🔍 Verifica si esa versión está en tu sistema.
- 📥 Si no está, la descarga automáticamente desde fuentes oficiales.
- 📦 Crea un entorno aislado en su caché global (sin ensuciar tu disco).
- 🚀 Resuelve e instala dependencias en milisegundos.
- ▶️ Ejecuta el script con la configuración exacta.
Para el usuario final, es como hacer doble clic en un ejecutable. **Cero entornos manuales. Cero adivinanzas. Cero fricción.**
📋 ¿Qué más puede hacer `uv`? (Más allá de `uv run`)
`uv` no es solo un "ejecutor automático". Es una suite completa que reemplaza `pip`, `pip-tools`, `virtualenv` y `pyenv` en la mayoría de casos:
| Característica | Qué hace por ti |
|----------------|-----------------|
| 🚀 **Velocidad extrema** | Resuelve e instala paquetes 10-100x más rápido que `pip`. Usa caché global, resolución paralela y compilación optimizada. |
| 🐍 **Gestión automática de Python** | Descarga e instala versiones exactas de CPython (o PyPy) bajo demanda. No rompes tu sistema. |
| 📦 **Entornos virtuales invisibles** | Crea, sincroniza y gestiona `venv` automáticamente. Nunca más tendrás que escribir `activate`. |
| 📝 **Scripts autocontenidos (PEP 723)** | Define dependencias y versión de Python *dentro del propio archivo `.py`*. Ideal para compartir herramientas. |
| 🔁 **100% compatible con estándares** | Lee `pyproject.toml`, `requirements.txt`, `setup.py`. No reinventa la rueda, solo la hace girar más rápido. |
| 🌐 **Instalación universal** | Un solo binario para Windows, macOS y Linux. Sin dependencias de sistema ni compilaciones locales. |
| 🗂️ **Workspaces y proyectos** | Gestiona múltiples paquetes, librerías y aplicaciones en un solo repositorio con dependencias compartidas. |
| 🔒 **Reproducibilidad garantizada** | Genera `uv.lock` (equivalente a `poetry.lock` o `pip-tools`) para que cada ejecución sea idéntica, en cualquier máquina. |
🛠️ Ejemplos reales (copia, pega y funciona)
### 🔹 1. Ejecutar un script con dependencias inline
Crea un archivo `app.py` y pega esto:
```python
# /// script
# requires-python = ">=3.11,<3.13"
# dependencies = ["requests", "rich"]
# ///
import requests
from rich.console import Console
r = requests.get("https://api.github.com")
Console().print(f"[bold green]✅ GitHub respondió: {r.status_code}[/]")
```
Solo ejecuta:
```bash
uv run app.py
```
`uv` leerá los comentarios, provisionará Python 3.12 si no lo tienes, instalará `requests` y `rich`, y ejecutará. **Sin tocar `pip`, sin crear carpetas, sin configurar nada.**
### 🔹 2. Inicializar un proyecto profesional
```bash
uv init mi_api
cd mi_api
uv add fastapi uvicorn httpx
uv run src/main.py
```
En 3 comandos tienes:
- `pyproject.toml` bien estructurado
- `.python-version` con la versión recomendada
- Un entorno virtual sincronizado
- Un `uv.lock` para reproducibilidad total
### 🔹 3. Compartir una herramienta CLI sin complicaciones
Si distribuyes un script, añade los comentarios PEP 723 y dile a tus usuarios:
> "Solo necesitas tener `uv` instalado. Luego escribe `uv run herramienta.py` y listo."
No más guías de 10 pasos. No más "en mi máquina funciona".
📥 ¿Cómo instalarlo? (30 segundos)
`uv` es un único binario autocontenido. No requiere Python para instalarse.
**Linux / macOS:**
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```
**Windows (PowerShell):**
```powershell
irm https://astral.sh/uv/install.ps1 | iex
```
> 💡 *Nota: Se instala en `~/.local/bin` (Unix) o `%USERPROFILE%\.cargo\bin` (Windows). Asegúrate de que esa ruta esté en tu `PATH`.*
## 🧠 Lo que `uv` NO es (y por qué eso es bueno)
`uv` **no es un traductor mágico** que parchea código antiguo para que funcione en Python nuevo. Los cambios de ABI en extensiones C (como `numpy` o `pandas`) y las eliminaciones en la stdlib son reales y no se pueden "polyfilar" en runtime.
Lo que sí hace `uv` es **evitar que tengas que pelear con ellos**. En lugar de intentar forzar compatibilidad, provisiona el entorno exacto que el código necesita, de forma automática, aislada y reproducible. Es la diferencia entre intentar arreglar un coche en marcha… y subirte a uno que ya está listo para conducir.
🎯 Conclusión: Python por fin vuelve a ser accesible
Durante años, la fragmentación de versiones y la gestión de entornos han sido el peaje oculto que pagamos por usar Python. `uv` elimina ese peaje. Ya no tienes que ser experto en `venv`, `pyenv` o `pip` para ejecutar un script. Ya no tienes que explicar a tu equipo cómo configurar un proyecto. Ya no tienes que sufrir en distros rolling como Arch o CachyOS por culpa de un `requires-python` pinneado.
`uv` hace el trabajo sucio. Tú solo escribes código, compartes ideas y ejecutas.
Pruébalo hoy. Y cuando lo hagas, ya no mirarás a `pip install` con nostalgia… sino con alivio.
---
💬 **¿Ya probaste `uv`? ¿Qué te pareció? ¿Tienes ese script que por fin dejaste de pelear por las versiones? Déjame un comentario o comparte esta entrada con ese colega que todavía sufre con `python -m venv`. ¡Nos leemos!** 🐍✨
Tras un retraso considerable, cosas de duendes, ya estoy matriculado para el doctorado. He aquí mi chuleta de configuración de servicios de la UV para ayudar a hacerlo mas rápido a los que vengan detrás. CORREO: GMAIL , POSTAL.UV.ES Wi Fi: EDUROAM CAT VPN: OPENVPN CONNECT Android IOS GNU/Linux MS Windows 7+ (botón derecho guardar enlace como) Android método 2 PUBLICACIONES: SCIENCE DIRECT CORREO: Para empezar el acceso al correo mediante https://correo.uv.es/ me da errores,mando un correo desde una cuenta de gmail que abrí para el doctorado, saludo y recibo una muy útil información, entre otras la de la otro acceso al correo vía web https://sogo.uv.es que probé también con poco éxito al principio, luego, por misterios de la informática ha ido bien. USAR GMAIL para el correo UV.ES: Como el correo no me funciona bien al principìo lo he configuré en gmail : En configuración (en el menú de la...
Comentarios