Stable is a release fact.
The Python Software Foundation released Python 3.15.0 on October 9, 2026. The release adds explicit lazy imports, built-in frozendict and sentinel types, UTF-8 as the default encoding, a stable ABI for free-threaded builds, and frame pointers by default.[1]
Those changes do not answer whether your application fits. The same release page warns that Tk applications can hang on macOS 27 when a menu command opens a dialog. One stable runtime can still meet an unstable platform seam.
Upgrade the workload, not the version string.
Resolution can lag release.
We asked uv 0.11.9 for Python 3.15 on this Linux host. It resolved a managed 3.15.0a8 build, not the stable 3.15.0 release. The alpha reported UTF-8 mode, but sentinel was undefined. This does not indict Python or uv. It proves that a broad version request and a successful launch can still select the wrong artifact.
We also downloaded the official Python-3.15.0.tar.xz source archive and matched its SHA-256 digest, ba4bed1b...e3d575, against the release page. We did not compile that source. A matching archive proves identity, not project compatibility.
New syntax changes the floor.
Python 3.15 can defer module loading with the new lazy soft keyword. The documentation says a failed lazy import raises at first use rather than at the import statement. That changes startup time and failure timing.[2]
If a library adopts 3.15-only syntax, its package metadata needs an honest Python floor. The requires-python field in pyproject.toml records the project's Python version requirement.[3] Test the built wheel too. Source metadata and published distribution metadata can drift.
Native code gets its own lane.
The release adds a stable ABI for free-threaded builds and changes parts of the C API. The porting guide lists removed and deprecated APIs. It also asks C extensions and native libraries with custom build systems to keep the frame-pointer unwind chain intact.[2]
A pure-Python test run cannot clear that lane. Build each native extension on the target operating systems and architectures. Import the resulting wheels in both normal and free-threaded configurations when you claim both.
Keep the old lane alive.
Add 3.15 beside the oldest supported Python version before making it the default. Run unit tests, command-line entry points, packaging builds, startup checks, and production-shaped paths. Compare failures, warnings, startup time, and output bytes.
Promote only after the exact interpreter source, dependency lock, wheel set, test command, and result are attached to the change. Keep the previous runtime available until rollback has been exercised.