Aller au contenu

Gérer les dépendances Python avec uv

Christophe TREMBLAY-GUILLOUX
Christophe TREMBLAY-GUILLOUXIngénieur système Linux

uv gère les dépendances et l'environnement virtuel d'un projet Python. Tout repose sur trois fichiers, toujours dans le même ordre :

pyproject.toml ──uv lock──▶ uv.lock ──uv sync──▶ .venv/
ce qu'on veut versions exactes ce qui est installé
(plages >=, <)
FichierRôleDans git
pyproject.tomlDépendances voulues, avec des plages de versionsOui
uv.lockVersions exactes résolues, pour toutes les plateformesOui
.venv/Environnement installé sur la machineNon
ÉtapeCommande
Ajouter une dépendanceuv add httpx
Ajouter une dépendance de devuv add --dev pytest
Retirer une dépendanceuv remove httpx
Après un git pulluv sync
pyproject.toml modifié à la mainuv lock, puis uv sync
Mettre à jour un paquetuv lock --upgrade-package httpx
Tout mettre à jouruv lock --upgrade
Lancer une commandeuv run pytest
Avant de commiteruv lock --check

uv add et uv remove mettent à jour les trois étages d'un coup. uv run resynchronise le .venv avant de lancer la commande.

Si le projet déclare ses outils de dev en dépendances optionnelles ([project.optional-dependencies]) plutôt qu'en groupe de dev, on écrit uv add --optional dev pytest et 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 vide le cache des paquets téléchargés. Sans lui, le cache garde chaque version installée et finit par remplir le disque.

  • --locked installe dans le .venv les paquets aux versions exactes listées dans uv.lock, et échoue s'il ne correspond plus à pyproject.toml. C'est l'option à utiliser en CI et en production : un pyproject.toml commité sans son lock est détecté.
  • --frozen installe aussi les versions de uv.lock, mais sans vérifier qu'il correspond encore à pyproject.toml. À éviter, sauf cas particulier.