uv : Le gestionnaire de packages Python qui remplace pip, pip-tools et venv (Guide 2026)
Si vous avez passé du temps sur un projet Python cette année, vous avez probablement vu « uv » apparaître dans un fichier README ou CI. Il s'agit d'un gestionnaire de paquets écrit en Rust et d'un outil virtualenv d'Astral (la même équipe derrière ruff) — et il est 10 à 100 fois plus rapide que le combo classique pip/pip-tools/venv.
Ce guide couvre : ce que uv remplace réellement, les cinq commandes qui couvrent 95 % de ce que vous faites quotidiennement et les deux cas où vous devez vous en tenir aux outils classiques.
Ce que les UV remplacent
| Outil classique | équivalent UV | Accélération |
|---|---|---|
| python -m venv .venv | uv venv | ~5x |
| pip install paquet | uv pip install pkg | ~10-50x |
| pip install -r exigences.txt | uv pip install -r exigences.txt | 20-100x sur cache froid |
| pip-compile (pip-outils) | compilation pip uv | ~50x |
| python -m venv + source activate pour chaque projet | uv exécuter <cmd> | Ignore complètement l'activation |
La différence de vitesse est réelle. L'installation d'un projet Django modéré (Django + DRF + céleri + redis + boto3 + ~ 40 dépôts transitifs) sur un cache froid prend ~ 45 secondes avec pip et ~ 2 secondes avec uv. Sur un cache chaud, uv est essentiellement instantané car il utilise un cache global lié en dur au lieu de copier des fichiers dans chaque venv.
Les cinq commandes que vous utiliserez réellement
1. Installez uv lui-même
BASH# macOS + Linux — one line, no sudo, no Python needed curl -LsSf https://astral.sh/uv/install.sh | sh # Windows PowerShell powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # Or via brew / apt / your package manager (updated frequently) brew install uv
uv est un binaire unique et autonome – pas de bootstrap Python, pas de dépendances propres.
2. Créez un environnement virtuel
BASHcd my-project uv venv # creates .venv/ using the current Python uv venv --python 3.13 # or pin a version — uv will download it if missing
Contrairement à python -m venv, uv peut récupérer la version Python que vous avez demandée. Fini la danse en trois étapes "pyenv install puis venv then activate".
3. Installer les packages
BASHuv pip install fastapi httpx # into the current venv uv pip install -r requirements.txt # bulk install uv pip install -e . # editable install of current project
La syntaxe est intentionnellement identique à « pip » — remplacez « pip » par « uv pip » et tout fonctionne. Coût de migration : cinq frappes.
4. Exigences de gel/compilation
BASH# From an installed venv → requirements.txt (like `pip freeze`) uv pip freeze > requirements.txt # From a loose requirements.in → fully pinned requirements.txt (like pip-compile) uv pip compile requirements.in -o requirements.txt
L'étape de « compilation » est déterministe : même entrée, même sortie, octet pour octet. Parfait pour les CI reproductibles.
5. Exécutez une commande sans activer le venv
BASHuv run pytest # runs pytest from the current venv uv run python manage.py migrate # any command, any script uv run --with ipython python # temporarily add ipython for this session
C’est la fonctionnalité qui tue. Plus de « source .venv/bin/activate » avant chaque commande. Excellent en CI, excellent en Makefiles, excellent en scripts shell.
Migration d'un projet existant (2 minutes)
En supposant que vous ayez un requirements.txt :
BASH# 1. Nuke the old venv rm -rf .venv # 2. Create the uv venv uv venv # 3. Install uv pip install -r requirements.txt # 4. Verify uv run python -c "import fastapi; print(fastapi.__version__)"
Quatre commandes, c'est fait. Votre requirements.txt n'a pas besoin d'être modifié. Votre pyproject.toml n'a pas besoin d'être modifié. Votre CI a à peine besoin de changer : échangez l'étape d'installation et vous avez terminé.
Le chemin natif de pyproject.toml (projets uv-first)
Pour les projets partant de zéro, utilisez le flux de travail natif d'uv — pas de fichier requis du tout :
BASHuv init my-project # generates pyproject.toml + .python-version + .gitignore cd my-project uv add fastapi # adds fastapi to pyproject.toml [dependencies] AND installs uv add --dev pytest # adds to dev-dependencies uv sync # installs exactly what pyproject.toml says (uses uv.lock) uv lock --upgrade # bumps every dependency to its latest compatible version
C'est la même forme que « cargo » pour Rust ou « npm » pour Node : un fichier de configuration, un fichier de verrouillage, des installations déterministes. Si vous repartez à zéro en 2026, c’est la voie à suivre.
Quand utiliser encore pip / venv
Deux cas :
1. Systèmes CI hérités qui ne peuvent pas installer uv. Si vous êtes coincé avec un agent Jenkins de 2019 sans accès au shell, les difficultés liées à l'installation d'uv peuvent l'emporter sur le gain de vitesse. Chaque système CI moderne (GitHub Actions, GitLab CI, CircleCI, BuildKite) dispose d'un programme d'installation UV sur une seule ligne.
2. Environnements aérés avec un miroir `pip` verrouillé. uv est par défaut PyPI mais prend en charge --index-url — cela fonctionne généralement, mais certains miroirs d'entreprise ont des comportements subtils (en-têtes d'authentification, API JSON vs API simple) que uv gère différemment. Testez avant de vous engager.
C'est ça. Pour tous les autres cas en 2026 (développement solo, projets d'équipe, open source, CI, Docker), uv est plus rapide, plus fiable et nécessite moins de surcharge mentale que la pile classique.
L'échange CI de 30 secondes
Avant (actions GitHub) :
YAML- uses: actions/setup-python@v5 with: python-version: '3.13' - run: pip install -r requirements.txt - run: pytest
Après :
YAML- uses: astral-sh/setup-uv@v3 - run: uv sync - run: uv run pytest
Les exécutions de CI passent d'environ 2 minutes à environ 15 secondes lors de l'étape d'installation. Si votre matrice de test s'exécute 5x par PR, cela représente une véritable économie cumulée.
uv est le rare outil qui est à la fois plus rapide ET plus simple que ce qu'il remplace. Si vous écrivez Python pour gagner votre vie en 2026, passez 10 minutes à changer de projet. L’habitude se perpétuera dans chaque nouveau projet que vous aborderez.
Prochaine étape : le piste Python DevOps couvre uv, ruff, Docker et la pile de déploiement Python moderne – 104 leçons interactives.