Ir al contenido

Gestionar las dependencias Python con uv

Christophe TREMBLAY-GUILLOUX
Christophe TREMBLAY-GUILLOUXIngeniero de sistemas Linux

uv gestiona las dependencias y el entorno virtual de un proyecto Python. Todo se basa en tres archivos, siempre en el mismo orden:

pyproject.toml ──uv lock──▶ uv.lock ──uv sync──▶ .venv/
lo que se quiere versiones exactas lo que está instalado
(rangos >=, <)
ArchivoPapelEn git
pyproject.tomlDependencias deseadas, con rangos de versionesSí
uv.lockVersiones exactas resueltas, para todas las plataformasSí
.venv/Entorno instalado en la máquinaNo
EtapaComando
Añadir una dependenciauv add httpx
Añadir una dependencia de desarrollouv add --dev pytest
Quitar una dependenciauv remove httpx
Después de un git pulluv sync
pyproject.toml editado a manouv lock y después uv sync
Actualizar un paqueteuv lock --upgrade-package httpx
Actualizarlo todouv lock --upgrade
Ejecutar un comandouv run pytest
Antes del commituv lock --check

uv add y uv remove actualizan las tres capas a la vez. uv run sincroniza el .venv antes de ejecutar el comando.

Si el proyecto declara sus herramientas de desarrollo como dependencias opcionales ([project.optional-dependencies]) en lugar de un grupo de desarrollo, se usa uv add --optional dev pytest y uv sync --extra dev.

bash
uv sync --locked
uv run pytest
bash
uv cache prune --ci
uv sync --locked --no-dev

uv cache prune --ci vacía la caché de paquetes descargados. Sin él, la caché conserva cada versión instalada y acaba llenando el disco.

  • --locked instala en el .venv los paquetes en las versiones exactas listadas en uv.lock, y falla si ya no corresponde a pyproject.toml. Es la opción para CI y producción: se detecta un pyproject.toml subido sin su lock.
  • --frozen también instala las versiones de uv.lock, pero sin comprobar que sigue correspondiendo a pyproject.toml. Mejor evitarlo, salvo casos particulares.