Miamondo

7 - importer un module

Un module est un fichier Python qui contient un programme que l’on peut exécuter de manière indépendante ou bien qui regroupe des attributs que l’on peut charger dans un programme principal grâce à l’instruction import.

Pour faciliter leur maintenance, la plupart des programmes Python sont constitués d’un code principal sur lequel vient se greffer différents modules importés. Il s’agit soit de modules qui appartiennent à la bibliothèque standard de Python (par exemple le module math) soit de modules écrits par le programmeur lui-même. La bibliothèque standard de Python contient des dizaines de modules.

Amusons-nous à importer des attributs (c’est-à-dire des fonctions ou des variables) du module math. Ce dernier contient par exemple la variable pi qui correspond à la valeur approchée 3.141592653589793.

 

Pie

 

Si vous voulez calculer le périmètre d’un cercle, vous en aurez besoin. Pour accéder à cette variable, il existe deux méthodes:

1ère méthode d’importation : l’instruction from math import pi

 

 #!/usr/bin/env python3

 # -*- coding: utf8 -*-

 #Importation de la constante pi du module math

 from math import pi

 rayon = 3

 perimetre = 2*pi*3

 print(perimetre)
 

 

La fonction print() retourne le résultat 18.84955592153876. Si je n’avais pas pris soin d’importer la constante pi, Python m’aurait retourné cette exception:

NameError: name ‘pi’ is not defined

Comme je l’ai déjà précisé, il y a différentes manières d’importer un module et/ou les variables qu’il contient. Dans le programme qui calcule le périmètre, je n’ai pas importé le module mais seulement la constante pi qui devient alors une variable de mon programme principal.

 

 #!/usr/bin/env python3

 # -*- coding: utf8 -*-

 #Importation de la constante pi du module math

 from math import pi

 

  • C’est-à dire que si j’écris print(math), j’obtiens une erreur: NameError: name ‘math’ is not defined
  • Tandis que si j’écris print(pi), j’obtiens ceci : 3.141592653589793
  • C’est donc bien la preuve que j’ai, dans mon programme principal, uniquement la variable pi.
  • Il est possible d’importer tous les attributs  du module math en utilisant l’astérisque:from math import *

2ème méthode d’importation : l’instruction import math

 

 

 #!/usr/bin/env python3

 # -*- coding: utf8 -*-

 

 import math  # Importation du module math

 rayon = 3

 perimetre = 2*math.pi*3

 print(perimetre)

 

18.84955592153876

Dans cet exemple, j’ai importé le module math qui devient donc une nouvelle variable de mon programme principal mais la constante pi est accessible uniquement en utilisant cette syntaxe : math.pi

En langage Python où tout est objet, le point est un signe d’appartenance. pi est un attribut de l’objet math.

  • Si j’écris print(math), j’obtiens ce résultat: <module ‘math’ (built-in)>
  • Si j’écris print(pi), Python me retourne une exception: NameError: name ‘pi’ is not defined
  • Alors que si j’écris print(math.pi), j’accède à la variable pi qui est dans le module math et j’obtiens bien le résultat escompté: 3.141592653589793

La fonction pow (power en anglais)

Prenons un autre exemple, je veux importer la fonction pow du module math. Cette dernière permet d’élever un nombre x à la puissance y:

 #!/usr/bin/env python3

 # -*- coding: utf8 -*-

 

 import math  # Importation du module math

 numb = 3

 result = math.pow(numb, 4)

 print(result)

81

Dans cet exemple, j’ai élevé 3 à la puissance 4. Pour ce faire, j’ai passé deux paramètres à la fonction pow:

  • la variable numb (3)
  • la puissance (4)

La fonction sqrt()

sqrt() permet de calculer la racine carré du nombre passé en argument:

 #!/usr/bin/env python3

 # -*- coding: utf8 -*-

 

 import math  # Importation du module math

 numb = 36

 result = math.sqrt(numb)

 print(result)

 

Utiliser dir() pour afficher tous les attributs d’un module

Si je souhaite afficher tous les attributs du module math, il me suffit d’utiliser la fonction dir (bien sûr après avoit chargé le module math!).

 

 #!/usr/bin/env python3

 # -*- coding: utf8 -*-

 

 import math  # Importation du module math

 print(dir(math))

['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']

 

Le module webbrowser (navigateur)

Comme je l’ai écrit plus haut, la bibliothèque standard Python contient des dizaines de modules. Outre le module math, on trouve également le module webbrowser. Ce dernier contient la fonction open(url, new=0, autoraise=true).

 

 #!/usr/bin/env python3

 # -*- coding: utf8 -*-

 

 import webbrowser

 webbrowser.open("https://www.defense.gouv.fr/dgse")

 

Ce code provoque l’ouverture de la page d'accueil du site de la DGSE dans le navigateur défini par défaut. Pour ce faire, j’ai passé l’url de la page à la fonction open() sous la forme d’une chaîne de caractères.

 

Importer un programme en tant que module dans une autre application

Un module peut aussi être un programme que l’on peut lancer en tant qu’application principale ou bien que l’on peut charger dans un autre programme plus important. Voici un exemple très concret:

 

Miagxardeno

 

J’ai créé un programme qui s’appelle Mia ĝardeno. C’est de l’espéranto et ça signifie mon jardin en français. Il y a plusieurs onglets qui ouvrent notamment un agenda, un calendrier et un logiciel de post-it. J’ai créé moi-même ces trois applications que je peux lancer de façon tout à fait indépendante ou que je peux inclure dans un autre programme. C’est le cas ici : Je les ai importées dans mon application Mia ĝardeno (ligne 7, 8 et 9).

 

 #!/usr/bin/env python3

 # -*- coding: utf8 -*-

 

 from calendrier_miamondo import Calendrier

 from agenda_miamondo import Agenda

 from post_it import PostIt

 

 

 

 

 

L’instruction if __name__ == “__main__”

Pour déterminer si l’application “post-it” doit être lancée en tant que programme principal ou bien importée en tant que module dans un autre programme, j’utilise l’instruction if __name__ == “__main__”:

Cette instruction se trouve à la fin du code du logiciel de type post-it:

 

 

 #!/usr/bin/env python3

 # -*- coding: utf8 -*-

 

 from calendrier_miamondo import Calendrier

 from agenda_miamondo import Agenda

 from post_it import PostIt

 

 #-----Programme principal---------------

 

 if __name__ == "__main__":

     "Lancement de l'application post-it"

     post_it = PostIt()

     post_it.post_it()

 

 

 

 

 

 

 

 

 

Si vous ne comprenez pas le code ci-dessus, ne vous inquiétez pas, c'est tout à fait normal. C'était juste pour vous montrer qu'on peut importer ses propres modules.

 

Conclusion

L’importation de modules est une opération très courante en Python. Elle permet de faire appel au fonctions présentes dans la bibliothèque standard du langage qu’une communauté de développeurs ne cesse d’enrichir. Elle permet également d’importer des applications en tant que modules dans d’autres programmes.

Date de dernière mise à jour : 04/03/2020

  • Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire