Un module Python est un fichier portant l’extension .py qui regroupe des définitions de fonctions, de classes et de variables réutilisables. En 2026, cette brique de base n’a pas changé de nature, mais l’écosystème qui l’entoure a subi des modifications profondes avec les versions 3.13 et 3.14 du langage. Comprendre ces évolutions permet d’éviter des erreurs concrètes lors d’une migration ou d’un nouveau projet.
Modules supprimés de la bibliothèque standard en Python 3.13
La PEP 594 prévoyait le retrait progressif de modules jugés obsolètes. Python 3.13 applique la seconde vague de ces suppressions. Concrètement, des modules comme cgi, telnetlib, crypt et lib2to3 ne font plus partie de la bibliothèque standard.
Le résultat direct pour un développeur : un code qui fonctionnait sous Python 3.12 peut lever une erreur ModuleNotFoundError dès le passage en 3.13. Le problème a été signalé sur des runtimes managés comme AWS Lambda, où la mise à jour de l’environnement d’exécution déclenche ces erreurs sans que le code source ait été modifié.
Avant toute migration, il faut auditer les import du projet. La commande grep -rn "import cgi\|import telnetlib\|import crypt" . dans le répertoire source suffit à repérer les dépendances concernées. Pour chaque module retiré, un package tiers de remplacement existe sur PyPI (par exemple legacy-cgi pour le module cgi).

Les t-strings de Python 3.14 : un nouveau type de module standard
Python 3.14 introduit les t-strings, définies par la PEP 750. Le préfixe t devant une chaîne (comme t"Bonjour {nom}") ne renvoie pas une chaîne de caractères classique. Il produit un objet Template issu d’un nouveau module standard appelé string.templatelib.
La différence avec une f-string est structurelle. Une f-string évalue et insère la valeur directement dans la chaîne finale. Une t-string sépare les parties littérales des valeurs interpolées, ce qui permet de traiter chaque valeur avant de produire le résultat.
Cas d’usage concret des t-strings
Le bénéfice principal est la sécurité. Avec une f-string utilisée pour construire une requête SQL ou un fragment HTML, la valeur interpolée est insérée telle quelle, ouvrant la porte aux injections. Avec une t-string, le développeur ou le framework peut appliquer un échappement sur chaque variable avant l’assemblage final.
Pour utiliser cette fonctionnalité, un simple from string.templatelib import Template rend le type disponible. Ce module fait partie de la bibliothèque standard de Python 3.14, aucune installation via pip n’est nécessaire.
Free-threading et GIL : ce qui change pour les modules en 3.14
Le verrou global de l’interpréteur (GIL) empêche historiquement l’exécution simultanée de plusieurs threads Python sur différents cœurs du processeur. La PEP 703 a initié la suppression progressive de ce verrou, et Python 3.14 marque une étape avec la promotion officielle du build free-threaded en version supportée (PEP 779).
Pour les auteurs de modules et de packages, cette évolution a une conséquence directe. Un module qui repose sur des extensions C doit vérifier sa compatibilité avec le mode free-threaded. Les packages publiés sur PyPI doivent préciser s’ils fonctionnent dans ce contexte, car un code C non thread-safe peut provoquer des corruptions de données silencieuses.
- Vérifier que les extensions C du module utilisent des structures thread-safe avant de publier une version compatible free-threaded
- Tester le package avec l’interpréteur compilé en mode
--disable-gilpour identifier les sections critiques - Consulter la documentation de chaque dépendance tierce pour confirmer le support du free-threading

Packaging Python en 2026 : PyPI gèle l’index HTML avec la PEP 833
La manière dont pip résout et télécharge les packages depuis PyPI a aussi évolué. En août 2026, PyPI a adopté la PEP 833, qui gèle la représentation HTML de l’index (la « simple API » historique) au profit des API JSON de PyPI.
En pratique, les outils de packaging récents (pip, uv, poetry) utilisent déjà les endpoints JSON. L’impact touche surtout les scripts d’entreprise ou les miroirs internes qui interrogeaient directement le format HTML pour construire des index privés. Ces outils doivent migrer vers l’API JSON sous peine de ne plus recevoir les nouvelles métadonnées des packages.
Vérifier la compatibilité de son pipeline
Un pip install --upgrade pip suivi d’un test d’installation dans un environnement propre permet de confirmer que le résolveur fonctionne avec le nouvel index. Pour les miroirs privés basés sur des outils comme devpi ou bandersnatch, une mise à jour vers les dernières versions intégrant le support JSON est nécessaire.
Structurer un module Python selon les standards actuels
Les fondamentaux restent stables. Un fichier .py contenant des fonctions définies avec def et des classes avec class constitue un module. Un répertoire contenant un fichier __init__.py forme un package. La variable __name__ permet de distinguer l’exécution directe de l’import.
Ce qui a changé en 2026, c’est l’outillage attendu autour de ce module :
- Les annotations de type (type hints) sont devenues un standard de fait, vérifiées par mypy ou pyright dans les pipelines CI/CD
- Le fichier
pyproject.tomlremplace définitivementsetup.pypour déclarer les métadonnées du package - Les tests unitaires avec pytest sont attendus dès la publication sur PyPI, avec une couverture documentée
- Le support du free-threading doit être déclaré explicitement pour les packages contenant du code C
Un module bien structuré en 2026 sépare la logique métier des effets de bord (entrées/sorties, réseau), expose des types annotés et fournit un fichier pyproject.toml conforme aux PEP en vigueur. La conformité au packaging moderne conditionne désormais la visibilité sur PyPI, car les outils de résolution JSON exploitent directement ces métadonnées normalisées.

