env python

Comprendre la différence entre pip, conda, venv, poetry…

Emmanuel Jakobowicz Mis à jour le : 11 avril 2024 méthode, python Laissez un commentaire

Vous vous êtes lancé dans le développement avec le langage Python et chaque développeur que vous croisez vous parle de nouveaux outils. Nous allons ici clarifier le rôle de quelques outils que nous utilisons au quotidien.

Parmi ces outils, on trouve pip, conda, poetry, venv, virtualenv, pipenv... Ils sont souvent rassemblés dans la famille des gestionnaires de packages / d'environnements mais ceci couvre énormément de cas d'usages différents.

Avant de se concentrer sur les outils, un petit rappel de ce dont on a besoin pour coder en Python :

  1.  Une ou plusieurs versions de Python
  2. Des packages et leurs dépendances
  3. Une IDE bien adapté
  4. Parfois des codes / packages dans d'autres langages (par exemple Cuda pour le deep learning sur GPU)
  5. Des environnements virtuels pour gérer les packages associés à chaque projet

Pour répondre à toutes ces contraintes, il faut vous équiper d'un certain nombre d'outils et chacun ont leurs propres spécificités.

Quelques définitions

Un package : on l'appelle aussi bibliothèque, librairie... Il s'agit d'un ensemble de classes, de fonctions ou de modules qui travaillent ensemble pour fournir des fonctionnalités spécifiques qui ne sont pas disponibles dans le langage Python.

Une dépendance : ceci fait référence à un autre package ou ensemble de packages nécessaires pour qu'un package spécifique fonctionne correctement.

Un environnement virtuel : c'est un outil utilisé pour créer des espaces isolés pour les projets Python, où vous pouvez gérer séparément les dépendances et les versions des packages pour chaque projet.

 

Pip, le gestionnaire de package de python

La commande

pip install

est souvent la première que vous apprenez en python, elle permet d'installer un package en local en allant le chercher sur le pypi (https://pypi.org/).

pip ira chercher les dépendances du packages mais ne gérera pas les conflits de dépendances entre packages (par exemple des versions non adaptées aux différents packages installés).

Pip n'a pas de gestionnaire d'environnement.

Documentation du projet PIP : https://pip.pypa.io/en/stable/

pypi

venv, le gestionnaire d'environnement de python

venv est un gestionnaire d'environnement virtuel qui est installé nativement dans python. Il permet de gérer des environnements simples, il ne comprend pas de gestionnaire de package.

venv est spécialement adapté pour les environnements simples. Il ne permet pas de travailler avec différentes versions de python ou avec des packages dans d'autres langages.

Documentation de venv : https://docs.python.org/fr/3/library/venv.html

conda, un outil multilangage pour la gestion de package et d'environnement

conda combine un gestionnaire de package et un gestionnaire d'environnements. conda est une solution plébiscité par les développeurs python dans le domaine de la data science car il peut gérer des packages dans d'autres langages que python.

Les deux composantes de conda sont :

  • un gestionnaire de package qui peut aller chercher des packages sur différents dépôts, notamment conda-forge, anaconda... et gérer les dépendances complexes entre packages.
  • un gestionnaire d'environnements permettant de créer des environnements avec des versions de python différentes et des packages dans d'autres langages que python.

Attention, il ne faut pas confondre conda et Anaconda. Conda est un outil open source de gestion de packages et d'environnements et Anaconda est une distribution de python incluant de nombreux packages ainsi qu'un dépôt. La distribution Anaconda se base sur conda mais elle fixe un certain nombre de contraintes, notamment l'obligation de posséder une licence pour une utilisation professionnelle d'Anaconda et de son dépôt.

Documentation du projet conda : https://docs.conda.io/en/latest/

Image

Vous croiserez parfois une alternative à conda qui est bien souvent utilisée, il s'agit de mamba.

Il s'agit d'une alternative à conda qui se veut plus rapide et fiable que conda. Il reste aujourd'hui minoritaire par rapport à conda.

Documentation du projet mamba : https://mamba.readthedocs.io/en/latest/


poetry, un gestionnaire d'environnements complet pour python

Poetry est un outil de gestion de dépendances et de packages pour Python. Il est plébiscité par les développeurs Python pour son approche globale du packaging de projets.

Voici ses principales caractéristiques et fonctionnalités :

  1. Bonne Gestion des Dépendances : Poetry, au lieu de gérer manuellement un requirements.txt, utilise un fichier spécifique pour les dépendances pyproject.toml. Celui-ci est plus structuré et lisible.

  2. Environnements Virtuels Intégrés : Contrairement à d'autres outils, Poetry gère automatiquement les environnements virtuels pour les projets. Il crée et utilise des environnements virtuels spécifiques au projet, isolant ainsi les dépendances de projet des autres projets et de l'environnement global Python.

  3. Résolution de Dépendances Intelligente : Poetry utilise un algorithme de résolution de dépendances sophistiqué pour s'assurer que vous avez un ensemble cohérent de dépendances. Il résout les dépendances de manière à éviter les conflits et à garantir la compatibilité.

En résumé, Poetry est un outil complet pour la gestion de projets Python, offrant une approche unifiée pour la gestion des dépendances, le packaging, et l'isolation de l'environnement.

Documentation Poetry : https://python-poetry.org/

poetry python env

Quel outil utiliser pour quel projet ?

Les outils précédemment décrit ont tous leurs faiblesses et leur forces, l'objectif est ici de vous proposer des combinaisons d'outils vous permettant de faire un choix. Ces choix sont issus de l'expérience que nous avons vécu durant ces dernières années chez stat4decision aussi bien lors de formations que lors de projets.

Vous débutez en Python, votre objectif principal est :

  • Manipuler des données et créer des modèles :
    • Utilisez conda et la conda-forge

  • Automatiser des traitements dans des projets à partager :
    • Utilisez pip et venv

Et pour pratiquer ?

Nous allons ajouter des articles sur les différents outils afin de détailler l'utilisation de chacun.

Si vous voulez aller plus loin, n'hésitez pas à nous contacter pour vous former sur ces sujets ou à approfondir la documentation de chacun.

Partager cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.