À quoi ça sert

Quand on développe en Python, on a besoin de plusieurs outils :

  • Une version de Python spécifique (3.11, 3.12…)
  • Un environnement virtuel isolé pour ne pas mélanger les dépendances entre projets
  • Un gestionnaire de paquets pour installer les bibliothèques (FastAPI, NumPy…)
  • Un fichier de verrouillage pour figer les versions et garantir des installs reproductibles

Historiquement, ça veut dire jongler entre pyenv, venv, pip et pip-tools. UV remplace tout ça par un seul outil, et il est 10 à 100 fois plus rapide que pip.

En une phrase

UV = un seul outil pour gérer Python, les environnements virtuels et les paquets, beaucoup plus vite que la stack classique.

Un exemple d'usage

Imagine : tu démarres un nouveau projet d'API avec FastAPI. Avec la stack classique, tu fais quelque chose comme :

bash (ancien monde)
python3 -m venv .venv
source .venv/bin/activate
pip install fastapi uvicorn
pip freeze > requirements.txt

Avec UV, c'est plus direct, plus rapide, et tu obtiens en prime un fichier de lock reproductible :

bash (avec uv)
uv init mon-api
cd mon-api
uv add fastapi uvicorn
uv run uvicorn main:app --reload

UV crée automatiquement l'environnement virtuel, installe Python si besoin, ajoute les dépendances dans pyproject.toml, génère un uv.lock, et lance ton serveur. Pas besoin d'activer manuellement le venv.

How-to : installer et utiliser UV

  1. Installer UV sur ton PC

    Sur Linux / macOS, lance dans un terminal :

    bash
    curl -LsSf https://astral.sh/uv/install.sh | sh

    Sur Windows (PowerShell) :

    powershell
    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

    Vérifie que tout est OK :

    bash
    uv --version
  2. Créer un nouveau projet

    UV scaffolde toute la structure pour toi :

    bash
    uv init hello-uv
    cd hello-uv

    Tu obtiens un pyproject.toml, un main.py, un .python-version, et un dossier .venv sera créé au premier uv run.

  3. Ajouter des dépendances

    Avec uv add, le paquet est installé, ajouté à pyproject.toml et figé dans uv.lock :

    bash
    uv add requests
    uv add --dev pytest
  4. Écrire un petit script d'exemple

    Remplace le contenu de main.py par ceci :

    python
    import requests
    
    def main():
        r = requests.get("https://api.github.com")
        print("Status:", r.status_code)
        print("Routes dispo:", len(r.json()))
    
    if __name__ == "__main__":
        main()
  5. Exécuter le projet

    Pas besoin d'activer le venv : uv run s'en charge.

    bash
    uv run python main.py

    Tu devrais voir s'afficher le code 200 et le nombre de routes de l'API GitHub.

  6. Configurer VS Code

    Pour que VS Code utilise l'environnement créé par UV :

    1. Installe l'extension Python de Microsoft.
    2. Ouvre la palette de commandes (Ctrl+Shift+P / Cmd+Shift+P).
    3. Tape Python: Select Interpreter.
    4. Choisis l'interpréteur dans ./.venv/bin/python (ou .venv\Scripts\python.exe sur Windows).

    VS Code détectera l'environnement automatiquement et tu pourras lancer / déboguer tes scripts directement depuis l'éditeur.

    Astuce

    Tu peux figer ce choix dans le projet en créant .vscode/settings.json avec "python.defaultInterpreterPath": ".venv/bin/python".

  7. Cloner un projet existant en UV

    Si quelqu'un te partage un projet UV, la mise en route tient en une commande :

    bash
    git clone <url-du-repo>
    cd <dossier>
    uv sync

    uv sync télécharge la bonne version de Python, crée le venv et installe exactement les versions du uv.lock. Tu es prêt.

Aide-mémoire des commandes

bash
# Projet
uv init <nom>            # nouveau projet
uv sync                  # installer les deps du lock

# Dépendances
uv add <paquet>          # ajouter une dep
uv add --dev <paquet>    # dep de développement
uv remove <paquet>       # retirer une dep
uv lock --upgrade        # mettre à jour le lock

# Exécution
uv run <cmd>             # lancer dans le venv
uv run python script.py
uv run pytest

# Python
uv python install 3.12   # installer une version
uv python list           # lister les versions dispo

Pour aller plus loin