¿Por qué usar uv?
- Velocidad: Mucho más rápido que
pip - Todo-en-uno: Reemplaza múltiples herramientas
- Moderno: Diseñado para el ecosistema Python moderno
- Confiable: Mejor manejo de dependencias
Ejemplo de Flujo de Trabajo Típico
# 1. Crear proyecto
mkdir mi_proyecto && cd mi_proyecto
# 2. Crear entorno virtual
uv venv
# 3. Activar entorno
source .venv/bin/activate # En Linux/macOS
# 4. Instalar dependencias
uv add requests pandas
uv add --dev pytest
# 5. Sincronizar (si es necesario)
uv sync
# 6. Ejecutar código
uv run python mi_script.py
Una diferencia de uv con el uso tradicional de python y pip. Es que para ejecutar un comando como por ejemplo python algo.py con uv seria uv run python algo.py
Instalación
pipx install uv
Crear y Activar un Entorno Virtual
# Crea un entorno virtual en la carpeta .venv
uv venv
# O especifica un nombre
uv venv nombre_entorno
Activar el entorno virtual
# Linux/macOS
source .venv/bin/activate
# Windows (cmd)
.venv\\Scripts\\activate.bat
# Windows (PowerShell)
.venv\\Scripts\\Activate.ps1
Inicializar un Nuevo Proyecto
# Crea una nueva carpeta con la estructura básica
uv init mi_proyecto
cd mi_proyecto
Instalar Paquetes
uv add requests
# Para un proyecto iniciado con pip
uv pip install -r requirements.txt
Manejar Dependencias
La funcion de requirements.txt de pip, en uv se usa el archivo pyproject.toml.
# Añade una dependencia y actualiza pyproject.toml
uv add pandas
Sincronizar Entornos
Es similar a pip install -r requirements.txt pero mucho más inteligente.
# Un comando actualiza todo
uv sync
# Equivalente a:
# pip uninstall paquetes-eliminados
# pip install nuevas-dependencias
# pip actualizar paquetes-cambiados
pyproject.toml
[project]
name = "mi-proyecto"
version = "0.1.0"
dependencies = [
"requests>=2.25.0",
"pandas>=1.5.0",
"numpy>=1.21.0"
]
[project.optional-dependencies]
dev = [
"pytest>=7.0.0",
"black>=23.0.0",
"flake8>=6.0.0"
]
docs = [
"sphinx>=5.0.0",
"mkdocs>=1.4.0"
]
# Sincroniza solo las dependencias principales
uv sync
# Sincroniza dependencias principales + desarrollo
uv sync --extra dev
# Sincroniza dependencias principales + documentación
uv sync --extra docs
# Sincroniza dependencias principales + desarrollo + documentación
uv sync --extra dev --extra docs
# Sincroniza TODO
uv sync --all-extras
requirements.txt
requests>=2.25.0
pandas>=1.5.0
numpy>=1.21.0
pytest>=7.0.0
black>=23.0.0
requirements-dev.txt
# Desarrollo
pytest>=7.0.0
pytest-cov>=4.0.0
black>=23.0.0
flake8>=6.0.0
# Testing
pytest-mock>=3.0.0
# Sincroniza con requirements.txt principal
uv sync --requirements-file requirements.txt
# Sincroniza con requirements de desarrollo
uv sync --requirements-file requirements-dev.txt
# Sincroniza con múltiples archivos
uv sync --requirements-file requirements.txt --requirements-file requirements-dev.txt
Comandos Adicionales Útiles
# Ver qué haría sin ejecutarlo
uv sync --dry-run
# Version especifica
uv sync --python 3.11
# Forzar reinstalación
uv sync --reinstall
# Sincronizar sin cache
uv sync --no-cache
¿Por qué es mejor que pip install?
pip install -r requirements.txt | uv sync |
|---|---|
| Instala dependencias | Instala + Desinstala + Actualiza |
| Puede dejar paquetes huérfanos | Limpia automáticamente |
| No verifica consistencia | Verifica y resuelve conflictos |
| Múltiples comandos para grupos | Un comando para todos los grupos |
En resumen: uv sync convierte múltiples operaciones manuales en una sola operación automática y confiable. ¡Es como un “reset” limpio de tu entorno!
Otros Comandos Útiles
Listar paquetes instalados
uv pip list
Mostrar información de un paquete
uv pip show requests
Ejecutar comandos en el entorno virtual sin activarlo
uv run python mi_script.py