Tech & Data

Poetry: enfin l’outil pour charmer Python ?

Elhadi CHERIFI

Elhadi CHERIFI

Lead Data Engineer

Nom Prénom

Poste

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 production
  • tool.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:

retour de poetry 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é.

Pour aller plus loin

Ces formations pourraient aussi vous intéresser

Data-dictionnaire

Data-dictionnaire

Tech & Data

Poetry Python

Poetry : qu'est-ce que c'est et pourquoi l'utiliser ?

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

Article

Tech & Data

5 min

🌶️

Débutants

Leboncoin x hymaïa : Former les Product & Engineering Managers aux enjeux Data & IA

Comment leboncoin forme ses Product & Engineering Managers aux enjeux Data & IA.

28.01.2026

Voir
Article

Article

Tech & Data

15 min

🌶️

🌶️

Confirmés

Tracking des accès à la donnée dans AWS

Surveiller les accès à vos données AWS avec CloudTrail, EventBridge, Lambda et Firehose.

24.06.2025

Voir
Article

Article

Tech & Data

10 min

🌶️

🌶️

Experts

Serverless Inference : Quand AWS SageMaker rencontre AWS Lambda

Combiner AWS SageMaker et Lambda pour des prédictions ML en temps réel, sans gérer de serveurs.

12.05.2025

Voir
Vidéo

Vidéo

Tech & Data

Les secrets d'une équipe Data Science réussie : automatisation, diversité et innovation

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

Voir
Vidéo

Vidéo

Tech & Data

Café Data avec Gaël Varoquaux

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

Voir
Vidéo

Vidéo

Tech & Data

Kubernetes en 1h pour les dev

01.07.2025

Voir
Ready ?

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.