EN COURS DE REDACTION
Vous connaissez certainement la routine par coeur : on installe Python, on crée un environnement virtuel avec python -m venv venv, on l'active, on lance pip install, et pour jongler entre les différentes versions de Python, on ajoute pyenv par dessus (que je trouve d'ailleurs très pratique).
C'est ce que j'ai toujours fait. Quand je suis passé à uv j'étais un peu perdu au début tellement j'avais mes habitudes ancrées. D'ailleurs, uv est déjà énormément adopté dans l'écosystème Python. Voyons ensemble pourquoi, et surtout comment l'utiliser.
Qu'est-ce que uv ?
uv est un gestionnaire de paquets et de projet Python, écrit en Rust par Astral, la même équipe derrière le linter ruff. Son objectif est de remplacer à lui seul toute une panoplie d'outils : pip, venv, virtualenv, pyenv, pipx et même poetry avec un seul exécutable.
Son principal argument c'est sa vitesse : 10 à 100 fois plus rapide que pip. Une installation de dépendance est quasiment instantanée.
Pour vous donner une idée de l'engouement : uv dépasse les 126 millions de téléchargements mensuels en mars 2026. Ce même mois, OpenAI a carrément racheté Astral.
De pip + venv à uv
C'est LA partie la plus importante. Le déclic se fait quand on comprend que uv s'occupe de l'environnement virtuel à votre place. Reprenons un workflow "habituel" :
# 1. On crée un environnement virtuel python -m venv venv # 2. On l'active (et il faut penser à le faire à chaque fois !) source venv/bin/activate # 3. On installe nos paquets pip install requests # 4. On fige les versions à la main pip freeze > requirements.txt # 5. On lance enfin notre code python main.py
Avec uv, on ne crée plus d'environnement virtuel manuellement, on ne l'active plus, et on ne fait plus de pip freeze. Tout ça est géré automatiquement en coulisses. Voici la correspondance directe :
Correspondance pip venv et uv
Une fois ces commandes en tête, vous avez compris 80% de uv.
À noter
Si vous utilisez aussi pyenv pour jongler entre plusieurs versions de Python, sachez que uv le remplace également : pyenv install 3.12 devient uv python install 3.12. On y revient juste après.
Installer uv
uv est autonome : il n'a pas besoin d'avoir Python installé au préalable pour l'installer.
Sur macOS et Linux :
curl -LsSf https://astral.sh/uv/install.sh | sh
Sur Windows (via PowerShell) :
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
À noter
Pour les utilisateurs macOS, vous pouvez installer uv en passant par Homebrew via la commande brew install uv.
Vous retrouverez les différentes façons d'installer uv sur cette page.
Une fois l'installation terminée, pour vérifier que tout fonctionne :
uv --version
À noter
Comme uv est indépendant de Python, c'est lui qui se chargera ensuite de télécharger les versions de Python dont vous avez besoin. Et quand une nouvelle version de uv sort, un simple uv self update suffit à le mettre à jour. Et si vous êtes passez par Homebrew : brew update && brew upgrade.
Créer son premier projet
Pour créer un projet, une seule commande suffit :
uv init patrick cd patrick
uv génère l'arborescence suivante :
. ├── .git/ ├── .gitignore ├── .python-version ├── README.md ├── main.py └── pyproject.toml
Le fichier main.py contient déjà un petit programme. Lançon le :
uv run main.py # Affiche : Hello from patrick!
Il vient de se passer plusieurs choses. uv a créé l'environnement virtuel (.venv), installé les dépendances nécessaires, généré un fichier uv.lock et a exécuté le code dans cet environnement.
Vous devez avoir :
. ├── .git/ ├── .gitignore ├── .python-version ├── .venv/ ├── README.md ├── main.py ├── pyproject.toml └── uv.lock
Regardons les fichiers importants :
-
pyproject.toml: le fichier standard de l'écosystème Python moderne. Il content les métadonnées de votre projet -
.python-version: il indique à uv quelle version de Python utiliser pour ce projet -
.venv: votre environnement virtuel où sont installées les dépendances du projet -
uv.lock: le fichier de verrouillage. Il liste els versions exactes de toutes vos dépendances
Gérer ses dépendances
Pour ajouter une dépendance, on utilise uv add. Pas besoin (ou plus besoin) d'activer quoi que ce soit :
uv add requests
Cette commande met à jours trois fichiers : pyproject.toml, .venv, uv.lock. Il est aussi possible d'installer une version particulière :
uv add 'requests==2.31.0'
Pour vos outils de développement (tests, linter, etc.), on les sépare des dépendances de production avec --dev :
uv add --dev pytest ruff
dev est un groupe de dépendances déjà reconnu par uv. pytest et ruff sont rangés dans une table à part de votre pyproject.toml :
[project] name = "patrick" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.8" dependencies = [ "requests>=2.32.4", ] [dependency-groups] dev = [ "pytest>=8.3.5", "ruff>=0.15.20", ]
uv runet uv sync installent toujours vos dépencances de production et le groupe dev. Pour obtenir uniquement l'environnement de production, sans pytest ni ruff, il faut explicitement demander à uv de l'exclure :
uv sync --no-dev