Modules Python
Rappel d'ouverture (5 minutes, cours fermé)
Réponds sans rouvrir les pages précédentes, en écrivant tes réponses.
- Écris la signature typée et la docstring d'une fonction qui renvoie l'aire d'un disque à partir de son rayon.
- À quoi sert un
assertplacé au début d'une fonction ? - Que vaut
d.get("absente", 0)si la clé"absente"n'est pas dans le dictionnaired?
Corrigé
python def aire_disque(rayon: float) -> float: """Renvoie l'aire d'un disque de rayon donné."""- À vérifier une précondition : ce qui doit être vrai des arguments pour que la fonction ait un sens. Il protège la fonction contre un usage incorrect, et documente le contrat.
0. C'est tout l'intérêt deget: il ne lève pas d'erreur sur une clé absente, il renvoie la valeur par défaut qu'on lui donne.
Un module est un fichier Python (.py) qui contient du code réutilisable : des fonctions, des classes, des variables. Les modules permettent d'organiser le code et d'éviter la répétition.
Python propose des centaines de modules intégrés (comme random, math, os...), permet d'en télécharger des milliers d'autres, et tu peux aussi créer tes propres modules.
1. Qu'est-ce qui se cache derrière import
Exemple de départ
Ce programme affiche un nombre aléatoire entre 1 et 6 (comme un dé).
Explication de l'import
Quand tu écris import random, Python :
- Cherche un fichier nommé
random.pydans ses bibliothèques standard - Exécute tout le code de ce fichier (définitions de fonctions, de variables, etc.)
- Crée un objet
randomqui contient tout ce qui a été défini dans le fichier
Ensuite, tu peux accéder aux fonctions du module avec la notation pointée : random.randint(), random.choice(), etc.
Autres modules courants
Variantes de l'import
Import avec alias
c'est une fonctionnalité qui sert à renommer un module pour que le code soit plus léger.
Import d'une fonction spécifique
Lorsqu'on a besoin que d'une seule fonction.
Attention
Avec from random import randint, tu ne peux utiliser que randint. Pour utiliser d'autres fonctions du module, il faudrait les importer aussi.
Import de tout (MAUVAISE PRATIQUE - NE PAS FAIRE)
J'ajoute uniquement ce paragraphe pour que tu ne fasses pas ça.
Mauvaise pratique
from module import * importe tout et peut créer des conflits de noms. La dernière version importée écrase les précédentes.
Exemple concret du problème :
from math import *
from numpy import *
# La fonction exp de numpy a écrasé celle de math
print(exp(1)) # Fonctionne : 2.718...
print(exp(1 + 2j)) # Fonctionne : numpy accepte les complexes
Maintenant, inversons l'ordre :
from numpy import *
from math import *
# La fonction exp de math a écrasé celle de numpy
print(exp(1)) # Fonctionne : 2.718...
print(exp(1 + 2j)) # ❌ ERREUR : math n'accepte pas les complexes
Le même code produit des résultats différents selon l'ordre des imports ! C'est pourquoi il faut éviter import *.
2. Importer un fichier dans le même répertoire
Tu peux créer tes propres modules en écrivant un fichier Python, puis l'importer dans un autre fichier.
Exemple : Module de calculs géométriques
Fichier geometrie.py (le module) :
def aire_rectangle(longueur: float, largeur: float) -> float:
"""Calcule l'aire d'un rectangle."""
return longueur * largeur
def aire_cercle(rayon: float) -> float:
"""Calcule l'aire d'un cercle."""
import math
return math.pi * rayon ** 2
def perimetre_rectangle(longueur: float, largeur: float) -> float:
"""Calcule le périmètre d'un rectangle."""
return 2 * (longueur + largeur)
Fichier programme.py (utilise le module) :
import geometrie
# Utiliser les fonctions du module geometrie
print(geometrie.aire_rectangle(5, 3)) # 15
print(geometrie.aire_cercle(10)) # 314.159...
print(geometrie.perimetre_rectangle(5, 3)) # 16
Comment ça marche ?
Quand Python voit import geometrie, il cherche un fichier geometrie.py dans le même répertoire que programme.py, l'exécute, et te donne accès à tout ce qui y est défini.
Exemple : Module de jeux
Fichier jeux.py :
import random
def lancer_de(nombre_faces: int = 6) -> int:
"""Simule le lancer d'un dé."""
return random.randint(1, nombre_faces)
def pile_ou_face() -> str:
"""Simule un pile ou face."""
return random.choice(["Pile", "Face"])
def tirage_loto(nb_numeros: int = 5, maximum: int = 49) -> list[int]:
"""Tire des numéros aléatoires sans répétition."""
return random.sample(range(1, maximum + 1), nb_numeros)
Fichier mon_jeu.py :
from jeux import lancer_de, pile_ou_face
print("Lancer de dé:", lancer_de()) # ex: 4
print("Pile ou face:", pile_ou_face()) # ex: Pile
print("Dé à 20 faces:", lancer_de(20)) # ex: 17
Organisation des fichiers
mon_projet/
├── geometrie.py ← Module
├── jeux.py ← Module
├── programme.py ← Utilise geometrie
└── mon_jeu.py ← Utilise jeux
Bonnes pratiques
- Un module = un fichier avec des fonctions liées (géométrie, jeux, calculs...)
- Donne des noms clairs aux modules (évitez
module1.py,truc.py) - Documente tes fonctions avec des docstrings (
"""...""")
3. Installer de nouveaux modules
Python a une immense bibliothèque de modules créés par la communauté. Pour les utiliser, il faut d'abord les installer.
La bibliothèque PyPI
PyPI (Python Package Index) est le dépôt officiel qui contient plus de 500 000 modules Python : pour faire des graphiques, des sites web, de l'intelligence artificielle, des jeux...
Exemples de modules populaires :
requests: pour faire des requêtes HTTPflask: pour créer des applications webnumpy: pour les calculs scientifiquespygame: pour créer des jeux
Installation avec uv
uv est un outil moderne pour gérer les dépendances Python. Il est beaucoup plus rapide que pip (l'outil classique).
Installer un module
Ce qu'il se passe :
uvcherche le modulerequestssur PyPI- Télécharge le module et toutes ses dépendances (autres modules dont il a besoin)
- Installe le module dans ton projet
- Met à jour le fichier
pyproject.toml(qui liste tous les modules de ton projet) - Met à jour le fichier
uv.lock(qui verrouille les versions exactes)
Fichiers créés
pyproject.toml: liste les modules dont ton projet a besoinuv.lock: verrouille les versions exactes pour garantir la reproductibilité.venv/: dossier contenant tous les modules installés (environnement virtuel)
Utiliser le module installé
Après uv add requests, tu peux l'importer normalement :
import requests
response = requests.get("https://api.github.com")
print(response.status_code) # 200 si tout va bien
Désinstaller un module
Installer les dépendances d'un projet existant
Si tu récupères un projet Python qui a un fichier pyproject.toml, installez toutes les dépendances avec :
Recommandation
Utilise uv pour tous tes nouveaux projets. C'est l'avenir de la gestion de dépendances en Python.
4. Exercices
Exercice 1 : Module de conversions
Crée un fichier conversions.py avec les fonctions suivantes :
celsius_vers_fahrenheit(c): convertit des degrés Celsius en Fahrenheitfahrenheit_vers_celsius(f): convertit des degrés Fahrenheit en Celsiuskm_vers_miles(km): convertit des kilomètres en miles (1 km = 0.621371 miles)
Crée ensuite un fichier test_conversions.py qui importe ce module et teste les trois fonctions.
Solution
Fichier conversions.py :
def celsius_vers_fahrenheit(c: float) -> float:
"""Convertit des degrés Celsius en Fahrenheit."""
return c * 9/5 + 32
def fahrenheit_vers_celsius(f: float) -> float:
"""Convertit des degrés Fahrenheit en Celsius."""
return (f - 32) * 5/9
def km_vers_miles(km: float) -> float:
"""Convertit des kilomètres en miles."""
return km * 0.621371
Fichier test_conversions.py :
Exercice 2 : Utiliser le module math
Sans regarder la documentation, essaie de deviner ce que font ces fonctions du module math :
Exécute le code pour vérifier tes hypothèses.
Solution
Exercice 3 : Import sélectif
Réécris ce code en important seulement les fonctions nécessaires (avec from ... import ...) :
Exercice 4 : Module de statistiques
Crée un fichier stats.py avec les fonctions :
moyenne(liste): calcule la moyenne d'une liste de nombresminimum(liste): renvoie le plus petit élémentmaximum(liste): renvoie le plus grand élément
Teste ton module avec [10, 15, 8, 22, 19].
Solution
Fichier stats.py :
def moyenne(liste: list[float]) -> float:
"""Calcule la moyenne d'une liste de nombres."""
return sum(liste) / len(liste)
def minimum(liste: list[float]) -> float:
"""Renvoie le plus petit élément."""
return min(liste)
def maximum(liste: list[float]) -> float:
"""Renvoie le plus grand élément."""
return max(liste)
Test :
5. Résumé
- Un module est un fichier Python (
.py) contenant du code réutilisable import modulecharge un module (standard ou local)- Modules standard :
random,math,time, etc. (fournis avec Python) - Modules locaux : tes propres fichiers
.pydans le même répertoire - PyPI : bibliothèque en ligne avec 500 000+ modules
uv add: installe un module depuis PyPI (rapide et moderne)uv sync: installe toutes les dépendances d'un projet existant