Gestion des dépendances Python avec Poetry vs Conda & Pip

Gestion des dépendances Python avec Poetry vs Conda & Pip

vu-managing-python-dependencies-poety-conda-pip Gestion des dépendances Python avec Poetry vs Conda & Pip NEWS

La gestion efficace des dépendances, telles que les bibliothèques, fonctions et packages essentiels à la fonctionnalité d’un projet, est facilitée par l’utilisation d’un gestionnaire de packages. Pip, un outil classique largement adopté, permet l’installation transparente de packages Python depuis le Python Package Index (PyPI). Conda, quant à lui, est reconnu non seulement comme gestionnaire de packages mais aussi comme gestionnaire d’environnement, capable de gérer à la fois les dépendances Python et non-Python, ce qui en fait un outil polyvalent. Pour nos besoins, nous nous concentrerons sur son utilisation principalement pour les environnements Python.

Pip et Conda sont des outils fiables, largement utilisés et approuvés par la communauté des développeurs. Cependant, à mesure que les projets se développent, maintenir l’organisation au milieu d’un nombre croissant de dépendances devient un défi. C’est dans ce contexte que Poetry apparaît comme une solution moderne et organisée de gestion des dépendances.

Poetry, construit sur Pip, introduit une approche contemporaine de la gestion des dépendances. Il va au-delà d’une simple fusion de Pip et d’un environnement virtuel, servant d’outil complet englobant la gestion des dépendances, le packaging de projets et les processus de construction. La comparaison avec Conda est nuancée ; Poetry vise à simplifier le packaging et la distribution des projets Python, en offrant un ensemble distinct de fonctionnalités.

Pip et Conda restent des choix précieux pour gérer les dépendances, grâce à la polyvalence de Conda dans la gestion de diverses dépendances. Poetry, quant à lui, fournit une solution modernisée et complète, offrant une simplicité dans la gestion des projets Python et de leurs dépendances. Le choix de l’outil approprié dépend des exigences spécifiques du projet et des préférences du développeur.

Gestion des paquets

Poetry utilise un fichier pyproject.toml pour spécifier la configuration de votre projet, accompagné d’un fichier de verrouillage généré automatiquement. Le fichier pyproject.toml ressemble à ceci :

[tool.poetry.dependencies]
python = "^3.8"
pandas = "^1.5"
numpy = "^1.24.3"

[tool.poetry.dev.dependencies]
pytest = "^7.3.2"
precomit = "^3.3.3"

Comme d’autres gestionnaires de dépendances, Poetry garde avec diligence une trace des versions de packages dans l’environnement actuel via un fichier de verrouillage. Ce fichier de verrouillage contient des métadonnées du projet, des paramètres de version du package, etc., garantissant la cohérence entre différents environnements. Les développeurs peuvent séparer intelligemment les dépendances en catégories basées sur le développement et sur la production dans les fichiers toml, rationalisant ainsi les environnements de déploiement et réduisant le risque de conflits, en particulier sur différents systèmes d’exploitation.

Le fichier pyproject.toml de Poetry est conçu pour répondre à certaines limitations trouvées dans les fichiers require.txt de Pip et Environment.yaml de Conda. Contrairement à Pip et Conda, qui produisent souvent de longues listes de dépendances sans métadonnées dans un fichier séparé, Poetry vise une représentation plus organisée et concise.

S’il est vrai que Pip et Conda, par défaut, ne disposent pas d’une fonctionnalité de verrouillage, il est important de noter que les versions récentes offrent des options pour générer des fichiers de verrouillage via des bibliothèques installées telles que pip-tools et conda-lock. Cette fonctionnalité garantit que différents utilisateurs peuvent installer les versions de bibliothèque prévues spécifiées dans le fichier Requirements.txt, favorisant ainsi la reproductibilité.

Poetry apparaît comme une solution moderne et organisée pour la gestion des dépendances Python, offrant une organisation, un contrôle de version et une flexibilité améliorés par rapport aux outils traditionnels comme Pip et Conda.

Mise à jour, installation et suppression de dépendances

Avec Poetry, la mise à jour des bibliothèques est simple et prend en compte les autres dépendances pour garantir qu’elles sont à jour en conséquence. Poetry a une commande de mise à jour en masse qui mettra à jour vos dépendances (en fonction de votre fichier toml) tout en gardant toutes les dépendances toujours compatibles les unes avec les autres et en conservant les paramètres de version du package trouvés dans le fichier de verrouillage. Cela mettra simultanément à jour votre fichier de verrouillage.

Quant à l’installation, rien de plus simple. Pour installer des dépendances avec Poetry, vous pouvez utiliser la fonction d’ajout de Poetry qui vous permet soit de spécifier la version, d’utiliser la logique pour spécifier les paramètres de version (supérieurs à, inférieurs à) ou d’utiliser des indicateurs comme @latest qui installera la version la plus récente du package à partir de PyPI. Vous pouvez même regrouper plusieurs packages dans la même fonction d’ajout. Tout package nouvellement installé est automatiquement résolu pour conserver les dépendances correctes.

$poetry add requests pandas@latest

Quant aux gestionnaires de dépendances classiques, testons ce qui se passe lorsque nous essayons d’installer une ancienne version incompatible. Les packages installés par Pip généreront des erreurs et des conflits, mais finiront par installer le package, ce qui peut conduire à un développement qui n’est pas idéal. Conda dispose d’un solveur pour les erreurs de compatibilité et en informera l’utilisateur, mais passe immédiatement en mode recherche pour résoudre le problème de compatibilité et génère une erreur secondaire lorsqu’il ne trouve pas de solution.

