Gérer les dépendances Python avec uv
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 >=, <)| Fichier | Rôle | Dans git |
|---|---|---|
pyproject.toml | Dépendances voulues, avec des plages de versions | Oui |
uv.lock | Versions exactes résolues, pour toutes les plateformes | Oui |
.venv/ | Environnement installé sur la machine | Non |
Sur le poste de développement
Section intitulée « Sur le poste de développement »| Étape | Commande |
|---|---|
| Ajouter une dépendance | uv add httpx |
| Ajouter une dépendance de dev | uv add --dev pytest |
| Retirer une dépendance | uv remove httpx |
Après un git pull | uv sync |
pyproject.toml modifié à la main | uv lock, puis uv sync |
| Mettre à jour un paquet | uv lock --upgrade-package httpx |
| Tout mettre à jour | uv lock --upgrade |
| Lancer une commande | uv run pytest |
| Avant de commiter | uv 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.
En intégration continue
Section intitulée « En intégration continue »uv sync --lockeduv run pytestSur le serveur
Section intitulée « Sur le serveur »uv cache prune --ciuv sync --locked --no-devuv 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 ou --frozen
Section intitulée « --locked ou --frozen »--lockedinstalle dans le.venvles paquets aux versions exactes listées dansuv.lock, et échoue s'il ne correspond plus àpyproject.toml. C'est l'option à utiliser en CI et en production : unpyproject.tomlcommité sans son lock est détecté.--frozeninstalle aussi les versions deuv.lock, mais sans vérifier qu'il correspond encore àpyproject.toml. À éviter, sauf cas particulier.
