Python 3.15 est sorti : imports paresseux, profileur Tachyon et JIT 1,2x plus rapide
Python 3.15 est sorti. Les principales nouveautés : les imports paresseux explicites (PEP 810), le dépaquetage dans les comprehensions (PEP 798) et Tachyon, un profileur par échantillonnage intégré au module profiling.sampling. Côté performances, la version se distingue à peine de 3.14, mais le JIT expérimental atteint 1,2x sur un test de nombres de Fibonacci (mesure de Miguel Grinberg sur 3.15.0rc3). Avec 3.15, Python 3.10 sort officiellement du support. Pour les auteurs de bibliothèques, cela signifie que 3.11 peut devenir la version minimale. • Les imports paresseux réduisent le temps de démarrage des utilitaires CLI. • Tachyon remplace les profileurs externes comme py-spy. • Python 3.10 n'est plus supporté.
Traité par IA depuis Simon Willison ; édité par Hamidun News
Python 3.15 est sorti. Pour la plupart des développeurs, trois éléments comptent : les imports paresseux explicites, le profileur Tachyon dans la bibliothèque standard et la nouvelle syntaxe de dépaquetage dans les compréhensions de listes. La vitesse de l'interpréteur reste quasiment inchangée par rapport à 3.14, mais le JIT expérimental affiche pour la première fois un gain notable : 1,2x. Dans le même temps, Python 3.10 (2021) perd officiellement son support. Pour les mainteneurs de bibliothèques, c'est plus important que n'importe quelle nouvelle syntaxe : le plancher de compatibilité passe à 3.11. Le tour d'horizon des changements pour « What's new » a été rédigé cette année par le release manager des versions 3.14 et 3.15, Hugo van Kemenade.
Imports paresseux, dépaquetage et Tachyon
La nouveauté la plus concrète est la PEP 810. Un module peut désormais être déclaré ainsi : `lazy import json` ou `lazy from pathlib import Path`. L'import réel n'a lieu qu'au premier accès au symbole. Simon Willison, auteur de l'utilitaire CLI LLM et de son système de plugins, butait depuis longtemps sur ce problème. Les plugins aux dépendances lourdes, comme `sentence_transformers`, ajoutaient plusieurs secondes à chaque appel de la commande `llm`. Dans la documentation destinée aux auteurs de plugins, il devait recommander des imports paresseux faits à la main. Désormais, le langage règle la question.
Deuxième changement : la PEP 798 (auteurs : Adam Hartz et Erik Demaine). Elle ajoute le dépaquetage à l'intérieur des comprehensions : `[L for L in lists]` aplatit une liste de listes, `{s for s in sets}` fusionne des ensembles, `{**d for d in dicts}` fusionne des dictionnaires. C'est le prolongement de la PEP 448, apparue dès Python 3.5 en 2015.
Troisième nouveauté : les profileurs. Le `cProfile`, profileur à traçage bien connu, est renommé `profiling.tracing`. À ses côtés arrive `profiling.sampling`, un profileur par échantillonnage, alias Tachyon. Il prélève périodiquement les piles d'un processus en cours d'exécution et calcule où le temps est dépensé. Le surcoût est faible et il n'est pas nécessaire d'instrumenter le code au préalable. Jusqu'ici, il fallait installer des outils externes comme py-spy. La fonctionnalité est désormais intégrée à la bibliothèque standard.
Dans l'exemple du tour d'horizon, le profileur a collecté 2 651 échantillons en 2,65 secondes, à une fréquence d'environ 1000 par seconde. Le plus parlant : le processus est resté presque tout le temps inactif, en attente de la boucle d'événements asyncio. Le résultat peut être affiché sous forme de flame graph et de heat map, ainsi qu'au format de l'interface Firefox Profiler. Sur macOS, il a fallu `sudo` pour se rattacher au processus par son PID.
Performances : le JIT enfin visible
Inutile de compter sur une accélération « gratuite ». Miguel Grinberg a comparé 3.15.0rc3 à 3.14 et constaté que les performances restent globalement les mêmes. L'exception, c'est le JIT expérimental.
- JIT contre l'interpréteur standard de 3.15 : 1,2x sur le test de Fibonacci.
- C'est la première fois que Grinberg observe un gain significatif grâce au JIT.
- Pour comparaison : l'an dernier, 3.14 devançait nettement 3.13 dans un nombre de catégories bien plus important.
- Profileur Tachyon : environ 1000 échantillons par seconde, sans instrumentation préalable.
Comment mettre à jour et ce que change l'abandon de 3.10
Avec `uv`, la migration tient en quelques commandes. Il faut d'abord mettre à jour l'outil lui-même pour qu'il connaisse la nouvelle version : `uv self update`. On installe ensuite l'interpréteur : `uv python install 3.15`. Pour en faire la version par défaut de tous les `uv run` dont le projet n'épingle pas une autre version, on exécute `uv python pin --global 3.15`. Vérification : `uv run python --version`. Les utilitaires déjà installés se réinstallent avec la version voulue, par exemple `uv tool upgrade datasette --python 3.15`.
Pour les mainteneurs, l'envers du décor est plus intéressant. La politique de Willison consiste à prendre en charge toutes les versions de Python encore maintenues. Comme 3.10 n'est plus supporté, on peut s'appuyer sur les fonctionnalités de 3.11 :
- `tomllib` dans la bibliothèque standard ;
- `asyncio.TaskGroup` et `asyncio.timeout()` ;
- `datetime.UTC` comme alias de `datetime.timezone.utc` ;
- dans `sqlite3` : `setlimit()`/`getlimit()`, `create_window_function()`, `blobopen()` pour la lecture partielle de gros BLOB et `set_authorizer(None)` pour retirer l'autorisateur ;
- un système de types nettement étoffé.
Dans Datasette, une première PR (n° 2998) supprime déjà le contournement pour `set_authorizer(None)`. Les modèles cookiecutter pour click-app, datasette-plugin, python-lib et llm-plugin sont désormais testés sur les versions 3.11 à 3.15. La conclusion pratique pour votre projet : vérifiez la matrice CI, retirez 3.10 et ajoutez 3.15. Mieux vaut tester d'abord les imports paresseux sur des outils CLI aux dépendances lourdes. Le gain sur le temps de démarrage y est immédiatement visible.
Build & Ship Production AI Apps with Vibe Coding
Join Zhemal Khamidun's hands-on Vibe Coding Intensive at hamidun.com/vibecoding — master Claude Code, Cursor, and autonomous agentic workflows.
L'essentiel de l'IA — une fois par semaine
Sept actus qui ont vraiment compté, choisies à la main. Sans bruit ni communiqués.
C'est fait ! Vérifiez votre boîte mail pour la confirmation.