Notre blog Diggers

Share

25 Oct 2023
Michaël Ebenstein
  • Data engineering
  • Data science

Gestion des bibliothèques et environnements virtuels Python – facile !

Michaël Ebenstein

Avez-vous déjà rencontré des problèmes de compatibilité entre bibliothèques ? 

Si oui, vous trouverez dans cet article une présentation succincte de conda, solution parmi les plus efficaces pour contrer ce problème.

Si les concepts de librairie, package, module, d’Anaconda et Miniconda vous sont familiers, vous pouvez immédiatement passer à la section COMPRENDRE CONDA.

Fondamentaux

Librairies, Packages et Modules

Les concepts de librairies, packages et de modules sont fréquemment sujets à confusion.

  • Librairie : Une librairie est un ensemble organisé de code informatique contenant des fonctionnalités et des outils prêts à l’emploi. Vous pouvez la comparer à une grande boîte à outils contenant diverses fonctionnalités pour différentes tâches. Une librairie peut contenir plusieurs packages.
  • Package : Un package est une manière de regrouper des fonctionnalités connexes au seins d’un librairie plus vaste. Les packages sont organisés de manières hiérarchiques, ce qui signifie qu’une librairie peut contenir plusieurs packages. A son tour, un package peut contenir plusieurs modules.
  • Module : Un module est une unité de code réutilisable contenu à l’intérieur d’un package. Il s’agit du niveau le plus bas de la hiérarchie. Les modules renferment des fonctions, des classes et d’autres éléments de code que vous pouvez importer et utiliser dans votre propre code. Un package peut regrouper plusieurs modules, chacun ayant une fonction spécifique.

Dorénavant, par simplification lorsque nous ferons référence aux bibliothèques, comprenez que nous engloberons l’idée de librairie, de module ou de package.

Anaconda , MiniConda et Conda

Anaconda est une interface visuelle (GUI) qui propose plusieurs environnements de développement (IDE) pour la programmation.

Miniconda est une version allégée d’Anaconda, donc plus rapide à installer et occupant moins d’espace sur le disque dur.

Conda est un gestionnaire qui vous permet de créer et gérer des environnements virtuels, en plus de faciliter l’installation et la gestion de bibliothèques. Nous verrons par la suite, ce que sont les environnements virtuels de manière plus précise mais retenez simplement pour l’instant que ce sont des dossiers qui contiennent des bibliothèques.

Notez que pour utiliser Conda, il est nécessaire d’installer Anaconda ou MiniConda.

COMPRENDRE CONDA

Lorsque vous travaillez sur des projets de programmation, vous réalisez rapidement que coder en se limitant aux fonctions built-in du langage peut rendre la tâche complexe. De nos jours, il est pratiquement assuré que ce que vous essayez de coder peut être accompli aisément grâce aux fonctionnalités fournies par des bibliothèques existantes. C’est pourquoi, il devient souvent pertinent d’importer des fonctionnalités de différentes bibliothèques afin d’atteindre rapidement un objectif. Cependant, il faut être vigilant lors de l’installation de bibliothèques car il peut arriver qu’il y ai des incompatibilités.

Gestion des bibliothèques

