Skip to main content
Programming LanguagesPython· 6 min read· in Technology

Python 3.15 Released With Lazy Imports, Default UTF-8, and Upgraded JIT Compiler

The Python steering council has released version 3.15, introducing opt-in lazy imports to reduce application startup times and making UTF-8 the default text encoding across all platforms. The update also features an upgraded experimental just-in-time compiler and a new zero-overhead statistical profiler.

By Tariq Nasser

On October 9, 2026, the Python steering council released version 3.15, shifting the language's default text encoding to UTF-8 and introducing an opt-in mechanism to defer module loading. The update arrives exactly twelve months after version 3.14, bringing a heavily upgraded experimental just-in-time compiler and a new zero-overhead statistical profiler named Tachyon.[1][2][3][5]

The headline feature for large codebases is explicit lazy imports, introduced under Python Enhancement Proposal 810. Traditionally, the Python interpreter loads every imported module at the exact moment the import statement executes, regardless of whether the running program actually goes on to use those dependencies during that specific session.[2][3]

That eager loading behavior creates a severe bottleneck for command-line utilities and dependency-heavy applications, which can lose seconds at launch just parsing files. Under the new system, developers can write a statement that binds the module name to a lightweight proxy instead of executing it immediately.[2][3]

The actual module only loads into memory when the application first attempts to access it. The core development team emphasizes that this is strictly an opt-in capability; existing codebases will behave exactly as they did before unless maintainers explicitly update their import statements to use the new keyword.[2][3]

Lazy imports defer module loading until the application explicitly requests the dependency.

In many cases, lazy imports can replace both function-local and type-checking imports that were used to defer expensive operations, according to the tooling company Astral. This allows developers to keep their dependency declarations organized in a single block at the top of a file without paying a startup penalty.

Standardizing Text Encoding

The release also fundamentally changes how Python handles text files by making UTF-8 the default encoding across all platforms. Previously, file operations that omitted an explicit encoding argument would fall back to whatever locale the host operating system happened to use at the time of execution.[2][3]

That legacy behavior frequently caused cross-platform bugs, particularly when code developed on Linux systems was executed on Windows machines using different local encodings. By forcing UTF-8 globally, the language eliminates a persistent source of silent data corruption and runtime crashes in text processing.[1][3]

While the standardization prevents future bugs, it requires immediate attention from developers maintaining legacy Windows scripts. Applications that implicitly relied on local system encodings to read older text files will now attempt to parse them as UTF-8, which will trigger decoding errors unless maintainers update the calls to specify the legacy format.[2]

The Python steering council acknowledged that this transition might cause short-term friction for specific enterprise environments. However, the long-term benefit of having a single, predictable text encoding standard across the entire ecosystem far outweighs the temporary cost of updating legacy file operations.[5]

Incremental Compiler Gains

Python 3.15 delivers a significant upgrade to the language's just-in-time compiler, though the feature remains strictly marked as experimental. Rather than promising a universal speedup for all workloads, the release documentation provides specific, measured gains against the standard interpreter based on the underlying hardware architecture.[2][4]

On x86-64 Linux systems, the upgraded compiler achieves a seven to eight percent geometric mean performance improvement over the standard interpreter. The gains are slightly more pronounced on Apple Silicon hardware, where macOS systems see an eleven to twelve percent speedup compared to the tail-calling interpreter.[3][4]

The experimental JIT compiler delivers measurable performance improvements across different hardware architectures.

The official 64-bit Windows binaries now utilize the tail-calling interpreter by default, while the macOS installers automatically include support for free-threading. This alignment ensures that developers on different operating systems receive the most optimized execution environment available for their specific platform.[1]

The release also introduces stable application binary interface support for free-threaded builds. This makes it substantially easier for C extension developers to support execution without the Global Interpreter Lock, paving the way for truly multi-threaded Python applications in the future.[3]

Zero-Overhead Profiling

Beyond execution speed, the release introduces a dedicated profiling package designed to help developers identify performance bottlenecks in production environments. The package includes Tachyon, a brand-new statistical profiler based on high-frequency sampling rather than deterministic function-call tracing.[1]

Unlike traditional tracing tools that severely degrade application performance, Tachyon operates with virtually zero overhead, even when sampling at rates up to one million times per second. Crucially, the profiler can attach to a live, running process without requiring any code modifications or a process restart.[2]

Tachyon reports wall-clock time, CPU time or how long each thread holds the Global Interpreter Lock, and it can produce an interactive flame graph, the BetaNews analysis notes. This capability allows engineering teams to diagnose sudden performance regressions in live production systems without disrupting active user sessions.[2]

