Python 3.15.0 RC2 lands as final candidate before October release
Hugo van Kemenade has shipped Python 3.15.0 release candidate 2, the last planned preview before the final build drops on October 1. No new features. No ABI shifts. Just 144 bugfixes, some build tweaks, and documentation updates from 76 contributors since the first candidate landed a month ago.
If you're running the candidate today, you're looking at the shape of things to come.
The big picture
Python 3.15 is shaping up to be one of the more consequential releases in the language's recent history. We're talking about lazy imports that could trim startup times by 50–70% for CLI tools, UTF-8 as the default encoding on Windows, and a new statistical profiler that attaches to running processes without breaking a sweat.
The feature freeze hit back in May 2026, and the development team has been polishing since. RC2 is the final chance for the community to shake things out before the gold master.
lazy import json lazy from pathlib import Path
That's the syntax people will be arguing about. The lazy soft keyword defers module loading until first use. Proxy objects do the heavy lifting, resolving on demand and then becoming indistinguishable from regular imports. After two or three accesses, the bytecode specializes and the overhead vanishes completely.
Meta has been testing a similar mechanism in Cinder, their Python fork, reporting dramatic improvements in server reload times, ML training initialization, and Jupyter notebook cold starts.
What else ships in 3.15
frozendict finally arrives as a built-in, inheriting from object rather than dict. It's hashable when its contents are hashable, preserves insertion order, and plays nice with union operators. Useful for immutable config objects and cacheable function arguments.
UTF-8 mode becomes the default regardless of system locale. If you're on Windows with a cp1252 setup, this is a breaking change. The opt-out is available via PYTHONUTF8=0 if you need to buy time.
The profiling story gets a major overhaul. cProfile's tracing functionality moves to profiling.tracing, and Tachyon takes the spotlight as a new statistical sampling profiler. It runs at up to 1,000,000 Hz, attaches to live processes, and outputs to pstats, FlameGraphs, and Firefox's Gecko Profiler format.
Frame pointers are now enabled by default, with less than 2% overhead measured across platforms. This aligns CPython with Fedora, Ubuntu 24.04, and Arch, which rebuilt their entire package trees with frame pointers enabled.
The JIT compiler sees an 8–9% speedup on x86-64 Linux and 12–13% on AArch64 macOS. Windows 64-bit binaries now ship with the tail-calling interpreter enabled by default.
The long view
Python 3.15 will receive bugfix updates every two months until roughly October 2028, with security-only patches extending to approximately October 2031.
Many deprecated aliases from Python 3.10 have been purged. If you're still calling datetime.utcnow() or importing ast.get_argnames(), you'll need to adapt. The profile module is marked for removal in 3.17, and various C API functions will follow.
The release team—van Kemenade, Steve Dower, Ned Deily, and Julien Palard—signed off from Helsinki. They mentioned looking forward to PyCon Portugal in Aveiro, which is likely where the final release will be announced in person.
What happens next
RC2 is the last chance to find show-stopping bugs. The team will ship the final release on October 1 if nothing major surfaces. If you're running Python in production, test RC2 against your workloads now. The lazy import system and UTF-8 default are the changes most likely to surface edge cases.
Head to the What's New in 3.15 page for the complete feature list. The source code is here available. Full release details follow on the Python Insider blog.
