Aller au contenu
Interligne

Un fanzine francophone d’actualités et de découvertes, expliqué clairement et sourcé. Rédigé par IA (faute de temps !).

Article Fiabilité : solide

Python 3.15 : imports paresseux, UTF-8 par défaut et JIT accéléré

Sortie le 9 octobre 2026, Python 3.15 change la façon de charger les modules, l'encodage par défaut des textes et les performances du compilateur JIT.

Un fanzine francophone d’actualités et de découvertes, expliqué clairement et sourcé. Rédigé par IA (faute de temps !).

Python 3.15

Python 3.15 est sorti le 9 octobre 2026 [1][2]. Cette version arrive un an après Python 3.14 [4]. La documentation officielle range parmi ses changements principaux les imports paresseux, les types intégrés frozendict et sentinel, l'encodage UTF-8 par défaut, le dépaquetage dans les compréhensions et une interface binaire stable pour les versions « free-threaded » [1].

Les imports paresseux

C'est le changement que la documentation et la presse spécialisée mettent le plus en avant. Jusqu'ici, Python chargeait chaque module au moment de l'import, que le programme s'en serve ensuite ou non [4]. La version 3.15 ajoute un mot-clé facultatif, lazy, défini par la proposition PEP 810 [1].

Avec une ligne comme lazy import json, le module est déclaré sans être chargé. Le nom est associé à un mandataire léger, et le chargement réel n'a lieu qu'au premier accès [3][4]. L'objectif affiché est de réduire le temps de démarrage des scripts [2].

La fonction reste encadrée [1] :

  • elle n'est autorisée qu'au niveau d'un module, pas à l'intérieur d'une fonction ;
  • ni les imports avec étoile, ni les imports __future__ ne peuvent être paresseux ;
  • un réglage global permet de rendre tous les imports paresseux (valeur all) ou de ne respecter que le mot-clé (valeur normal, par défaut), et des fonctions permettent de lire et de modifier ce mode pendant l'exécution.

Dans le mode par défaut, seul le mot-clé compte : un import écrit sans lazy reste chargé immédiatement [1].

L'UTF-8 devient l'encodage par défaut

Python 3.15 adopte l'UTF-8 comme encodage par défaut, selon la proposition PEP 686 [1][4]. L'encodage est la correspondance entre les caractères d'un texte et les octets qui le représentent dans un fichier.

Les sources consultées annoncent le changement sans détailler ses conséquences pratiques. La documentation renvoie vers un guide de portage, « Porting to Python 3.15 », pour les projets qui migrent depuis une version antérieure [1].

Un compilateur JIT plus rapide, mais toujours expérimental

Python dispose d'un compilateur JIT (compilation à la volée), toujours qualifié d'expérimental dans cette version [2]. Phoronix rapporte les gains suivants, calculés en moyenne géométrique sur un ensemble de tests [2] :

  • 7 à 8 % de plus que l'interpréteur standard sous Linux x86-64 ;
  • 11 à 12 % de plus que l'interpréteur dit « tail-calling » sur macOS AArch64.

BetaNews reprend le chiffre de 11 à 12 % pour macOS [4]. Ces gains restent modestes, et les mesures dépendent de la plateforme.

Deux nouveaux types et un module de profilage

Le langage gagne deux types intégrés. frozendict est un dictionnaire qui ne peut plus être modifié après sa création et qui conserve l'ordre d'insertion des clés [3][4]. sentinel fournit un moyen standard de créer des valeurs marqueurs uniques [3].

Un nouveau module profiling regroupe les outils de profilage intégrés, c'est-à-dire ceux qui mesurent où un programme passe son temps, sous une interface commune [1][3]. Python active aussi les pointeurs de pile (« frame pointers ») par défaut, pour améliorer l'observabilité au niveau du système [2]. D'après la documentation, citée par BetaNews, les débogueurs, profileurs et outils basés sur eBPF peuvent ainsi parcourir plus vite et avec moins d'échecs les piles d'appels natives [4].

Fils d'exécution libres

Python 3.15 élargit la prise en charge des versions « free-threaded », où plusieurs fils d'exécution peuvent tourner sans le verrou global d'interpréteur (GIL) traditionnel [3]. La documentation signale une interface binaire stable pour les extensions écrites pour ces versions, et précise que les binaires officiels pour macOS installent désormais cette prise en charge par défaut [1].

Autres nouveautés citées

Phoronix mentionne aussi des messages d'erreur améliorés, des améliorations de la bibliothèque standard et de l'API C, ainsi que des fichiers de configuration au démarrage des paquets [2]. La documentation cite une nouvelle API C, PyBytesWriter, pour créer des objets bytes [1].

Pour aller plus loin, la page officielle « What's new in Python 3.15 » recense l'ensemble des changements [1].