Python 3.15 : ce qui change pour les développeurs
Python 3.15 arrive avec imports paresseux, frozendict, UTF-8 par défaut et un JIT amélioré. Ce qu'il faut tester avant de migrer.
La version finale de Python 3.15 est programmée pour ce 9 octobre 2026, avec une semaine de retard sur le calendrier initial. L'équipe de publication a en effet ajouté une troisième release candidate, sortie le 2 octobre, pour corriger des bugs bloquants de dernière minute liés aux imports paresseux. Tour d'horizon des nouveautés annoncées et des points à vérifier avant de migrer.
Une rc3 surprise avant la version finale
Selon le billet publié sur le blog officiel de Python, la 3.15.0rc3 a été publiée pour intégrer des correctifs de « release blockers » concernant les imports paresseux, la fonctionnalité phare de cette version. Elle rassemble environ 156 corrections de bugs, améliorations de build et modifications de documentation, signées par 82 contributeurs depuis la rc2. L'équipe précise qu'aucun changement d'ABI n'interviendra désormais : les wheels compilées contre les release candidates fonctionneront avec les versions 3.15 ultérieures.
Les nouveautés du langage
La liste officielle des changements est longue. Les plus visibles pour le développeur au quotidien :
- Imports paresseux explicites (PEP 810) : un module peut n'être chargé qu'au moment où il est réellement utilisé, ce qui vise à réduire le temps de démarrage des applications et des outils en ligne de commande.
- Un type
frozendictintégré (PEP 814), c'est-à-dire un dictionnaire immuable, et un typesentinel(PEP 661) pour les valeurs marqueurs. - Le déballage dans les compréhensions (PEP 798).
- UTF-8 comme encodage par défaut (PEP 686), un changement attendu de longue date qui uniformise le comportement entre Windows, macOS et Linux.
- Des messages d'erreur encore améliorés et un nouveau profileur par échantillonnage, baptisé Tachyon (PEP 799).
Côté typage, la version apporte notamment TypeForm (PEP 747) et les TypedDict avec éléments supplémentaires typés (PEP 728).
Un JIT plus rapide, toujours expérimental
Le compilateur JIT expérimental progresse. Les notes de version annoncent une amélioration de 7 à 8 % en moyenne géométrique sur Linux x86-64 par rapport à l'interpréteur standard, et de 11 à 12 % sur macOS AArch64 par rapport à l'interpréteur à appels terminaux. Les pointeurs de frame sont par ailleurs activés par défaut à la compilation (PEP 831), ce qui facilite le profilage. Sur macOS, les binaires officiels installent désormais par défaut la prise en charge du mode sans GIL (free-threading).
Ce qu'il faut tester avant de migrer
Le passage à UTF-8 par défaut est le changement le plus susceptible de casser du code existant : les scripts qui lisent ou écrivent des fichiers sans préciser l'encodage peuvent se comporter différemment, en particulier sur Windows. Mieux vaut vérifier ces appels avant de basculer.
Les mainteneurs de bibliothèques sont invités à publier leurs wheels 3.15 sur PyPI. Un problème connu est signalé : sur macOS 27.0, IDLE et les applications tkinter peuvent se figer lorsqu'une commande de menu ouvre une boîte de dialogue. Pour tester sans toucher à son poste, un environnement isolé reste la solution la plus simple ; notre guide Docker : par où commencer détaille la démarche.
Python 3.10 n'est plus maintenu
Dernier point d'attention : selon le guide des développeurs de Python, la branche 3.10 a atteint sa fin de vie le 1er octobre 2026 et ne reçoit plus de correctifs de sécurité. La 3.11 reste maintenue jusqu'en octobre 2027. Les projets encore sur 3.10 ont donc tout intérêt à planifier une montée de version, que ce soit vers 3.14 ou directement vers 3.15 une fois l'écosystème prêt. Comme pour Node.js, suivre le cycle de support du runtime fait partie de l'hygiène de base d'un projet.