Aller au contenu
M03 · D. Manipuler les modules et les bibliothèques

Créer et importer des modules

Découper un programme en modules (fichiers .py), les importer de différentes façons et protéger le code de test avec if __name__ == "__main__".

1Situer

Le programme de la librairie fait maintenant 800 lignes dans un seul fichier. Pour corriger le calcul de la TVA, il faut chercher pendant dix minutes, et deux stagiaires ne peuvent pas travailler dessus en même temps sans se gêner. On le découpe en modules : un fichier pour les livres, un pour les calculs, un pour le programme principal.

2Comprendre

Ce que fait import
outils.py TAUX_TVA = 0.20 def tva(ht): ... def ttc(ht): ... class Ticket: ... if __name__ == "__main__": tests... main.py import outils outils.tva(100) 20.0 from outils import ttc ttc(45) 54.0

Deux fichiers dans le même dossier : outils.py contient des outils, main.py est le programme principal.

1 / 5

Un module est simplement un fichier .py. Tout ce qu’il définit (fonctions, classes, variables) peut être réutilisé dans un autre fichier grâce à import.

Créer un module

Écrivez vos fonctions dans outils.py. Placez main.py dans le même dossier. C’est tout : outils est devenu un module.

Les façons d’importer

ÉcritureUtilisationQuand
import outilsoutils.tva(100)on voit d’où vient chaque nom
from outils import tva, Tickettva(100)quelques noms utilisés souvent
import outils as oo.tva(100)nom de module long
from outils import *tva(100)à éviter : on ne sait plus d’où viennent les noms

Où Python cherche-t-il les modules ?

Dans l’ordre : le dossier du programme lancé, puis les dossiers de la bibliothèque standard, puis les bibliothèques installées avec pip. La liste complète est dans sys.path.

Le bloc if __name__ == "__main__"

Quand Python importe un module, il exécute tout son code. Pour qu’une partie ne s’exécute que si on lance le fichier directement, on la protège :

if __name__ == "__main__":
    print("Test du module :", ttc(100))

Module et package

Plusieurs modules rangés dans un dossier avec un __init__.py forment un package (vu en C.1) : from centre.personnes import Stagiaire.

Exemple simple

La boîte à outils

Vous ne fabriquez pas un tournevis chaque fois que vous en avez besoin : vous le prenez dans la boîte à outils. Un module, c'est une boîte à outils de fonctions et de classes que d'autres programmes empruntent avec import.

import math
print(math.sqrt(144))   # 12.0
Exemple simple

Prendre seulement ce qu'il faut

On peut importer tout le module, ou seulement un outil, et même lui donner un surnom plus court.

import outils                 # outils.tva(100)
from outils import tva        # tva(100)
import outils as o            # o.tva(100)

3Manipuler

Le programme écrit d'abord un fichier outils.py dans la mémoire du navigateur, puis l'importe. Ajoutez une fonction remise(prix, pourcentage) dans le texte du module, et utilisez-la dans le programme principal.
Pas à pas dans le lab ↗Python se charge au premier clic (environ 12 Mo, une seule fois).
Console

4Pratiquer

Exercice 1 · Votre premier module

Créez (sur votre ordinateur) un fichier conversions.py avec deux fonctions dh_vers_euro(m) et euro_vers_dh(m), puis un fichier main.py dans le même dossier qui les importe et les utilise.

Voir le corrigé
# conversions.py
TAUX = 10.8
def dh_vers_euro(m):
    return round(m / TAUX, 2)
def euro_vers_dh(m):
    return round(m * TAUX, 2)

# main.py
from conversions import dh_vers_euro, euro_vers_dh
print(dh_vers_euro(108))   # 10.0
print(euro_vers_dh(5))     # 54.0

Exercice 2 · À quoi sert __main__ ?

Dans le module outils, pourquoi le message « Test du module » ne s'affiche-t-il pas quand on fait import outils ? Quand s'afficherait-il ?

Voir le corrigé
Quand un fichier est importé, sa variable __name__ vaut le nom
du module ("outils"), donc le bloc if __name__ == "__main__"
est ignoré. Il ne s'exécute que si on lance directement le
fichier : python outils.py. On y met les tests du module.

Exercice 3 · Explorer un module

Affichez la liste des noms définis dans le module math, puis l'aide de la fonction math.floor.

Voir le corrigé
import math
print(dir(math))
help(math.floor)

5Vérifier

1. Qu'est-ce qu'un module en Python ?
2. Après from outils import ttc, comment appelle-t-on la fonction ?
3. Que vaut __name__ dans un fichier lancé directement avec python fichier.py ?