What’s new in Python 3.15

Editor:

TBD

This article explains the new features in Python 3.15, compared to 3.14.

For full details, see the changelog.

Note

Prerelease users should be aware that this document is currently in draft form. It will be updated substantially as Python 3.15 moves towards release, so it’s worth checking back even after reading earlier versions.

Summary — release highlights

New features

Other language changes

  • Several error messages incorrectly using the term “argument” have been corrected. (Contributed by Stan Ulbrych in gh-133382.)

New modules

  • None yet.

Improved modules

ssl

  • Indicate through ssl.HAS_PSK_TLS13 whether the ssl module supports “External PSKs” in TLSv1.3, as described in RFC 9258. (Contributed by Will Childs-Klein in gh-133624.)

Optimizations

module_name

  • TODO

Deprecated

  • module_name: TODO

Removed

sysconfig

typing

  • The undocumented keyword argument syntax for creating NamedTuple classes (for example, Point = NamedTuple("Point", x=int, y=int)) is no longer supported. Use the class-based syntax or the functional syntax instead. (Contributed by Bénédikt Tran in gh-133817.)

  • Using TD = TypedDict("TD") or TD = TypedDict("TD", None) to construct a TypedDict type with zero field is no longer supported. Use class TD(TypedDict): pass or TD = TypedDict("TD", {}) instead. (Contributed by Bénédikt Tran in gh-133823.)

wave

  • Removed the getmark(), setmark() and getmarkers() methods of the Wave_read and Wave_write classes, which were deprecated since Python 3.13. (Contributed by Bénédikt Tran in gh-133873.)

Porting to Python 3.15

This section lists previously described changes and other bugfixes that may require changes to your code.

Build changes

C API changes

New features

  • TODO

Porting to Python 3.15

Deprecated C APIs

  • TODO

Removed C APIs

  • Remove deprecated PyUnicode functions:

    • PyUnicode_AsDecodedObject(): Use PyCodec_Decode() instead.

    • PyUnicode_AsDecodedUnicode(): Use PyCodec_Decode() instead; Note that some codecs (for example, “base64”) may return a type other than str, such as bytes.

    • PyUnicode_AsEncodedObject(): Use PyCodec_Encode() instead.

    • PyUnicode_AsEncodedUnicode(): Use PyCodec_Encode() instead; Note that some codecs (for example, “base64”) may return a type other than bytes, such as str.

    (Contributed by Stan Ulbrych in gh-133612)

  • PyImport_ImportModuleNoBlock(): deprecated alias of PyImport_ImportModule(). (Contributed by Bénédikt Tran in gh-133644.)

The following functions are removed in favor of PyConfig_Get(). The pythoncapi-compat project can be used to get PyConfig_Get() on Python 3.13 and older.