Accueil / Blog / uv Python Migration

uv Python Package Manager : 21x Plus Rapide que pip

Comment migrer de pip vers uv en 5 minutes avec des gains de performance mesurés. De 111 secondes a 5.3 secondes sur un vrai projet IA.

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

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

COMPARAISON DES TEMPS DE SETUP
pip traditionnel (111s)
uv moderne (5.3s)
Resultat : 21x d'amelioration 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

uv remplace-t-il completement pip ?

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.

Puis-je utiliser requirements.txt avec uv ?

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' ' ')
uv fonctionne-t-il avec les environnements virtuels existants ?

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
Comment uv gere-t-il les versions Python ?

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
uv est-il pret pour la production ?

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).

Quand ne PAS utiliser uv ?

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

Etapes de Migration

Apres la Migration


Ressources

Besoin d'optimiser vos environnements Python ?

Je peux vous accompagner dans la migration de vos projets vers uv et l'optimisation de vos pipelines CI/CD.

Discutons de votre projet