
Poetry est un outil qui gère les dépendances, l'environnement virtuel et le packaging d'un projet Python à partir d'un seul fichier pyproject.toml. Il remplace le trio pip + requirements.txt + virtualenv par une commande unique, verrouille les versions exactes dans un poetry.lock reproductible, et publie vos paquets sur PyPI.
Ce guide, pour développeurs débutants et intermédiaires, couvre l'installation, la gestion des dépendances, les environnements virtuels et la publication. Il est à jour pour Poetry 2.x, qui apporte le support du format standard [project] (PEP 621) et remplace poetry shell par poetry env activate.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Installer Poetry proprement et l'ajouter au
PATH - Initialiser un projet et comprendre
pyproject.toml - Ajouter, mettre à jour et retirer des dépendances, par groupe
- Gérer l'environnement virtuel (
poetry env activate,poetry run) - Verrouiller les versions avec
poetry.locket sécuriser la supply chain - Construire et publier un paquet sur PyPI
Un peu d'Histoire
Section intitulée « Un peu d'Histoire »Poetry est né d’un constat simple : gérer les projets Python devenait un
véritable parcours du combattant. Entre les environnements virtuels à créer à la
main, les fichiers requirements.txt souvent bancals et les outils existants
comme pip ou pipenv, il manquait un outil tout-en-un, simple et fiable.
C'est là qu'intervient Sébastien Eustace, un développeur qui, en 2018,
décide de prendre les choses en main et de créer Poetry.
Son idée ? Proposer une alternative qui regroupe le meilleur des deux mondes : la gestion des dépendances et des environnements virtuels, tout en intégrant des pratiques modernes comme le fichier pyproject.toml introduit par PEP 518. En quelques années, Poetry a séduit la communauté Python grâce à son approche élégante et efficace.
Aujourd’hui, Poetry est maintenu par une communauté active et se positionne comme une référence incontournable. Ce succès témoigne d’un besoin clair dans l’écosystème Python : des outils simples qui permettent de se concentrer sur l’essentiel, c’est-à-dire coder. Et franchement, qui ne préfère pas une bonne dose de simplicité ?
Fonctionnalités de Poetry
Section intitulée « Fonctionnalités de Poetry »Voici les principales fonctionnalités qui rendent Poetry indispensable :
- Gestion des dépendances intelligente : Ajout, suppression et mise à jour des bibliothèques avec gestion automatique des conflits de versions.
- Fichier
pyproject.toml: Centralisation des dépendances, des métadonnées du projet et des configurations de build. - Environnements virtuels intégrés : Création et gestion automatique d’environnements isolés pour chaque projet.
- Packaging pour PyPI : Génération et publication de packages prêts à être distribués sur la plateforme PyPI.
- Versionnement sémantique : Gestion simplifiée des versions du projet, avec incréments automatiques selon les règles de versionnement sémantique.
- Support des environnements multiples : Organisation des dépendances par groupe, selon les besoins (développement, production, tests, etc.).
- Scripts intégrés : Automatisation des tâches avec des commandes configurables directement dans le fichier de projet.
Avec ces fonctionnalités, Poetry s'impose comme un outil complet et polyvalent pour tout projet Python.
Installation
Section intitulée « Installation »L'installation de Poetry est rapide et accessible, quel que soit votre système. Voici un guide détaillé pour vous accompagner pas à pas, avec une mention spéciale pour les fans de asdf-vm.
Prérequis
Section intitulée « Prérequis »Avant d’installer Poetry, assurez-vous d’avoir :
-
Python 3.7 ou supérieur : Poetry ne fonctionne pas avec des versions antérieures. Vous pouvez vérifier votre version de Python avec :
Fenêtre de terminal python3 --version -
Un gestionnaire de téléchargement : Soit curl (pour les commandes shell), soit pip (préinstallé avec Python).
-
Facultatif : Si vous utilisez déjà asdf-vm pour gérer vos versions d’outils et langages, Poetry dispose d’un plugin officiel. On y revient plus tard dans ce chapitre.
Méthode standard
Section intitulée « Méthode standard »La manière la plus simple et universelle d’installer Poetry est d'utiliser le script officiel. Exécutez la commande suivante :
curl -sSL https://install.python-poetry.org | python3 -Ce script télécharge et configure Poetry pour qu’il soit utilisable sur
votre machine. Par défaut, il installe Poetry dans ~/.local/bin sur
Linux/MacOS ou %APPDATA%\Python\Scripts sur Windows.
Vérification de l’installation
Section intitulée « Vérification de l’installation »Pour vérifier que l’installation s’est bien déroulée, lancez :
poetry --versionSi tout fonctionne, vous verrez un message indiquant la version installée de Poetry.
Si la commande poetry n’est pas reconnue, il se peut que son emplacement ne
soit pas dans le PATH de votre système. Voici comment l’ajouter :
-
Linux/MacOS : Ajoutez cette ligne dans votre fichier
~/.bashrcou~/.zshrc:Fenêtre de terminal export PATH="$HOME/.local/bin:$PATH"Rechargez ensuite votre shell avec :
Fenêtre de terminal source ~/.bashrc -
Windows : Ajoutez
%APPDATA%\Python\Scriptsau PATH via les paramètres système.
Méthode alternative : installation avec asdf
Section intitulée « Méthode alternative : installation avec asdf »Si vous utilisez asdf-vm, un gestionnaire polyvalent pour les versions de langages et d’outils, vous pouvez installer Poetry en tant que plugin. Voici comment :
-
Assurez-vous que asdf-vm est installé sur votre machine.
-
Ajoutez le plugin Poetry à asdf avec la commande :
Fenêtre de terminal asdf plugin add poetry -
Installez la version souhaitée de Poetry :
Fenêtre de terminal asdf install poetry latest -
Définissez cette version comme globale (ou locale pour un projet spécifique) :
Fenêtre de terminal asdf global poetry latest -
Vérifiez l'installation :
Fenêtre de terminal poetry --version
Utiliser asdf est une excellente solution si vous travaillez sur plusieurs projets nécessitant différentes versions de Poetry. Cela garantit un environnement propre et cohérent.
Utilisation de base
Section intitulée « Utilisation de base »Maintenant que Poetry est installé, il est temps de passer à l’action et de découvrir les bases de son utilisation. Que vous souhaitiez initialiser un projet, ajouter des dépendances, ou gérer vos environnements virtuels, Poetry rend tout cela simple et fluide.
Initialiser un projet
Section intitulée « Initialiser un projet »La première étape pour utiliser Poetry est de créer un projet. Poetry
configure tout pour vous, générant un fichier pyproject.toml pour centraliser
la configuration.
poetry initVous serez guidé à travers une série de questions interactives :
- Nom du projet
- Version initiale
- Description
- Auteur(s)
- Dépendances et compatibilité Python
Si vous préférez sauter les questions, utilisez l’option --no-interaction pour
une initialisation rapide avec des valeurs par défaut.
Ajouter des dépendances
Section intitulée « Ajouter des dépendances »Besoin d’ajouter une bibliothèque à votre projet ? Poetry rend cela incroyablement simple. Par exemple, pour installer Flask :
poetry add flaskCreating virtualenv test-poetry-wuC4HPt9-py3.12 in /home/bob/.cache/pypoetry/virtualenvsUsing version ^3.1.0 for flask
Updating dependenciesResolving dependencies... (0.4s)
Package operations: 7 installs, 0 updates, 0 removals
- Installing markupsafe (3.0.2) - Installing blinker (1.9.0) - Installing click (8.1.7) - Installing itsdangerous (2.2.0) - Installing jinja2 (3.1.4) - Installing werkzeug (3.1.3) - Installing flask (3.1.0)
Writing lock fileQuelques points à noter :
- Poetry télécharge automatiquement la version compatible la plus récente.
- Les dépendances sont ajoutées au fichier
pyproject.toml. - Vous pouvez spécifier une version particulière ou un intervalle, comme
flask@^2.0.
Pour des dépendances spécifiques à un environnement (par exemple, des outils de développement) :
poetry add pytest --group dev
Using version ^8.3.3 for pytest
Updating dependenciesResolving dependencies... (0.2s)
Package operations: 4 installs, 0 updates, 0 removals
- Installing iniconfig (2.0.0) - Installing packaging (24.2) - Installing pluggy (1.5.0) - Installing pytest (8.3.3)
Writing lock filePoetry crée un fichier poetry.lock, qui verrouille les versions
exactes des bibliothèques installées pour garantir la reproductibilité.
Gestion des environnements virtuels
Section intitulée « Gestion des environnements virtuels »Un des avantages majeurs de Poetry est sa gestion intégrée des environnements virtuels.
-
Activer l’environnement virtuel :
Fenêtre de terminal poetry env activateCette commande affiche (ou lance) la commande d'activation de l'environnement du projet. Elle remplace
poetry shell, retiré du cœur de Poetry en 2.x (désormais fourni par le pluginpoetry-plugin-shellsi vous tenez à l'ancien comportement). -
Lancer une commande dans l’environnement sans l’activer :
Fenêtre de terminal poetry run python script.py -
Vérifier où est situé l’environnement virtuel :
Fenêtre de terminal poetry env infoVirtualenvPython: 3.12.3Implementation: CPythonPath: /home/bob/.cache/pypoetry/virtualenvs/test-poetry-wuC4HPt9-py3.12Executable: /home/bob/.cache/pypoetry/virtualenvs/test-poetry-wuC4HPt9-py3.12/bin/pythonValid: TrueBasePlatform: linuxOS: posixPython: 3.12.3Path: /usrExecutable: /usr/bin/python3.12
Poetry crée automatiquement un environnement virtuel pour chaque projet, sauf si vous le désactivez via :
poetry config virtualenvs.create falseSupprimer une dépendance
Section intitulée « Supprimer une dépendance »Pour désinstaller une bibliothèque, utilisez simplement :
poetry remove flaskCela met à jour automatiquement les fichiers pyproject.toml et poetry.lock.
Mettre à jour les dépendances
Section intitulée « Mettre à jour les dépendances »Besoin de mettre vos bibliothèques à jour vers les dernières versions compatibles ? Poetry s’en charge :
poetry updatePour une bibliothèque spécifique :
poetry update flaskVérifier l’état des dépendances
Section intitulée « Vérifier l’état des dépendances »Pour une vue d’ensemble des bibliothèques installées et de leurs versions :
poetry showVous pouvez également voir les bibliothèques obsolètes avec :
poetry show --outdatedGérer les scripts
Section intitulée « Gérer les scripts »Si votre projet comporte des scripts ou des commandes spécifiques, vous pouvez
les configurer dans le fichier pyproject.toml. Par exemple :
[tool.poetry.scripts]run = "mon_projet.main:run"Ensuite, exécutez-les simplement avec :
poetry run runÇa me fait penser à un groupe de musique, pas vous ?
Avec ces commandes de base, vous êtes déjà bien équipé pour gérer vos projets Python avec Poetry. Le prochain niveau ? Découvrir les fonctionnalités avancées pour aller encore plus loin !
Utilisation avancée de Poetry
Section intitulée « Utilisation avancée de Poetry »Après avoir maîtrisé les bases de Poetry, il est temps d’explorer ses fonctionnalités avancées. Ces outils permettent de gérer des projets complexes, de travailler efficacement en équipe et de tirer parti de tout le potentiel de l’outil.
Travailler avec des bibliothèques locales
Section intitulée « Travailler avec des bibliothèques locales »Lors du développement d’un projet qui dépend d’un autre module local, Poetry peut le gérer facilement :
-
Ajouter une dépendance locale :
Fenêtre de terminal poetry add ../mon_autre_projet
Cela crée un lien symbolique vers le projet local.
Gestion avancée des versions
Section intitulée « Gestion avancée des versions »Poetry facilite le versionnement grâce à la commande version, qui suit le
versionnement sémantique (SemVer). Vous pouvez incrémenter automatiquement
les parties majeures, mineures ou correctives de votre version :
poetry version patch # Incrémente 1.0.0 -> 1.0.1poetry version minor # Incrémente 1.0.0 -> 1.1.0poetry version major # Incrémente 1.0.0 -> 2.0.0Cela met à jour la version dans le fichier pyproject.toml.
Dépendances spécifiques à un environnement
Section intitulée « Dépendances spécifiques à un environnement »Poetry permet de scinder vos dépendances en groupes, comme développement, tests ou production. Cela vous permet d’éviter d’installer des outils inutiles en production.
-
Ajouter une dépendance pour le développement :
Fenêtre de terminal poetry add black --group dev -
Installer uniquement un groupe spécifique :
Fenêtre de terminal poetry install --with dev -
Ignorer certains groupes, par exemple en production :
Fenêtre de terminal poetry install --without dev
Définir des contraintes de compatibilité
Section intitulée « Définir des contraintes de compatibilité »Pour un contrôle précis des versions de vos dépendances, Poetry utilise des opérateurs tels que :
- ^ : Compatible avec cette version (par exemple
^2.0inclut2.xmais pas3.0). - ~ : Permet les mises à jour dans la même version mineure (par exemple
~2.1inclut2.1.xmais pas2.2).
Dans pyproject.toml, une contrainte pourrait ressembler à ceci :
[tool.poetry.dependencies]flask = "^2.0"Verrouillage des versions exactes
Section intitulée « Verrouillage des versions exactes »Le fichier poetry.lock garantit que tous les membres de l’équipe utilisent les
mêmes versions de bibliothèques. Pour synchroniser l'environnement exactement
sur le lock (et retirer les paquets qui n'y sont plus), utilisez la commande
poetry sync (qui remplace l'ancien poetry install --sync) :
poetry syncSécuriser la supply chain
Section intitulée « Sécuriser la supply chain »Au-delà de la reproductibilité, poetry.lock enregistre l'empreinte
(hash) de chaque paquet : Poetry rejette un artefact qui ne correspond pas,
donc altéré ou substitué sur un miroir compromis. Trois réflexes
renforcent cette protection.
Auditez avant d'installer, pas après. Un paquet malveillant peut exécuter du
code pendant l'installation (via setup.py d'une archive source) : scanner
après coup est déjà trop tard. Auditez d'abord le lock, installez ensuite.
# Auditer les vulnérabilités connues à partir du lockpipx run pip-auditForcez les wheels pour éviter toute exécution de code au build. Un wheel est une archive précompilée qui n'exécute rien à l'installation, contrairement à une archive source :
poetry config installer.only-binary :all:Publiez avec un jeton API, jamais un mot de passe (PyPI ne l'accepte plus) :
le nom d'utilisateur est __token__ et le mot de passe le jeton pypi-....
poetry config pypi-token.pypi pypi-XXXXXXXXPublier un package sur PyPI
Section intitulée « Publier un package sur PyPI »Vous souhaitez partager votre projet avec la communauté ? Poetry simplifie le packaging et la publication.
-
Construire le package :
Fenêtre de terminal poetry buildCela génère des fichiers
.tar.gzet.whlprêts à être envoyés sur PyPI. -
Publier sur PyPI avec le jeton API configuré plus haut (PyPI n'accepte plus le mot de passe) :
Fenêtre de terminal poetry publishTestez d'abord sur TestPyPI en déclarant le dépôt
poetry config repositories.testpypi https://test.pypi.org/legacy/, puispoetry publish -r testpypi.
Configurations globales
Section intitulée « Configurations globales »Poetry propose des options de configuration globale pour personnaliser son comportement. Par exemple, pour désactiver la création d’environnements virtuels globaux :
poetry config virtualenvs.create falseVous pouvez voir toutes les configurations en cours avec :
poetry config --listDéboguer avec Poetry
Section intitulée « Déboguer avec Poetry »Lorsque des problèmes surviennent, utilisez ces commandes pour obtenir des informations utiles :
-
Voir les dépendances et leurs relations :
Fenêtre de terminal poetry show --treeblack 24.10.0 The uncompromising code formatter.├── click >=8.0.0│ └── colorama *├── mypy-extensions >=0.4.3├── packaging >=22.0├── pathspec >=0.9.0└── platformdirs >=2flask 3.1.0 A simple framework for building complex web applications.├── blinker >=1.9├── click >=8.1.3│ └── colorama *├── itsdangerous >=2.2├── jinja2 >=3.1.2│ └── markupsafe >=2.0└── werkzeug >=3.1└── markupsafe >=2.1.1pytest 8.3.3 pytest: simple powerful testing with Python├── colorama *├── iniconfig *├── packaging *└── pluggy >=1.5,<2 -
Obtenir des informations sur l’environnement virtuel :
Fenêtre de terminal poetry env info
Utilisation avec Docker
Section intitulée « Utilisation avec Docker »Si vous travaillez avec Docker, intégrez Poetry directement dans vos images :
-
Installez Poetry dans le Dockerfile :
RUN curl -sSL https://install.python-poetry.org | python3 - -
Assurez-vous d’utiliser l’option
--no-rootdans vos commandes pour éviter les conflits liés aux environnements.
Avec ces fonctionnalités avancées, Poetry devient un outil essentiel pour les projets Python complexes ou collaboratifs. Une fois maîtrisé, il simplifie non seulement la gestion des dépendances, mais aussi le développement et la publication de vos applications.
À retenir
Section intitulée « À retenir »- Poetry centralise tout dans
pyproject.toml: dépendances, métadonnées, build ; Poetry 2.x supporte le format standard[project](PEP 621). poetry add/remove/updategèrent les dépendances et mettent à jourpoetry.lock(versions exactes + hashes).poetry env activateremplacepoetry shell(retiré en 2.x) ;poetry runlance une commande sans activer.- Les groupes (
--group dev) séparent dev, test et production (poetry install --without dev). - Supply chain : auditez le lock avant d'installer (
pip-audit), forcez les wheels (installer.only-binary) pour éviter l'exécution de code au build. - Publier se fait avec
poetry buildpuispoetry publishauthentifié par jeton API, jamais par mot de passe.
FAQ : questions fréquentes
Section intitulée « FAQ : questions fréquentes »Les réponses courtes ci-dessous couvrent les questions les plus recherchées sur Poetry. Les commandes sont valables pour Poetry 2.x.
pyproject.toml.Il remplace le trio pip + requirements.txt + virtualenv par une commande unique :poetry add flask # ajoute la dépendance et met à jour le lock
poetry run python app.py
Les versions exactes sont verrouillées dans poetry.lock, garantissant des installations reproductibles entre développeurs, CI et production.pipx install poetry # isolé et simple
# ou : asdf plugin add poetry / mise use -g poetry
Le script officiel reste disponible :curl -sSL https://install.python-poetry.org | python3 -
Vérifiez avec poetry --version et ajoutez ~/.local/bin au PATH si la commande n'est pas trouvée.poetry add :poetry add flask # dernière version compatible
poetry add 'flask@^3.0' # contrainte de version
poetry add pytest --group dev # dépendance de développement
Poetry résout les versions, met à jour pyproject.toml et régénère poetry.lock. Pour retirer un paquet, poetry remove flask.poetry.lock enregistre les versions exactes de toutes les dépendances (sous-dépendances comprises) avec leur empreinte cryptographique (hash).Il remplit deux rôles :- Reproductibilité : développeurs, CI et production installent exactement les mêmes versions.
- Sécurité : Poetry rejette un paquet dont le hash ne correspond pas (artefact altéré ou substitué).
poetry sync.poetry shell a été retiré du cœur de l'outil. Deux remplaçants :poetry env activate # affiche/lance la commande d'activation
poetry run python script.py # lance sans activer
Si vous tenez à l'ancien comportement de poetry shell, il est fourni par le plugin poetry-plugin-shell à installer séparément.pyproject.toml et un lockfile.
Pour un nouveau projet axé vitesse, uv est souvent le meilleur choix ; Poetry reste pertinent si votre équipe l'utilise déjà ou pour ses fonctionnalités éprouvées.