Conda est un gestionnaire de bibliothèques compatible avec Python ainsi qu’avec d’autres langages informatiques tels que JavaScript, C, C++. C’est l’équivalent, pour ceux qui sont familiers avec NuGet du framework .Net ( https://www.nuget.org/packages) ou encore pip (https://pypi.org) qui se consacre uniquement à l’installation de bibliothèques Python.

Conda permet l’installation et la gestion des bibliothèques tout en cherchant à assurer leur compatibilité autant que possible.

Il peut en effet arriver que deux bibliothèques ne soient pas en adéquation, ce qui peut entraîner des problèmes lors de l’exécution de votre code.

Il est à souligner que Conda propose un ensemble spécifique de bibliothèques. Ainsi, si la bibliothèque que vous recherchez n’est pas disponible par Conda, vous avez la possibilité d’utiliser un autre gestionnaire de bibliothèques comme pip.

Une différence notable à souligner entre Conda et pip est que, lorsque vous utilisez pip pour installer une bibliothèque, il procède sans vérifier les incompatibilités éventuelles avec d’autres bibliothèques. En revanche, Conda adopte une approche différente en utilisant un algorithme SAT (Boolean Satisfiability problem). Il examine les dépendances de chaque bibliothèques que vous souhaitez installer, puis tente de trouver une combinaison de versions de ces bibliothèques qui satisfait toutes les exigences sans créer de conflits.

Malgré les vérifications de compatibilité effectuées par Conda lors de l’installation des bibliothèques, il ne peut garantir l’absence de risque d’incompatibilité.

Il est recommandé d’installer le plus grand nombre de bibliothèques avec Conda, puis d’utiliser pip si nécessaire, pour éviter les conflits potentiels entre bibliothèques.

Gestion des environnements virtuels :

Conda est également un gestionnaire d’environnements virtuels. Mais qu’est-ce que cela signifie exactement ?

Un environnement virtuel est essentiellement un dossier sur votre ordinateur qui contient une version spécifique du langage informatique, que ce soit Python ou un autre, ainsi que des versions spécifiques de bibliothèques. Ils permettent de travailler de manière isolée sans affecter l’environnement de base. Vous pouvez également les voir comme des espaces de travail où vous déposez toutes les fonctionnalités spécifiques à un projet.

Par défaut, lors de l’installation de Conda, votre ordinateur contient un environnement virtuel spécifique appelé « environnement de base ».

Si vous installez, supprimez ou mettez à jour des bibliothèques avec Conda sans spécifier l’environnement virtuel dans lequel vous travaillez, toutes ces opérations seront effectuées dans l’environnement de base par défaut.

Lorsque vous ouvrez un terminal après avoir installé Conda, votre invite de commande indiquera l’environnement actif entre parenthèses.

L’environnement de base contient un ensemble de bibliothèques qui sont automatiquement installées lorsque vous installez Anaconda ou MiniConda.

A des fins pédagogiques, supposons que cet environnement de base contient une version de Python 3.11.0 ainsi que deux bibliothèques : numpy 1.26.0 et tensorflow 2.14.0. Nous pouvons le représenter sous forme de schéma : 

À mesure que vous ajoutez de nouvelles bibliothèques à l’environnement de base, le risque d’incompatibilité augmente, ce qui peut entraîner des problèmes dans vos scripts Python à un certain point ( d’où l’intérêt de créer des environnements virtuels pour chaque projet ). Si cela se produit, il est très probable que vous rencontreriez une erreur de type ImportError.

Croyez-moi, cela peut rapidement devenir une source de frustration.

Pour chaque projet, je vous recommande donc de créer un environnement virtuel contenant une version spécifique du langage et les bibliothèques que vous souhaitez utiliser. Cela garantira une isolation et une compatibilité optimale pour chaque projet.

Cheatsheet Conda command

Voici un aperçu des commandes principales de conda, regroupées en trois catégories pour une meilleure compréhension de leur utilisation.

Ces commandes vous permettront de gérer efficacement vos environnements virtuels et vos bibliothèques à l’aide de Conda, offrant ainsi un contrôle précis sur vos projets de développement.

Si cette feuille pense-bête vous a plu, nous vous l’offrons ! 🙂 Il suffit de la télécharger en cliquant sur le bouton suivant.

Astuces :

Recherchez une bibliothèque avec conda

  • Rendez vous sur le site : https://anaconda.org et créez un compte
  • Saisissez le nom d’une bibliothèque que vous souhaitez installer dans la bare de recherche.

Les informations essentielles dans la photo ci-dessus se trouvent dans les colonnes « Artifact (owner / artifact) » et « Platforms ». 

Dans la colonne Arifact(owner / artifact), vous pouvez observer la version ainsi que le nom de la bibliothèque et du canal (channel). 

Le premier résultat sur l’image ci-dessus indique que le channel est conda-forge et que la bibliothèques est numpy en version 1.26.0 (CHANNEL_NAME/PACKAGE version_du_package).

Le terme channel ou canal, fait référence à un lien url qui pointe vers un dossier contenant une version d’une bibliothèque.

Il est recommandé d’installer des bibliothèques provenant du « main channel » ou à défaut de « conda-forge ». La principale différence entre une bibliothèque provenant du canal main et d’un canal tiers réside dans l’origine de la distribution de la bibliothèque et les éventuelles personnalisations ou modifications apportées par le canal tiers.

Retenez simplement que le main channel est le canal officiel à privilégier.

Dans la colonne intitulée « Platforms », vous trouverez la liste des systèmes d’exploitation avec lesquels cette bibliothèque est compatible.

Enfin, soulignons que lorsque vous voyez noarch dans la colonne Platforms, cela signifie que la bibliothèque est compatible avec n’importe quel système d’exploitation.

Habitudes à adopter pour une utilisation optimale de Conda

  • Lister les environnements virtuels : Vérifier la liste des environnements virtuels disponibles avec la commande conda env list
  • Créer un environnement virtuel : Utilisez la commande conda create –n ENV_NAME pour créer un nouvel environnement virtuel. Il est recommandé d’installer la version du langage compatible avec conda lors de la création de cet environnement. En effet, si vous installez une bibliothèque avant d’installer le langage, conda va installer ses dépendances et une version de langage par default.
  • Vérifier la création de l’environnement virtuel : Assurez-vous que l’environnement virtuel a bien été crée en éxecutant à nouveau la commande conda env list. L’environnement que vous venez de créer ENV_NAME devrait apparaître.
  • Activer l’environnement virtuel : Pour travailler exclusivement dans cet environnement, activez-le avec conda activate ENV_NAME. A compter de maintenant, toutes les commandes d’installation, de suppression et de mise à jour de bibliothèques seront restreintes à cet environnement.
    • Installer une version spécifique du langage : Installer un version spécifique du langage avec conda install LANGAGE=X.Y.Z
    • Installer des versions spécifique de bibliothèques : Utilisez conda install PACKAGE1=X1.Y1.Z1  PACKAGE2=X2.Y2.Z2 en spécifiant les versions des bibliothèques pour une meilleure gestion des dépendances.
    • Développer dans cet environnement virtuel : Ecrivez et éxecutez votre code dans cet environnement virtuel.
    • Désactiver l’environnement virtuel : Pour revenir à l’environnement de base, désactiver l’environnement actif avec conda deactivate
  • Créer un environnement clone : Cloner un environnement avec conda create –name NEW_ENV_NAME –clone ENV_NAME. Cette commande créer un nouvel environnement qui contient toutes les mêmes bibliothèques de l’environnement ENV_NAME.
  • Activez le nouvel environnement clone : Activez le nouvel environnement avec conda activate NEW_ENV_NAME
    • Installer des versions spécifique de bibliothèques : Installer les nouvelles biblothèques necessaires en spécifiant les versions avec conda install PACKAGE1Bis=Xb1.Y1b.Z1b  PACKAGE2Bis=X2b.Y2b.Z2b
    • Testez le code dans cet environnement clone : Développez et testez votre nouveau code dans cet environnement virtuel cloné. Si des problèmes de compatibilité entre bibliothèques surviennent, vous pourrez toujours revenir à l’environnement d’origine ENV_ NAME. Dans ce cas, il vous fera investiguez quel sont les incompatibilité entre version de bibliothèques et de langage dans l’environnement clone et recréer un environnement virtuel sur de nouvel base solide.

Ces étapes vous aideront à gérer efficacement vos environnements virtuels en précisant les versions des bibliothèques pour éviter les conflits de dépendances.

Explorez les dépendances d’une bibliothèque :

Ouvrir un terminal (sur Mac) ou une console (sur Windows) et entrez la commande :

conda search numpy —info

Cette commande recherche l’existence d’une bibliothèque numpy et liste, le cas échéant, l’ensemble des bibliothèques numpy disponibles. La partie intéressante est « dependencies » qui indique toutes les dépendances de la bibliothèque numpy-1.26.0-py39hf6dca73_0.conda. Notez que cette version de numpy ne fonctionnera qu’avec une version de Python supérieure ou égale à 3.9 et inférieure à 3.10.0a0

Localisez le chemin du dossier d’installation d’une bibliothèque

  • Si la bibliothèque est installée via Conda : 
    • Ouvrir un terminal 
    • Activer l’environnement souhaiter via la commande : conda activate ENV_NAME
    • Lancer l’interpreteur python via : python ou python3
    • Importez la bibliothèque  avec : import PACKAGE_NAME
    • Obtenir l’emplacement avec : PACKAGE_NAME.__file__
  • Si la bibliothèque est installé via pip :
    • Ouvrir un terminal
    • Activer l’environnement souhaiter via la commande : conda activate ENV_NAME
    • Obtenir l’emplacement avec: pip show PACKAGE_NAME

Lien utiles : 

https://repo.anaconda.com/pkgs/ : Site web qui contient l’ensemble des bibliothèques que l’on peut installer avec conda

https://pypi.org : Site web qui contient l’ensemble des bibliothèques que l’on peut installer via la commande pip.

Credits : cover photo Photo de Zach Graves

PREVIOUSArticle précédentArticle suivantNEXT
  • conda
  • envs
  • packages
  • python