Poetry vs UV : quel gestionnaire pour vos projets Python ?
Introduction
Poetry et UV sont deux gestionnaires modernes de dépendances et d’environnements virtuels pour l’écosystème Python, qui visent à remplacer le duo historique pip + venv ainsi que des outils comme Pipenv ou conda. Ils proposent tous deux une approche projet‑centrée basée sur pyproject.toml, mais avec des philosophies et des compromis différents.
Origine, date de création et langage d’implémentation
Poetry
- Créé à la fin des années 2010, avec une version 1.0 stabilisée autour de 2019–2020.
- Né pour offrir un outil unifié qui gère dépendances, packaging et publication des projets Python.
- Implémenté en Python, avec une partie des fonctionnalités de build dans
poetry-core.
UV
- Développé par Astral (l’équipe derrière Ruff) au milieu des années 2020.
- Pensé comme un gestionnaire de projets et de paquets extrêmement rapide, couvrant Python, les dépendances et les environnements.
- Implémenté en Rust, ce qui permet des temps de résolution et d’installation très courts.
Cadre d’utilisation et objectifs
Poetry
- Gérer le cycle de vie complet d’un package : création de projet, ajout de dépendances, build et publication sur PyPI.
- Proposer une expérience comparable à Bundler, npm ou cargo, avec une configuration centralisée dans
pyproject.tomlet un lockfilepoetry.lock.
- Viser la clarté et la reproductibilité plutôt que la performance brute.
UV
- Remplacer
pip,venv,virtualenv,pip-tools,pipxet une partie des usages de conda, avec un seul binaire.
- Fournir un lockfile universel, des environnements virtuels, une interface compatible
pipet la gestion des versions de Python.
- Cibler des workflows allant du simple script à des workspaces multi‑projets multi‑versions de Python.
Fonctionnalités clés
Poetry
- Dépendances et lockfile :
- Déclaration dans
pyproject.tomlet gel danspoetry.lockpour la reproductibilité.
- Groupes de dépendances (dev, test, docs, etc.) et support des groupes PEP 735.
- Déclaration dans
- Environnements virtuels :
- Création automatique d’un venv par projet, en
.venvlocal ou en emplacement global.
- Commandes comme
poetry runetpoetry env usepour exécuter dans l’environnement et choisir l’interpréteur.
- Création automatique d’un venv par projet, en
- Packaging et publication :
- Build des distributions source/wheel et publication via
poetry publish.
- Intégration forte avec
poetry-corepour suivre les recommandations modernes du packaging Python.
- Build des distributions source/wheel et publication via
UV
- Gestion de Python :
uv python install,uv python list,uv python pinpour installer, lister et pinner des versions de Python.
- Remplace des outils comme pyenv dans beaucoup de cas.
- Dépendances et environnements :
uv add,uv lock,uv sync,uv runpour un workflow complet projet‑centré.
- Interface
pip‑compatible viauv pip install,uv pip freeze,uv pip check.
- Performance et cache global :
- Téléchargements parallèles, cache global dédupliqué, hardlinks / Copy‑on‑Write.
- Lecture partielle des wheels pour accélérer la résolution des dépendances.
- Téléchargements parallèles, cache global dédupliqué, hardlinks / Copy‑on‑Write.
Comparaison de commandes concrètes
Initialisation d’un projet
# Poetry : créer un nouveau projet
poetry new my-project
cd my-project
poetry install # crée l'env virtuel et installe les dépendancesPoetry génère une arborescence type (src/, tests/, pyproject.toml) et installe les dépendances déclarées.
# UV : initialiser un projet
uv init my-project
cd my-project
uv sync # crée l'env virtuel et synchronise les dépendancesuv init crée un pyproject.toml minimal, puis uv sync crée l’environnement et installe les dépendances en se basant sur le lockfile.
Ajouter des dépendances
# Poetry : ajouter une dépendance de base
poetry add requests
# Poetry : ajouter plusieurs dépendances avec contraintes
poetry add requests pendulum@^2.0.5 # ajoute requests et pendulum>=2.0.5,<3.0.0poetry add met à jour pyproject.toml et poetry.lock en une seule commande.
# UV : ajouter une dépendance
uv add requests
# UV : importer depuis un requirements.txt existant
uv add -r requirements.txtuv add met à jour pyproject.toml et le lockfile, et gère la résolution/installation via son moteur rapide.
Dépendances de développement / groupes
# Poetry : dépendance de développement
poetry add --group dev pytest
# Poetry : dépendance optionnelle
poetry add --optional 'cupy'Les groupes et dépendances optionnelles permettent de séparer dev/prod et extras.
# UV : groupe de développement
uv add --dev pytest
# UV : groupe optionnel
uv add --optional gpu-support cupyUV expose explicitement --dev et --optional pour gérer les groupes, là aussi synchronisés dans le lockfile.
Gestion des environnements virtuels
# Poetry : créer ou recréer l'env
poetry install # crée si nécessaire
poetry env use 3.11 # bascule sur un Python 3.11 déjà installé
# Exécuter une commande dans l'env
poetry run pytestPoetry se repose sur des interprètes Python déjà présents sur la machine.
# UV : création d'un venv explicite (facultatif, souvent auto)
uv venv
uv run pytest # exécute pytest dans l'env
# venv avec pip pré‑installé
uv venv --seedUV peut créer l’environnement automatiquement lors de uv add ou uv run, et peut y injecter pip si nécessaire.
Gestion de Python lui‑même (UV uniquement)
# Installer une version précise de Python
uv python install 3.11
# Lister les versions gérées
uv python list
# Pinner une version pour le projet courant
uv python pin 3.11Ces commandes donnent à UV un rôle de gestionnaire de versions de Python en plus du rôle de gestionnaire de dépendances.
Avantages et inconvénients par rapport à venv, conda, pipenv…
Avantages de Poetry
- Sur
pip + venv: lockfile intégré, gestion des groupes, commandes unifiées pour le packaging.
- Sur Pipenv : format standard
pyproject.toml, meilleure intégration avec les recommandations de la Python Packaging Authority.
- Sur conda : plus léger, centré sur PyPI, workflow naturel pour publier sur PyPI.
Avantages de UV
- Sur
pip + venv: un seul binaire pour gérer envs, dépendances, lockfile et souvent Python lui‑même.
- Sur conda : gestion rapide de multiples versions de Python sans tirer tout l’écosystème conda.
- Sur Poetry : performances très supérieures sur la résolution et l’installation des dépendances.
Limites de Poetry
- Résolution/installation plus lentes sur de gros projets.
- Dépend d’un runtime Python déjà installé.
Limites de UV
- Écosystème plus jeune, moins de recul en production et moins de ressources communautaires.
- Demande parfois de revoir les habitudes autour de
pip + venv.
Tableau récapitulatif
| Critère | Poetry | UV |
|---|---|---|
| Langage d’implémentation | Python | Rust |
| Années d’apparition | ~2018–2019 | Milieu des années 2020 |
| Fichier de configuration | pyproject.toml + poetry.lock |
pyproject.toml + lockfile UV |
| Gestion d’environnements | venv par projet, auto‑créé | venv par projet + cache global |
| Gestion de Python | Utilise Python existant | Installation/pinning de Python |
| Remplacements ciblés | pip, venv, pipenv, outils de build | pip, venv, virtualenv, pip-tools, pipx, partiellement conda |
| Focus principal | Workflow structuré, packaging & publication | Performance, unification, multi‑Python |
| Performance d’installation | Correcte mais non optimale | Très rapide |
| Maturité / adoption | Très adoptée en production | Adoption en forte croissance, outil plus jeune |
Recommandations d’usage
- Poetry : idéal si ton objectif principal est un packaging propre pour PyPI, avec un workflow structuré et une équipe déjà à l’aise avec
pyproject.toml.
- UV : pertinent si la vitesse, la gestion de multiples environnements et la capacité à gérer Python lui‑même sont critiques (CI/CD, data, ML).