Poetry: enfin l’outil pour charmer Python ?

Elhadi CHERIFI
Lead Data Engineer
May 12, 2025
10 min
Difficulté:
🌶️
🌶️
Il est en effet assez facile de s’y perdre lors de la gestion des compatibilités entre les différentes versions des packages Python mais aussi et surtout avec les multiples versions de Python à disposition. Nous allons voir à l’aide ce billet de blog une solution nommée Poetry qui promet de nous faciliter la tâche et de rendre le packaging, le build ainsi que le déploiement de nos applications Python aussi simple que possible.
Poetry: les concepts
Projet open source, Poetry se base essentiellement sur des outils assez classiques dans le développement des projets Python tel que pip, venv ou pyenv mais apporte une surcouche qui change l’expérience développeur. Un projet géré par Poetry se base essentiellement sur deux fichiers : pyproject.tomlet poetry.lock
Regardons ce que contiennent ces deux fichiers.
pyproject.toml
À l’initialisation de votre projet il est composé de :
tool.poetry: renseigne des informations sur votre projet (nom, version, description et auteur)tool.poetry.dependencies: les dépendances du projet installées dans un environnement de productiontool.poetry.dev-dependencies: les dépendances du projet installées dans un environnement de dev
Cette distinction entre l’environnement de dev et celui de production nous permet en tant que développeur d’avoir des versions différentes de nos packages ou de nouvelles dépendances qu’il est inutile d’avoir en environnement de production, il est ainsi possible de tester de nouvelles fonctionnalités de manière sereine et isolée sans avoir à installer et ensuite désinstaller ces packages.
Il aura ainsi cette configuration à la création d’un projet nommé, par exemple poetry-demo :
CODE: https://gist.github.com/ElhadiCherifi95/611d81ee5ba98bdde00493eb721e4b20.js
Le fichier pyproject.toml peut incorporer à lui seul le contenu des fichiers requirements.txt, setup.py, setup.cfg, MANIFEST.in ainsi que le fichier Pipfile . L’ensemble des fonctionnalités qu’il est possible d’intégrer sont listées ici.
Notez aussi l’utilisation de wildcard python = "*" ou encore pytest = "^7.1" pour spécifier les versions de vos dépendances, cette manière de faire offre la possibilité de maitriser les futurs versions que Poetry va installer dans le cas d’un update. Elles ne sont pas forcément figées à une version particulière. Nous y reviendrons un peu plus tard dans l’article.
poetry.lock
Une fois vos dépendances installées, Poetry génère un fichier poetry.lock qui centralise toutes les versions exactes de votre projet Python. Ce fichier est capital pour figer les versions des dépendances utilisées. En effet, étant donné que dans le fichier pyproject.toml les versions citées ne sont pas précises avec l’utilisation des wildcards et qu’ils sont souvent amenées à évoluer dans le cas d’une mise à jour, le fichier poetry.lock les renseigne et nous garantit que si ces versions exactes sont installées, alors le projet peut être construit.
C’est une bonne pratique de rajouter le fichier poetry.lock à git pour garantir aux développeurs (y compris vous même), à votre CI ou encore vos serveurs de production la résilience de votre projet en cas d’une nouvelle release de vos dépendances.
Le fichier pyproject.toml représente la vision à long terme des dépendances en cas d’update, ce qui nous permet d’être serein si un update à lieu. Le fichier poetry.lock quand à lui fige les versions avec lequelles le programme marche en ce temps T (ce qui assure que le code n’aura pas de conflit de dépendances sur aucune des machines (local, sur la CI, en production,
Poetry: dans la vraie vie
La surcouche apportée dans Poetry nous apporte une facilité déconcertante dans le développement des projets Python, ainsi il suffit de lancer les commandes suivantes pour:
- Créer/Activer un virtual environment:
CODE: https://gist.github.com/ElhadiCherifi95/3fc8821430c32cbe1c39e397771448a6.js
- Ajouter supprimer ou updater une dépendance:
CODE: https://gist.github.com/ElhadiCherifi95/6069c546fbeece7d30ca911d538e36b9.js
Cette requête est très utile pour avoir une idée claire des versions utilisées, elle a pour résultat une sorte d’arbre qui contient les dépendances, leurs versions mais aussi les sous dépendances installées, voici son retour pour le projet de démo:

- Installer les dépendances:
CODE: https://gist.github.com/ElhadiCherifi95/f81a863ade0c40891cb0c62f9b0918e7.js
Poetry récupère l’ensemble des versions à installer à partir du fichier poetry.lock s’il est existant. Et s’il n’existe pas (au début du projet par exemple), Poetry se base sur le fichier pyproject.toml pour récupérer les dernières versions disponibles des packages cités.
- Build son application:
CODE: https://gist.github.com/ElhadiCherifi95/833deab23fdafc55d53ed470673fc8d6.js
Cette commande génère un fichier .wheel et un fichier.sdist qui représentent votre projet sous forme de package livrable et réutilisable.
- Publier son application:
CODE: https://gist.github.com/ElhadiCherifi95/a1a5f2fa884e6b9bd753d98cfcbc1bdc.js
Cette commande permet de déployer votre projet dans un repository privé qui a été préalablement configuré. Si l’option -r n’est pas spécifiée, le déploiement se fera dans pypi.
- Exécuter du code python:
CODE: https://gist.github.com/ElhadiCherifi95/82e78702fd16dc1b17acd5b1c9cb2614.js
- Changer d’environnement Python:
CODE: https://gist.github.com/ElhadiCherifi95/e5c0f253b855fd9f00c0dd3dfdcd89cc.js
- Lancer les tests unitaires avec pytest:
CODE: https://gist.github.com/ElhadiCherifi95/c159ceffe6ff8a2139ab19cdea31112a.js
Spécifier la version des dépendances avec Poetry
Comme cité plus haut, il est possible de configurer précisément les nouvelles versions de nos dépendances que Poetry est amené à installer lors d’une commande d’update. Géré par des wildcards, cette manière de faire nous permet d’assurer une actualisation de nos dépendances en évitant, si on le souhaite, de passer à des versions majeures pour éviter de casser la compatibilité.
Par exemple, pour spécifier qu’une dépendance ne peut être actualisée en version majeure on peut utiliser la syntaxe suivante dans votre fichier pyproject.toml :
CODE: https://gist.github.com/ElhadiCherifi95/2185d5aa525a8a15dc6fc27c9781d7ad.js
Cette spécification permettra de mettre à jour le package pytest jusqu’à la version 1.3.0. Ainsi, si une version majeure 2.0.0 est amenée à exister, elle ne sera pas installée pour éviter d’avoir des erreurs de rétro-compatibilité. Pour voir l’ensemble des possibilités que propose Poetry concernant les wlidcards, tout est listé ici.
Conclusion
Poetry regroupe à lui seul un ensemble d’outils que l’on devait auparavant utiliser individuellement pour faire vivre nos projets Python (pyenv, venv, pip, twine, ...). Et il fait bien plus que cela, en s’assurant d’avoir toujours un projet qui a des dépendances à jour sans forcément casser la compatibilité.
Ces formations pourraient aussi vous intéresser
Data-dictionnaire
Tech & Data
Poetry Python
Poetry est un outil de gestion de dependances et de packaging pour Python. Il unifie la declaration des dependances, la creation d'environnements virtuels et la publication de packages dans un seul workflow.
Ces contenus pourraient
aussi vous intéresser
Article
Tech & Data
5 min
🌶️
Débutants

Comment leboncoin forme ses Product & Engineering Managers aux enjeux Data & IA.
28.01.2026
Article
Tech & Data
15 min
🌶️
🌶️
Confirmés

Surveiller les accès à vos données AWS avec CloudTrail, EventBridge, Lambda et Firehose.
24.06.2025
Article
Tech & Data
10 min
🌶️
🌶️
Experts

Combiner AWS SageMaker et Lambda pour des prédictions ML en temps réel, sans gérer de serveurs.
12.05.2025
Vidéo
Tech & Data

Quels sont les challenges d'un Lead AI dans une scale-up qui veut faire de l'IA son cheval de bataille stratégique ?
Quels sont les challenges d'un Lead AI dans une scale-up qui veut faire de l'IA son cheval de bataille stratégique ?
Au cours de cette interview, Remi Takase, Lead AI de Mirakl, nous expliquera son quotidien, ses questionnements et ses challenges passés et à venir.
08.07.2025
Vidéo
Tech & Data

Gaël Varoquaux est le co-fondateur de scikit-learn, le projet open-source le plus utilisé pour faire du Machine Learning en Python. Directeur de recherche à l’Inria, il est aussi membre du récent comité scientifique pour l’Intelligence Artificielle Générative. Il nous accorde une interview exclusive durant laquelle il nous partage ses convictions sur l'avenir de l'IA et sur la place de l'open-source.e
Au programme :
- Sa vision Produit autour de scikit-learn et son avenir - et plus généralement la place de l’open-source dans la tech et l’IA
- Ses travaux de recherche à l’Inria - en particulier les applications du Machine Learning sur des questions de santé et de société
- Ses messages et convictions sur les challenges à venir en IA - messages qu’il porte auprès du comité de l'intelligence artificielle générative
08.07.2025
01.07.2025
Prêt à accélérer votre Transformation ?
Nos experts vous accompagnent à chaque étape de votre parcours Data & IA. Discutons ensemble de vos enjeux et objectifs.