(test-env) user:~$ pip install "numpy<1.18.5"
Collecting numpy<1.18.5
Downloading numpy-1.18.4-cp38-cp38-manylinux1_x86_64.whl (20.7 MB)
|████████████████████████████████| 20.7 MB 10.9 MB/s
Installing collected packages: numpy
Attempting uninstall: numpy
Found existing installation: numpy 1.22.3
Uninstalling numpy-1.22.3:
Successfully uninstalled numpy-1.22.3
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
pandas 1.4.2 requires numpy>=1.18.5; platform_machine != "aarch64" and platform_machine != "arm64" and python_version < "3.10", but you have numpy 1.18.4 which is incompatible.
Successfully installed numpy-1.18.4

(test-env) user:~$ pip list
Package Version
--------------- -------
numpy 1.18.4
pandas 1.4.2
pip 21.1.1
python-dateutil 2.8.2
pytz 2022.1
six 1.16.0

Poetry a une réponse immédiate aux erreurs de compatibilité des dépendances pour une notification rapide et précoce des conflits. Il refuse de poursuivre l’installation, l’utilisateur est donc désormais chargé de trouver une version différente du nouveau package ou du package existant. Nous pensons que cela permet plus de contrôle par opposition à l’action immédiate de Conda.

user:~$ poetry add "numpy<1.18.5"

Updating dependencies
Resolving dependencies... (53.1s)
SolverProblemError

Because pandas (1.4.2) depends on numpy (>=1.18.5)
and no versions of pandas match >1.4.2,<2.0.0, pandas (>=1.4.2,<2.0.0) requires numpy (>=1.18.5).
So, because dependency-manager-test depends on both pandas (^1.4.2) and numpy (<1.18.5), version solving failed.
...
user:~$ poetry show
numpy 1.22.3 NumPy is the fundamental package for array computing with Python.
pandas 1.4.2 Powerful data structures for data analysis, time series, and statistics
python-dateutil 2.8.2 Extensions to the standard Python datetime module
pytz 2022.1 World timezone definitions, modern and historical
six 1.16.0 Python 2 and 3 compatibility utilities

Dernier point mais non le moindre, la désinstallation des packages avec Poetry. Certains packages nécessitent davantage de dépendances installées. Pour Pip, la suppression d’un package désinstallera uniquement le package défini et rien d’autre. Conda supprimera certains packages mais pas toutes les dépendances. Poetry, en revanche, supprimera le package et toutes ses dépendances pour garder votre liste de dépendances sans encombrement.

La poésie est-elle compatible avec les projets Pip ou Conda existants ?

Oui, Poetry est compatible avec les projets existants gérés par Pip ou Conda. Initialisez simplement votre code en utilisant le format Poetry.toml de Poetry et exécutez-le pour récupérer la bibliothèque de packages et ses dépendances, permettant une transition transparente.

Si vous avez un projet existant qui utilise Pip ou Conda, vous pouvez le migrer vers Poetry sans trop de difficulté. Poetry utilise son propre fichier pyproject.toml pour gérer les dépendances et les paramètres du projet. Pour commencer à utiliser Poetry dans votre projet, vous pouvez suivre ces étapes :

1. Installez Poetry soit en utilisant curl et passepoil, soit en utilisant Pip

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -

2. Accédez au répertoire racine de votre projet existant.

3. Initialisez Poetry dans le répertoire de votre projet :

Cette commande vous guidera à travers une série d’invites pour configurer la configuration initiale de votre projet.

4. Une fois l’initialisation terminée, Poetry créera le pyproject.toml dans votre répertoire de projet. Ouvrez le fichier toml pour ajouter ou modifier les dépendances de votre projet.

5. Pour installer les dépendances existantes dans votre projet, exécutez :

Cela créera un environnement virtuel et y installera les dépendances du projet.

6. Vous pouvez maintenant utiliser la commande Poetry run pour exécuter les scripts de votre projet, de la même manière que vous utiliseriez les commandes Python ou Conda.

poetry run python my_script.py

Poetry gère l’environnement virtuel et la résolution des dépendances de votre projet, le rendant compatible avec les projets Pip ou Conda existants. Il simplifie la gestion des dépendances et permet des installations de packages cohérentes dans différents environnements.

Remarque : C’est toujours une bonne pratique de sauvegarder votre projet avant d’apporter des modifications significatives à sa configuration ou à ses outils de gestion des dépendances.

Pensées finales

S’assurer que les bonnes versions des packages se trouvent dans votre environnement de code est essentiel pour obtenir les bons résultats à chaque fois. De légères modifications apportées au backend de votre code peuvent modifier le résultat. Mais il est également tout aussi important de maintenir ces packages et bibliothèques à jour, afin de tirer parti des innovations que chaque correctif apporte au suivant.

Pour gérer ces dépendances dans votre code, Poetry est un excellent outil pour ceux qui travaillent sur des projets plus complexes et diversifiés avec un nombre plus élevé de dépendances. Bien que Pip et Conda restent des options viables, ils conviennent mieux aux environnements plus petits et moins complexes. Tout le monde n’utilise peut-être pas Poetry, mais comme Pip existe depuis toujours, cela vaut peut-être la peine d’utiliser simplement Pip.

Mais si votre projet et votre charge de travail valorisent l’importance de l’organisation et sont prêts à explorer de nouveaux outils pour améliorer votre processus, Poetry est un outil que vous devriez considérer. La fonctionnalité étendue de Pip à Poetry fait vraiment la différence. Nous vous encourageons à essayer Poetry par vous-même.

Original. Republié avec autorisation.

Kevin Vu gère le Blog d’Exxact Corp. et travaille avec plusieurs de ses auteurs talentueux qui écrivent sur différents aspects du Deep Learning.

Source