Les modules – Les packages

 
(Cliquez pour afficher la version PDF)

 

Nous avons vu que dans un script Python (fichier avec une extension .py), il était possible de définir des fonctions réutilisables afin d’éviter les répétitions de code.

Jusqu’à présent, dans les scripts que nous avons étudiés, les fonctions étaient toujours définies au début du script.

Il est cependant possible d’effectuer la définition des fonctions dans un fichier séparé pour ensuite utiliser les fonctions dans un script principal.

 

. Les modules

Un programme Python est donc généralement composé de plusieurs fichiers sources avec une extension .py, appelés modules indépendants les uns des autres et pouvant être réutilisés dans d’autres programmes.

Un module rassemble les fonctions utilisées par le programme principal dans un même fichier situé dans le répertoire d’exécution du programme (pour les modules personnels).

Pour pouvoir utiliser les fonctions du module, le programme principal doit les importer.

Deux syntaxes sont possibles pour l’importation d’un module :

. la commande import nom_module importe la totalité des objets du module.

Exemple : import math

Le module peut être importé sous un autre nom, un alias. On utilise alors cet alias pour appeler les fonctions :

 

. la commande from nom_module import obj1, obj2… n’importe que les objets obj1, obj2… du module:

Exemple:  from math import pi, sin, log

Dans cet exemple, seules les fonctions cos et pi du module math sont importées.

Ou toutes les fonctions du module :

(Le caractère ‘*‘ permet d’importer toutes les fonctions du module.)


Exemple
 :

Reprenons le programme d’affichage de la table de multiplication en créant un module appelé table.py contenant les fonctions du programme.

Le programme principal importe toutes les fonctions du module table et les utilise :

Résultat dans la fenêtre Python Shell :

 

. Les packages

Quand on a un grand nombre de modules, il est intéressant de les organiser dans des dossiers. Un dossier qui rassemble des modules est appelé un package (paquets en français). Ce dossier doit contenir un fichier nommé _init_.py vide ou décrivant l’arborescence du package. Le fichier _init_.py même vide est essentiel pour que Python considère les dossiers le contenant comme des paquets.

Exemple :

Toujours avec programme d’affichage de la table de multiplication, nous allons créer un module table.py contenant la fonction d’affichage de la table :

Et un module saisie.py contenant la fonction de saisie d’un nombre :

 

Ces deux modules ainsi que le fichier _init_.py sont situés dans un dossier nommé fonctions. Dans ce cas simple, le fichier _init_.py peut être vide, mais il peut également décrire l’arborescence du dossier fonctions :

 

Le dossier fonctions est situé dans le répertoire d’exécution du programme principal qui va importer la fonction table du module table.py et la fonction saisie du module saisie.py :

Résultat dans la fenêtre Python Shell :

 


. La bibliothèque standard de  Python

Par défaut, Python dispose de nombreux packages et modules intégrés à sa bibliothèque standard. On peut citer :

. random : fonctions permettant de travailler avec des valeurs aléatoires

. math : toutes les fonctions utiles pour les opérations mathématiques (cosinus,sinus,exp,etc.)

. sys : fonctions systèmes

. os : fonctions permettant d’interagir avec le système d’exploitation

. time : fonctions permettant de travailler avec le temps

. tkinter : interface graphique


Par exemple, le module pickle permet de sauvegarder dans un fichier au format binaire, n’importe quel objet Python (une liste, un dictionnaire, un tuple, etc…). C’est une alternative intéressante à la sauvegarde des données dans un fichier texte.

Le script ci-dessous enregistre une liste appelée list_to_save dans un fichier binaire nommé file_pickle, puis ouvre le fichier en mode lecture normal et l’affiche dans la fenêtre Python Shell pour montrer qu’il s’agit bien d’un fichier binaire, et enfin charge le fichier en mode lecture binaire et l’affiche dans la fenêtre Python Shell :

Déroulement du programme

– Sauvegarde au format binaire :

Le fichier file_pickle est d’abord ouvert ou créé en mode écriture binaire (‘wb’). Avec la méthode Pickler du module pickle, on crée l’objet list_pickler rattaché au fichier binaire.

La méthode dump appliquée à cet objet permet d’enregistrer au format binaire la liste list_to_save dans le fichier file_pickle.

– Affichage du fichier binaire brut :

Le fichier est ouvert en mode lecture normal (‘r’) et affiché dans la fenêtre Python Shell.

– Chargement du fichier binaire :

Le fichier file_pickle est d’abord ouvert en mode lecture binaire (‘rb’). Avec la méthode Unpickler du module pickle, on crée l’objet list_depickler rattaché au fichier binaire ouvert.

La méthode load appliquée à cet objet permet d’affecter la liste sauvegardée en binaire à la liste list_to_read qui est ensuite affichée.

Résultats dans la fenêtre Python Shell


Remarque
 :

Pour la méthode dump, le fichier doit toujours être ouvert en mode ‘wb‘ afin d’écraser le contenu précédent si le fichier existe déjà.

 

Exemple d’application :

Nous allons appliquer cette méthode de sauvegarde à notre programme de gestion d’inventaire.

Dans le script suivant, des fonctions d’ouverture et de sauvegarde au format binaire d’un dictionnaire nommé inventaire sont définies et utilisées pour afficher l’inventaire et enregistrer les modifications qui lui sont apportées (ajout ou suppression de lignes).

Résultats dans la fenêtre Python Shell :

 

. Installation de bibliothèques (package) Python

Outre les modules intégrés à la distribution standard de Python, on trouve des bibliothèques dans tous les domaines.

Le site pypi.python.org/pypi (The Python Package Index) recense des milliers de modules et de packages !

Nous allons nous intéresser plus particulièrement aux bibliothèques numpy et matplotlib.

En effet, dans le domaine scientifique, la manipulation des données à travers des tableaux et le tracé de courbes caractéristiques est courante, et les bibliothèques numpy et matplotlib sont très utiles pour l’exploitation de ces données.

numpy et matplotlib ne font pas partie des bibliothèques standard de Python. Il faut donc ajouter ces bibliothèques à la distribution de Python.

A noter, que l’installation de matplotlib installe également la bibliothèque de calcul numpy.

Pour ajouter une bibliothèque à Python sous Windows, le plus simple est d’ouvrir une console de commandes (taper cmd dans la zone de recherche de Windows) et de se placer dans le dossier d’installation de Python :

(A adaptez bien-sûr à votre chemin d’installation, login et n° de version Python…)

Et de taper la commande suivante qui va installer la dernière version d’un package et de ses dépendances depuis le Python Package Index (pip) qui est l’outil d’installation de prédilection des bibliothèques (à partir de Python 3.4, il est inclus par défaut avec l’installateur de Python) :

python -m pip install package

Si un package est déjà installé, l’installer à nouveau n’aura aucun effet. La mise à jour de package existants doit être demandée explicitement :

python -m pip install –upgrade package

Donc, pour installer la bibliothèque matplotlib, il suffit de taper la ligne de commande suivante :

python -m pip install matplotlib

Et l’outil pip va télécharger sur le site de dépôts la librairie demandée ainsi que les dépendances nécessaires dont numpy.