Blog
2 min read

Python 3.15 Released: Lazy Imports, frozendict, UTF-8 by Default and a Faster JIT

Python 3.15.0 shipped on 9 October 2026 after a one-week delay. Its headline features include explicit lazy imports, frozendict and sentinel built-ins, UTF-8 as the default encoding, the Tachyon profiler and an upgraded JIT. What to check before upgrading.

Python 3.15.0 was released on 9 October 2026. The final release was originally planned for 1 October, then postponed by a week: the release team found last-minute release blockers in the new lazy-import feature and shipped an extra release candidate, 3.15.0rc3, on 2 October to test the fixes. The final release notes confirm that 3.15.0 is now stable.

The previous stable line, 3.14, received bug-fix release 3.14.8 on 30 September.

What's new

Interpreter and language:

  • Explicit lazy imports (PEP 810) — mark imports as lazy so modules load only when first used, for faster startup of CLIs and large apps.
  • Built-in frozendict (PEP 814) — an immutable, hashable dictionary.
  • Built-in sentinel type (PEP 661) — proper unique placeholder values instead of object().
  • Unpacking in comprehensions (PEP 798).
  • UTF-8 is the default encoding (PEP 686) — open() without encoding= now uses UTF-8 everywhere, ending a classic Windows bug source. (What Is UTF-8?)
  • A significantly upgraded experimental JIT and better error messages.

Standard library and tooling:

  • The Tachyon sampling profiler and a dedicated profiling package (PEP 799) — profile running programs with low overhead.
  • Frame pointers on by default (PEP 831), which makes system profilers work better.

Typing: typed extra items in TypedDict (PEP 728), TypeForm (PEP 747) and disjoint bases (PEP 800).

Free-threading: a stable ABI for free-threaded builds, and official macOS installers include free-threading support by default.

Before you upgrade

  • Wait for your dependencies. Packages with compiled extensions need wheels built for 3.15; give the ecosystem a few weeks. (requirements.txt)
  • The UTF-8 default can change behaviour if your code read files in a legacy encoding without saying so. Specify encoding= explicitly where it matters.
  • macOS 27.0 and tkinter: the release notes warn that IDLE and other Tk apps can hang when opening dialogs, due to a macOS change. Hold off if you depend on Tk apps.
  • Use a virtual environment per project, and test in CI on 3.15 before switching production. (Python Virtual Environments)

Add Python 3.15 to your CI matrix early, and check that setup-python has a compatible build for your runner platform. (GitHub Actions Caching)

Source: Python 3.15.0 release notes · Python 3.15.0rc3 release notes · PEP 790 (3.15 schedule)


EasySpawn gives each project a Linux server where Claude Code can set up a Python 3.15 virtual environment alongside your current one and run your tests on both. See how it works or join the waitlist.

Related: What Is Python? · Python vs JavaScript · Python ModuleNotFoundError · Flask vs Django vs FastAPI

Keep reading