Python : gestion des modules (importer, installer et utiliser)

Table des matières :

Tutoriel Python : Comment créer un module en Python ?

Introduction

  1. Les modules
  2. Les modules en Python
  3. Importer et installer les modules en Python

3.1. Importer à partir d’un module

3.2. Masquer les éléments d’un module

3.3. Importer et installer une module dans une fonction

  1. les propriétés des modules en Python
  2. les modules standard de Python:
  3. Le chemin de recherche d’un module en Python(Search path)
  4. Les modules en scripts
  5. les paquets sur Python
  6. Exercices
  7. Correction des Exercices

11. Conclusion

Introduction :

Les modules et les packages sont deux constructions utilisées en Python pour organiser des programmes plus volumineux. Ce tutoriel présente les modules en Python, comment on peut y accéder, leurs définition et emplacement, etc. On va également explorer les packages Python et sous-packages.

1. Les modules :

Un module vous permet de regrouper les fonctions, classes et codes associés en général. Vous pouvez considérer un module comme une bibliothèque de code (bien qu'en fait de nombreuses bibliothèques sont elles-mêmes composées de plusieurs modules comme par exemple, une bibliothèque peut avoir des options ou des extensions de la fonctionnalité principale).

Il est utile d'organiser votre code en modules lorsque le code devient soit large ou lorsque vous souhaitez réutiliser certains éléments de la base de code dans plusieurs projets.

2. Les modules en Python :

En Python, un module est équivalent à un fichier contenant du code Python. Un module peut contenir :

  • Les fonctions
  • Les classes
  • Les variables
  • Un Code exécutable
  • Les attributs associés au module tels que leurs nom.

Le nom d'un module est le nom du fichier dans lequel il est défini (moins le suffixe «.py»). À titre d'exemple, regardons une définition de notre module utils défini dans le fichier util.py:

Exemple 1 :

Syntaxe:

"""This is a test module"""
print('Hello I am the utils module')
def printer(some_object):
print('printer')
print(some_object)
print('done')
class Shape:
def __init__(self, id):
self._id = id
def __str__(self):
return 'Shape - ' + self._id
@property
def id(self):
""" The docstring for the id property """
print('In id method')
return self._id
@id.setter
def id(self, value):
print('In set_age method')
self._id = id
default_shape = Shape('square')

Résultat de l’exécution :

Le module possède un commentaire au début du fichier - c'est une documentation utile pour toute personne travaillant avec le module. Dans certains cas, le commentaire au début du module peut fournir une documentation complète sur le module par rapport à l’utilisation de ses fonctionnalités et des exemples qui peuvent être utilisés comme référence.

Le module possède également du code exécutable (l'instruction d'impression juste après le commentaire) qui est exécuté lorsque le module est chargé / initialisé par Python. Cette opération se produit lorsque le module est référencé pour la première fois dans une application.

Une variable default_shape est également initialisée lorsque le module est chargé et peut être référencée en dehors du module. Ces variables peuvent être utiles dans la configuration des valeurs par défaut.

3. Importer les modules en Python :

Un module défini par l'utilisateur n'est pas automatiquement accessible à un autre fichier ou script. L'importation d'un module rend les fonctions, les classes et les variables définies dans le module visible dans le fichier dans lequel elles sont importées.

Par exemple, pour importer tout le contenu du module utils dans un fichier appelé my_app.py nous pouvons utiliser la syntaxe suivante :

import utils

Remarque : Notez qu’il ne faut pas définir le nom du fichier (c'est-à-dire utils.py), il faut par contre définir le nom du module à importer (n’incluant pas l’extension .py).

Une fois que les définitions du module utils sont visibles dans my_app.py, nous pouvons les utiliser comme s'ils avaient été définis dans le fichier courant. Notez qu'en raison de la portée de la fonction, la classe et la variable définies dans le module utils seront préfixées par le nom du module ; c'est-à-dire utils.printer et utils.Shape etc.

Exemple 2 :

Syntaxe:

import utils
utils.printer(utils.default_shape)
shape = utils.Shape('circle')
utils.printer(shape)

Résultat de l’exécution : 

Notez que la première ligne de la sortie est la sortie de l'instruction d’affichage dans le module utils (c'est-à-dire la ligneprint ('Bonjour, je suis le module utils')) ce qui illustre la capacité de Python à définir le comportement qui sera exécuté lorsqu'un module est chargé.

Il est à noter que le module n'est initialisé que lorsqu’il est chargé et donc les instructions exécutables ne sont exécutées qu'une seule fois. Si nous avons oublié d'inclure l'instruction d'importation au début du fichier, alors Python ne sais pas utiliser le module utils. Il peut y avoir n'importe quel nombre de modules importés dans un fichier, Les modules peuvent être importés via des instructions d'importation séparées ou en fournissant une liste de modules séparés par des virgules :

import utils
import support
import module1, module2, module3

3.1. Importer à partir d’un module :

Un problème avec l'exemple précédent est que nous avons dû continuer à faire référence à des fonctionnalités fournies par le module utils en tant que utils. ;. C'est l'équivalent de faire référence à une personne via son nom complet chaque fois que nous lui adressons la parole. Cependant, nous n'avons généralement pas besoin d'être assez formels; nous pourrions simplement utiliser leur nom. Une variante de l'instruction d'importation nous permet d'importer tout à partir d'un module particulier et supprime le besoin de préfixer les fonctions ou classes des modules avec le nom du module, par exemple:

Exemple 3 :

Syntaxe:

from utils import *
printer(default_shape)
shape = Shape('circle')
printer(shape)

Résultat de l’exécution :

Comme cet exemple le montre, nous pouvons référencer default_shape, la fonction printer() et la classe Shape directement. Notez que le «*» est souvent appelé ici un caractère générique; ce qui signifie qu'il représente tout dans le module.

Exemple 4 :

Syntaxe:

from utils import Shape
s = Shape('rectangle')
print(s)

Résultat de l’exécution :

Maintenant , seule la classe Shape a été importée dans le fichier. Vous pouvez même donner un alias pour un élément importé d'un module en utilisant l'instruction d'importation.

Import   as 

Exemple 5 :

Syntaxe:

import utils as utilities
utilities.printer(utilities.default_shape)

Résultat de l’exécution :

Dans cet exemple, au lieu de faire référence au module que nous importons en tant qu'utils, nous lui avons donné un alias et l'avons appelé utilities.

Exemple 6 :

Syntaxe:

from utils import printer as myfunc

Dans ce cas, la fonction printer du module utils est aliasée sur myfunc et sera donc appelé myfunc dans le fichier courant. Nous pouvons même combiner plusieurs éléments importés avec des éléments importés ayant des alias:

Syntaxe:

from utils import Shape, printer as myfunc
s = Shape('oval')
myfunc(s)

Résultat de l’exécution :

3.2. Masquer les éléments d’un module :

Par défaut, tout élément d'un module dont le nom commence par  ('_') est masqué lors d'une importation générique du contenu d'un module. De cette façon, certains éléments nommés peuvent être masqués sauf s'ils sont explicitement importés.

Cela peut être utilisé pour masquer des fonctionnalités qui ne sont pas destinées à être utilisées en externe à partir d'un module (les développeurs les utilisent alors à leurs risques et périls) ou pour créer des fonctionnalités avancées uniquement disponibles pour ceux qui les désirent vraiment.

3.3. Importer une module dans une fonction:

Dans certains cas, il peut être utile de limiter la portée d'une importation à une fonction; Donc, évitez toute utilisation inutile ou conflit de noms avec les fonctionnalités locales. Pour ce faire, il suffit d'ajouter une importation dans le corps d'une fonction.

Exemple 7 :

Syntaxe:

def my_func():
from util import Shape
s = Shape('line')

Résultat de l’exécution :

Dans ce cas, la classe Shape n'est accessible que dans le corps de my_func ().

4. les propriétés des modules en Python :

Chaque module a un ensemble de propriétés qui peuvent être utilisées pour trouver les fonctionnalités qu’ils fournissent (nom, documentation, etc). Ces propriétés sont considérées comme spéciales car elles commencent et se terminent toutes par une double barre inférieure ('__'). Ceux-ci sont:

  • __name__ le nom du module.
  • __doc__ la documentation  pour le module.
  • __file__ le fichier dans lequel le module a été défini.

Vous pouvez également obtenir une liste du contenu d'un module une fois qu'il a été importé en utilisant la fonction dir ().

Exemple 8 :

Syntaxe:

import utils
print(utils.__name__)
print(utils.__doc__)
print(utils.__file__)
print(dir(utils))

Résultat de l’exécution :

Notez que l'instruction d'impression (print) est toujours exécutée lorsque le module est chargé dans le runtime actuel de Python; même si tout ce que nous faisons c’est d’accéder à certaines propriétés du module.

La plupart des propriétés de module sont utilisées par des outils pour aider les développeurs; mais ils peuvent être des références utiles lorsque vous rencontrez pour la première fois un nouveau module.

5. les modules standard de Python :

 Python est livré avec de nombreux modules intégrés ainsi que de nombreux autres disponibles sur des tiers. Par exemple, certaines des fonctionnalités du module sys sont présentées ci-dessous, notamment sys.path (), qui répertorie les répertoires recherchés. Il s'agit d'une valeur inscriptible, permettant à un programme d'ajouter des répertoires (et donc des modules) avant de tenter une importation

Exemple 9 :

Syntaxe:

import sys
print('sys.version: ', sys.version)
print('sys.maxsize: ', sys.maxsize)
print('sys.path: ', sys.path)
print('sys.platform: ', sys.platform)

Résultat de l’exécution :

6. Le chemin de recherche d’un module en Python(Search path):

Pour trouver ces modules, Python utilise une variable d'environnement spéciale appelée PYTHONPATH. C'est une variable qui peut être configurée avant d'exécuter Python qui lui indique où recherchez pour trouver les modules nommés. Il est indiqué dans la section précédente où se trouve la variable de chemin du module sys imprimé. Sur la machine sur laquelle ce code a été exécuté sur la sortie de cette variable était:

Il s'agit en fait d'une liste des emplacements dans lesquels Python rechercherait un module; Python recherchera tour à tour chacun de ces emplacements pour trouver le nom module; il utilisera le premier module qu'il trouve. L'algorithme de recherche actuel est:

  • Le répertoire actuel.
  • Si le module n’est pas trouvé, Python recherche alors chaque répertoire dans le shell variable  PYTHONPATH.
  • Si le reste échoue, Python vérifie le chemin par défaut. Sous Unix / Linux, ce chemin par défaut est normalement / usr / local / lib / python /.

7. Les modules en scripts :

Tout fichier Python n'est pas seulement un module mais aussi un script ou un programme Python. Ceci signifie qu'il peut être exécuté directement si nécessaire.

Exemple 10 :

Syntaxe:

"""This is a test module"""
print('le module 1')
def f1():
print('f1[1]')
def f2():
print('f2[1]')
x = 1 + 2
print('x est', x)
f1()
f2()

Résultat de l’exécution :

Exemple 11 :

Nous pouvons aussi déterminer si un module est en cours de chargement ou exécuté en tant que script / main application en vérifiant la propriété __name__ du module (qui est directement accessible depuis l'intérieur d'un module). Si le module est le point d'entrée __main__ alors exécutez du code; si ce n'est pas le cas, faites autre chose.

Syntaxe:

"""This is a test module"""
print('le module 1')
def f1():
print('f1[1]')
def f2():
print('f2[1]')
if __name__ == '__main__':
x = 1 + 2
print('x is', x)
f1()
f2()

Résultat de l’exécution :

8. les paquets sur Python :

Python permet aux développeurs d'organiser les modules ensemble dans des packages, dans une structure hiérarchique basée sur des répertoires. Un package est défini comme :

  • un répertoire contenant un ou plusieurs fichiers source Python.
  • un fichier source facultatif nommé __init__.py. Ce fichier peut également contenir du code qui est exécuté lorsqu'un module est importé du package.

Il est possible d'importer tous les modules d'un package en important simplement le nom du paquet. Si vous souhaitez fournir un contrôle sur ce qui est importé d'un paquet lorsque cela se produit, vous pouvez définir une variable dans le fichier __init__.py  qui indiquera ce qui sera importé dans cette situation.

Les paquets peuvent également contenir des sous- paquets. Pour importer le sous-package, nous faisons la même chose qu'avant mais chaque package dans le chemin du module est séparé par un point.

Exemple 12 :

Syntaxe :

import utils.file_utils.file_support
ou
from utils.file_utils.file_support import file_logger

9. Exercices :

 Exercice 1 :

Importez le module math pour effectuer les instructions suivantes:

Écrivez une seule expression pour arrondir la valeur de -9.23 et affichez ensuite sa valeur absolue.

Écrivez une expression qui prend le max  du tangent de 45.9.

Exercice 2 :

Dans les questions suivants, utiliserez le module calendar du Python:

  • Importez le module de calendrier.
  • Utilisez isLeap pour déterminer l'année bissextile suivante.
  • Trouvez combien d'années bissextiles il y aura entre les années 2020 et 2040, inclusivement.
  • utilisez les fonctions du calendrier module pour déterminer le jour de la semaine du 20 juillet 2020.

10. Correction des Exercices :

 Exercice 1 :

Syntaxe:

import math
abs(round(-9,23))
math.ceil(math.tan(45.9))

Résultat de l’exécution :

Exercice 2 :

Syntaxe:

"python modules".upper()
import calendar
year=2020
while not calendar.isleap(year):
year+=1
print("l'année bissextile suivante est",year)
print("le nombre d'années bissextiles entre les années 2020 et 2040 est ",calendar.leapdays(2020,2040))
day=calendar.weekday(2020,7,20)
if day==0:
day="Lundi"
elif day==1:
day="mardi"
elif day==2:
day="Mercredi"
elif day==3:
day="jeudi"
elif day==4:
day="vendredi"
elif day==5:
day="samedi"
elif day==6:
day="Dimanche"
print("le 2020/07/20 est un ",day)

Résultat de l’exécution :

11. Conclusion :

Généralement les modules en Python sont des bibliothèques réutilisables de code ayant l'extension .py, qui implémentent un groupe de méthodes et d'instructions. Python est livré avec de nombreux modules intégrés dans le cadre de la bibliothèque standard. Pour utiliser un module dans votre programme, importez le module à l'aide de l'instruction import. Touess Les instructions import sont placées au début du programme.

Article publié le 18 Octobre 2020par Babachekhe Mohamed