Question 1Quel mapping de module / package / bibliothèque est correct ?
Modules et packages — Importer depuis d'autres fichiers
Apprends les différences entre modules, packages et bibliothèques Python, plus comment l'instruction import récupère des fonctions depuis d'autres fichiers.
Les applications Python sont généralement construites en répartissant le travail sur plusieurs fichiers et en les reliant. Cet article parcourt les unités appelées modules et packages, plus comment l'instruction import récupère des fonctionnalités depuis un autre fichier.
Module vs Package vs Bibliothèque
Python organise le code en trois tailles : module → package → bibliothèque. Un module est un seul fichier .py, un package est un dossier de modules, et une bibliothèque est l'échelon supérieur — un paquet distribuable.
| Unité | Ce que c'est | Exemple |
|---|---|---|
| Module | Un seul fichier .py | math_utility.py |
| Package | Un dossier contenant __init__.py | my_app/database/ |
| Bibliothèque | Une distribution d'un ou plusieurs packages | pandas / NumPy / requests |
Bibliothèque standard vs bibliothèque tierce
Python est livré avec une bibliothèque standard par défaut, et il existe des bibliothèques tierces que tu installes en plus. Les bibliothèques standard comme math, os et json fonctionnent avec un simple import. Les bibliothèques tierces comme pandas ou requests ont besoin de pip install nom_du_package au préalable.
| Type | Installation | Exemples |
|---|---|---|
| Bibliothèque standard | Livrée avec Python (sans installation) | math / os / sys / json / datetime |
| Bibliothèque tierce | À ajouter via pip install | pandas / numpy / requests |
Importer tes propres modules
Tu peux importer tes propres fichiers .py exactement comme la bibliothèque standard. Quand tu exécutes Python en local, place main.py et le fichier que tu veux importer (math_utility.py) dans le même dossier — c'est tout. Les fichiers du même dossier se chargent avec un simple import math_utility depuis main.py (pas de suffixe .py dans l'instruction d'import).
- main.py — le point d'entrée. Commence par
import math_utility - math_utility.py — le module qui définit
add()/multiply()
import math_utility trouve le voisin tout de suite — pas besoin de sous-dossier.import math_utility s'exécute, Python charge math_utility.py depuis le même dossier. Ensuite, tu peux appeler ses fonctions en tant que math_utility.add(...) avec le nom de module en préfixe.import exécute le fichier entier une seule fois
Quand tu écris import math_utility, Python exécute math_utility.py de haut en bas une seule fois. Les définitions de fonctions (def) sont enregistrées en mémoire à ce moment-là, donc tu peux ensuite les appeler comme math_utility.add(...). Les corps de ces fonctions ne s'exécutent pas au moment de l'import — seul le code en dehors de toute fonction (le niveau supérieur du module) s'exécute.
import math_utility, Python exécute math_utility.py de haut en bas. Les définitions def sont enregistrées en mémoire et deviennent appelables en tant que math_utility.add(...) ensuite.Ne lance pas de tâches lourdes au niveau supérieur du module
Le niveau supérieur désigne le code situé à l'indentation la plus extérieure — en dehors de toute fonction ou classe. Python l'exécute de haut en bas chaque fois que le module est importé. Y placer des tâches lourdes (connexions BD, chargement de fichiers énormes, boucles infinies) signifie que simplement importer le module prend une éternité. Garde la logique lourde à l'intérieur des fonctions et ne laisse au niveau supérieur que les définitions et l'initialisation minimale.
Distinguer exécution directe et import — __name__
Les fichiers Python existent en deux saveurs : les scripts exécutés directement (que tu lances avec python xxx.py) et les modules importés par autre chose. Le même fichier peut jouer l'un ou l'autre rôle, et tu as souvent besoin de savoir lequel se produit — par exemple, « ne lancer un test rapide que si le fichier est exécuté directement ».
Le test utilise la variable spéciale __name__ que Python définit automatiquement. Quand le fichier est exécuté directement, __name__ vaut "__main__". Quand le fichier est importé, __name__ vaut le nom du module (le nom de fichier). Le code à l'intérieur de if __name__ == "__main__": ne s'exécute que dans le premier cas.
__name__ vaut "__main__" quand tu exécutes le fichier directement (python xxx.py), et le nom du module (nom de fichier) quand un autre fichier l'importe.# math_utility.py
def add(a, b):
return a + b
# Test rapide uniquement à l'exécution directe
if __name__ == "__main__":
print("check:", add(10, 20)) # 30
# Quand un autre fichier fait `import math_utility`,
# le bloc if ci-dessus ne s'exécute pas — seule la fonction add est exposée.
Combiner plusieurs de tes propres modules
Dans les vraies applications, tu répartis généralement les fonctions dans des fichiers séparés par responsabilité et tu les récupères toutes depuis main.py. Par exemple, les vérifications d'entrée vivent dans validator.py, le formatage d'affichage dans formatter.py. Avec les responsabilités réparties ainsi, les changements de formatage ne touchent que formatter.py — main.py et validator.py restent intacts.
import validator et import formatter, puis combine leurs fonctions pour faire un seul travail.Cet article a couvert la hiérarchie module / package / bibliothèque, comment import récupère des fonctions depuis d'autres fichiers, ce qui s'exécute au moment de l'import, le motif __name__ == "__main__" pour distinguer exécution directe et import, et la répartition multi-modules où chaque fichier porte une seule responsabilité. Le prochain article creuse les packages et le fichier __init__.py.
Vérification des connaissances
Répondez à chaque question une par une.
Question 2math_utility.py contient print("hello") écrit au niveau supérieur. Qu'apparaît-il à l'écran quand un autre fichier fait import math_utility ?
Question 3Quel est le bon couplage pour exécution directe vs import de ce code ?if __name__ == "__main__":
print("hello")