Illustration: The new Tachyon profiler allows engineers to diagnose performance bottlenecks in live production systems.

Because it operates statistically, Tachyon avoids the observer effect that plagues deterministic profilers, where the act of measuring the code fundamentally alters its execution speed. This makes the data it collects far more representative of actual production workloads.

Immutable Data Structures

On the language syntax side, Python 3.15 introduces two new built-in types to replace common developer workarounds. The first is an immutable dictionary type that preserves insertion order but strictly prevents any modifications to its contents after it is created.[3][4]

The new dictionary type serves as the equivalent to a frozen set, providing a standard way to pass configuration data or mapping structures that must remain constant. Because it is immutable, it can be used as a hashable object, provided all its keys and values are also hashable.[3]

The second addition is a sentinel type, which offers a standardized mechanism for creating unique marker values in application programming interfaces. Developers previously relied on homemade idioms, such as instantiating a bare object, to distinguish between a missing argument and an explicitly provided null value.[2][3]

The custom object approach frequently caused subtle bugs, as those instances could misbehave when being copied or serialized, causing identity comparisons to fail. The new built-in sentinel type handles serialization properly, ensuring that marker values remain unique and comparable across different execution contexts.

Ecosystem Transitions

The release of version 3.15 coincides with the end of the five-year support window for Python 3.10, which was first released in October 2021. Major ecosystem tools are already adjusting their baselines, with popular linters increasing their default target versions to match the shifting support window.

The release of version 3.15 coincides with the end of the five-year support window for Python 3.10, which was first released in October 2021.

Maintainers of third-party Python packages are now urged to publish compatible binary wheels on the Python Package Index. With the stable application binary interface locked in for this release series, extensions compiled against the current version are guaranteed to work with all future patch releases.[1]

Key points

  • Python 3.15 introduces an opt-in lazy import keyword that defers module loading to improve application startup times.
  • The release makes UTF-8 the default text encoding across all operating systems, eliminating a common source of cross-platform bugs.
  • An upgraded experimental JIT compiler delivers 7 to 12 percent performance gains on Linux and macOS architectures.
  • A new zero-overhead statistical profiler named Tachyon allows developers to diagnose performance issues in live production environments.

What we don’t know

  • How many legacy Windows applications will break due to the sudden shift to UTF-8 default encoding.
  • When the experimental JIT compiler will be declared stable and enabled by default for all workloads.
  • Whether the broader package ecosystem will rapidly adopt the new frozendict and sentinel types in their public APIs.

How we got here

  1. Oct 2021

    Python 3.10 is released, beginning a five-year support lifecycle that concludes with the arrival of version 3.15.

  2. Oct 2025

    Python 3.14 launches, setting the baseline for the experimental just-in-time compiler's initial architecture.

  3. Oct 2026

    Python 3.15 reaches stable status, introducing lazy imports, default UTF-8 encoding, and the Tachyon profiler.

Core Language Developers 40%Performance Engineers 35%Application Maintainers 25%
Core Language Developers
The Python steering council prioritizes predictable, cross-platform behavior over preserving legacy quirks.
Performance Engineers
System optimizers view the new profiling tools as a more immediate win than the experimental JIT compiler.
Application Maintainers
Tooling and application developers are focused on the practical benefits of deferred module loading.

Perspectives this story doesn't cover

  • Windows System Administrators
  • Legacy Application Maintainers

Sources

Source coverage

5 outlets

3 viewpoints surfaced

Core Language Developers 40%Performance Engineers 35%Application Maintainers 25%
  1. [1]Python.orgCore Language Developers

    Python Release Python 3.15.0

    Read on Python.org →
  2. [2]BetaNewsApplication Maintainers

    Python 3.15 arrives with lazy imports, UTF-8 by default and a faster JIT

    Read on BetaNews →
  3. [3]LinuxiacPerformance Engineers

    Python 3.15 Released with Faster JIT, Lazy Imports, and UTF-8 by Default

    Read on Linuxiac →
  4. [4]PhoronixPerformance Engineers

    Python 3.15 Released With Experimental JIT Compiler Running Faster - Phoronix

    Read on Phoronix →
  5. [5]LWN.netCore Language Developers

    Python 3.15 released [LWN.net]

    Read on LWN.net →

Comments

Stay informed

Every angle. Every day.

Get Technology stories with full source coverage and perspective breakdowns, free every day.