TL;DR - Points Cles
uv est 21x plus rapide que pip pour la configuration d'environnements Python. Voici l'essentiel :
| Metrique | pip traditionnel | uv moderne | Amelioration |
|---|---|---|---|
| Temps de setup | 111 secondes | 5.3 secondes | 21x plus rapide |
| Commande | pip install -r requirements.txt |
uv sync |
Plus simple |
| Fichier lock | Manuel | Automatique | Plus fiable |
Migration rapide (3 commandes) :
curl -LsSf https://astral.sh/uv/install.sh | sh # Installer uv uv init && uv add flask requests # Creer le projet uv run python app.py # Executer
Ce guide montre des mesures reelles issues de la migration d'un projet, pas des benchmarks synthetiques.
Qu'est-ce que uv ? Le Package Manager Python Moderne
uv est un gestionnaire de paquets Python ecrit en Rust par Astral (les createurs de Ruff). Il remplace pip, venv et pip-tools par un seul outil ultra-rapide.
Pourquoi uv en 2025
| Fonctionnalite | pip + venv | uv |
|---|---|---|
| Vitesse | Baseline | 10-100x plus rapide |
| Fichiers lock | Manuel (pip-freeze) | Automatique (uv.lock) |
| Gestion Python | Separe (pyenv) | Integre |
| Espace disque | Copies completes | Hardlinks (economise de l'espace) |
| Reproductibilite | Best effort | Garantie |
Documentation officielle : docs.astral.sh/uv
Le Test de Performance Reel : 111s vers 5.3s
La plupart des benchmarks utilisent des exemples triviaux. Ce test a utilise un vrai projet IA avec une complexite reelle :
Specifications du Projet
- Base de donnees : 297MB SQLite avec transcriptions vocales
- Interface : Application web Flask avec streaming audio
- Dependances : flask, pydub, zipstream-ng + deps transitives
- Fonctionnalites : Outils d'export, dashboard analytics, 200+ fichiers audio
Resultats Mesures
Setup pip traditionnel (111 secondes)
$ python3 -m venv test_env $ source test_env/bin/activate $ pip install flask pydub zipstream-ng Collecting flask... Downloading flask-3.1.2-py3-none-any.whl (103 kB) [... resolution des dependances ...] Successfully installed 16 packages Temps total: 111.0 secondes (1 minute 51 secondes)
Setup uv moderne (5.3 secondes)
$ uv sync Resolved 21 packages in 161ms Installed 19 packages in 5.06s + flask==3.1.2 + pydub==0.25.1 + zipstream-ng==1.9.0 [...] Temps total: 5.3 secondes Amelioration: 21x plus rapide
Comparaison Visuelle des Performances
Temps economise : 105.7 secondes par setup
Efficacite : 95.2% de reduction du temps de setup
Comment Installer uv (Toutes Plateformes)
Linux / macOS / WSL
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Verifier l'Installation
uv --version
# uv 0.5.x ou superieur
Astuce : uv se met a jour automatiquement avec uv self update
Guide de Migration Etape par Etape
Etape 1 : Sauvegarder Votre Configuration Actuelle
# Toujours sauvegarder avant de migrer cp requirements.txt requirements.txt.backup cp -r .venv/ .venv_backup/ # Si vous utilisez virtualenv
Etape 2 : Creer pyproject.toml
Creez un fichier pyproject.toml minimal (remplace requirements.txt) :
[project] name = "your-project-name" version = "0.1.0" requires-python = ">=3.11" dependencies = [ "flask", "requests", # Copiez vos dependances depuis requirements.txt ] [dependency-groups] dev = ["pytest", "black", "ruff"] [tool.uv] package = false # Important: C'est une application, pas une bibliotheque
Etape 3 : Executer la Migration
# Ceci remplace: python -m venv .venv && pip install -r requirements.txt
uv sync
Etape 4 : Valider que Tout Fonctionne
# Lancer votre application uv run python app.py # Lancer les tests uv run pytest # Verifier les paquets installes uv pip list
Etape 5 : Generer les Fichiers de Compatibilite (Optionnel)
# Generer requirements.txt pour Docker/CI qui utilise encore pip
uv export > requirements.txt
Pieges Courants de Migration (Et Solutions)
Probleme 1 : Noms de Paquets Incorrects
# Ceci echoue - paquet renomme ou obsolete dependencies = ["zipstream>=2.0.0"] # Utilisez le fork maintenu dependencies = ["zipstream-ng>=1.7.0"]
Solution : Verifiez sur PyPI les noms de paquets actuels.
Probleme 2 : Sur-ingenierie des Systemes de Build
# Inutile pour les applications [build-system] requires = ["uv>=0.5.0"] build-backend = "uv.build" # Les applications n'ont pas besoin de systemes de build [tool.uv] package = false
Solution : Utilisez package = false pour les applications (pas les bibliotheques).
Probleme 3 : Fichiers Externes Manquants
# FileNotFoundError: database.sqlite not found uv run python app.py # Creez des liens symboliques vers les donnees externes ln -sf /path/to/external/database.sqlite .
Solution : Liez les fichiers externes ou utilisez des variables d'environnement pour les chemins.
Probleme 4 : Conflits d'Anciens Environnements Virtuels
# Ancien venv pointant vers une version Python supprimee .venv/bin/python3.14 -> /usr/bin/python3.14 (casse) # Supprimez et recreez rm -rf .venv/ uv sync # Cree un nouveau .venv/
Solution : Supprimez l'ancien .venv/ et laissez uv en creer un nouveau.
uv vs pip vs Poetry vs conda : Quand Utiliser Quoi
Tableau Comparatif
| Critere | uv | pip + venv | Poetry | conda |
|---|---|---|---|---|
| Vitesse | Excellent | Moyen | Bon | Moyen |
| Fichiers lock | Excellent | Faible | Excellent | Bon |
| Courbe d'apprentissage | Bon | Excellent | Moyen | Moyen |
| Deps non-Python | Moyen | Faible | Faible | Excellent |
| Integration CI/CD | Excellent | Bon | Bon | Moyen |
| Publication PyPI | Moyen | Moyen | Excellent | Faible |
Recommandation Rapide
| Cas d'Usage | Outil Recommande |
|---|---|
| Nouvelle app web / API | uv |
| Projet AI/ML avec CUDA | conda + mamba |
| Publication sur PyPI | Poetry |
| Compatibilite maximale | pip + venv |
| Pipelines CI/CD | uv |
| Automatisation par agents IA | uv |
Templates pour Demarrage Rapide
Template 1 : Projet AI/ML
[project] name = "ai-project" version = "0.1.0" requires-python = ">=3.11" dependencies = [ "openai", "langchain", "pydantic>=2.0", "fastapi", "uvicorn", ] [dependency-groups] dev = ["pytest", "black", "ruff", "mypy"] [tool.uv] package = false
# Creer et lancer
uv sync
uv run uvicorn main:app --reload
Template 2 : Application Web Flask
[project] name = "flask-app" version = "0.1.0" requires-python = ">=3.11" dependencies = [ "flask>=3.0", "flask-sqlalchemy", "gunicorn", ] [dependency-groups] dev = ["pytest", "flask-testing"] [tool.uv] package = false
Template 3 : Outil CLI
[project] name = "my-cli-tool" version = "0.1.0" requires-python = ">=3.11" dependencies = [ "click>=8.0", "rich", ] [project.scripts] mytool = "my_cli_tool:main" [tool.uv] package = false
Integration CI/CD
GitHub Actions
name: Python CI with uv on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install uv uses: astral-sh/setup-uv@v4 with: version: "latest" - name: Install dependencies run: uv sync --frozen - name: Run tests run: uv run pytest - name: Lint run: uv run ruff check .
Docker
FROM python:3.12-slim # Installer uv COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv WORKDIR /app COPY pyproject.toml uv.lock ./ # Installer les dependances (couche en cache) RUN uv sync --frozen --no-dev COPY . . CMD ["uv", "run", "python", "app.py"]
Questions Frequentes
Oui, pour la plupart des cas d'usage. uv fournit uv pip install, uv pip list, et d'autres commandes compatibles pip. La difference principale : uv est 10-100x plus rapide et cree des fichiers lock automatiquement.
Oui. Deux options :
# Option 1 : Installer directement depuis requirements.txt uv pip install -r requirements.txt # Option 2 : Convertir vers pyproject.toml (recommande) uv init uv add $(cat requirements.txt | tr '\n' ' ')
Oui, mais creer de nouveaux environnements est recommande. uv peut travailler avec des repertoires .venv/ existants, mais pour de meilleurs resultats :
rm -rf .venv/
uv sync # Cree un venv optimise avec hardlinks
uv gere les installations Python automatiquement :
# Installer une version Python specifique uv python install 3.12 # Fixer la version Python du projet uv python pin 3.11 # Lister les versions disponibles uv python list
Oui. uv est utilise en production par de nombreuses entreprises et est stable depuis 2024. Il est developpe par Astral (la meme equipe que Ruff, utilise par FastAPI, Pydantic, et des milliers de projets).
Considerez des alternatives quand :
- Vous avez besoin de CUDA/bibliotheques systeme : Utilisez conda/mamba
- Vous publiez sur PyPI : Poetry a de meilleurs outils
- Vous avez besoin de compatibilite maximale : pip + venv est universel
- Votre equipe utilise deja Poetry : Le cout de migration peut ne pas valoir le coup
Checklist de Migration
Avant la Migration
- Sauvegarder
requirements.txtet.venv/ - Lister toutes les dependances incluant les outils de dev
- Noter les dependances systeme (CUDA, etc.)
Etapes de Migration
- Installer uv :
curl -LsSf https://astral.sh/uv/install.sh | sh - Creer
pyproject.tomlavec les dependances - Ajouter
package = falsepour les applications - Executer
uv sync - Tester :
uv run python your_app.py
Apres la Migration
- Generer
requirements.txtpour compatibilite :uv export > requirements.txt - Mettre a jour CI/CD pour utiliser uv
- Supprimer l'ancienne sauvegarde
.venv/apres validation - Mettre a jour la documentation
Ressources
-
Documentation officielle uv
Guide complet et reference API
-
GitHub uv
Code source et issues
-
Blog Astral
Annonces uv et articles techniques
-
Specification pyproject.toml
Documentation officielle Python packaging