Changelog

Python next

Release date: XXXX-XX-XX

Tests

  • gh-142836: Accommodated Solaris in test_pdb.test_script_target_anonymous_pipe.

Library

  • gh-142783: Fix zoneinfo use-after-free with descriptor _weak_cache. a descriptor as _weak_cache could cause crashes during object creation. The fix ensures proper reference counting for descriptor-provided objects.

  • gh-142594: Fix crash in TextIOWrapper.close() when the underlying buffer’s closed property calls detach().

  • gh-142451: hmac: Ensure that the HMAC.block_size attribute is correctly copied by HMAC.copy. Patch by Bénédikt Tran.

  • gh-142495: collections.defaultdict now prioritizes __setitem__() when inserting default values from default_factory. This prevents race conditions where a default value would overwrite a value set before default_factory returns.

  • gh-142651: unittest.mock: fix a thread safety issue where Mock.call_count may return inaccurate values when the mock is called concurrently from multiple threads.

  • gh-142595: Added type check during initialization of the decimal module to prevent a crash in case of broken stdlib. Patch by Sergey B Kirpichev.

  • gh-142556: Fix crash when a task gets re-registered during finalization in asyncio. Patch by Kumar Aditya.

  • gh-123241: Avoid reference count operations in garbage collection of ctypes objects.

  • gh-112527: The help text for required options in argparse no longer extended with “ (default: None)”.

  • gh-142346: Fix usage formatting for mutually exclusive groups in argparse when they are preceded by positional arguments or followed or intermixed with other optional arguments.

  • gh-142315: Pdb can now run scripts from anonymous pipes used in process substitution. Patch by Bartosz Sławecki.

  • gh-142332: Fix usage formatting for positional arguments in mutually exclusive groups in argparse. in argparse.

  • gh-142282: Fix winreg.QueryValueEx() to not accidentally read garbage buffer under race condition.

  • gh-75949: Fix argparse to preserve | separators in mutually exclusive groups when the usage line wraps due to length.

  • gh-142267: Improve argparse performance by caching the formatter used for argument validation.

  • gh-68552: MisplacedEnvelopeHeaderDefect and Missing header name defects are now correctly passed to the handle_defect method of policy in FeedParser.

  • gh-142006: Fix a bug in the email.policy.default folding algorithm which incorrectly resulted in a doubled newline when a line ending at exactly max_line_length was followed by an unfoldable token.

  • gh-105836: Fix asyncio.run_coroutine_threadsafe() leaving underlying cancelled asyncio task running.

Core and Builtins

  • gh-142737: Tracebacks will be displayed in fallback mode even if io.open() is lost. Previously, this would crash the interpreter. Patch by Bartosz Sławecki.

  • gh-142554: Fix a crash in divmod() when _pylong.int_divmod() does not return a tuple of length two exactly. Patch by Bénédikt Tran.

  • gh-142531: Fix a free-threaded GC performance regression. If there are many untracked tuples, the GC will run too often, resulting in poor performance. The fix is to include untracked tuples in the “long lived” object count. The number of frozen objects is also now included since the free-threaded GC must scan those too.

  • gh-142402: Fix reference counting when adjacent literal parts are merged while constructing string.templatelib.Template, preventing the displaced string object from leaking.

  • gh-133932: Fix crash in the free threading build when clearing frames that hold tagged integers.

  • gh-142343: Fix SIGILL crash on m68k due to incorrect assembly constraint.

  • gh-137007: Fix a bug during JIT compilation failure which caused garbage collection debug assertions to fail.

C API

Build

  • gh-142454: When calculating the digest of the JIT stencils input, sort the hashed files by filenames before adding their content to the hasher. This ensures deterministic hash input and hence deterministic hash, independent on filesystem order.

  • gh-141808: When running make clean-retain-profile, keep the generated JIT stencils. That way, the stencils are not generated twice when Profile-guided optimization (PGO) is used. It also allows distributors to supply their own pre-built JIT stencils.

  • gh-138061: Ensure reproducible builds by making JIT stencil header generation deterministic.

Python 3.14.2 final

Release date: 2025-12-05

Security

  • gh-142145: Remove quadratic behavior in xml.minidom node ID cache clearing.

  • gh-119452: Fix a potential memory denial of service in the http.server module. When a malicious user is connected to the CGI server on Windows, it could cause an arbitrary amount of memory to be allocated. This could have led to symptoms including a MemoryError, swapping, out of memory (OOM) killed processes or containers, or even system crashes.

Library

  • gh-140797: Revert changes to the undocumented re.Scanner class. Capturing groups are still allowed for backward compatibility, although using them can lead to incorrect result. They will be forbidden in future Python versions.

  • gh-142206: The resource tracker in the multiprocessing module now uses the original communication protocol, as in Python 3.14.0 and below, by default. This avoids issues with upgrading Python while it is running. (Note that such ‘in-place’ upgrades are not tested.) The tracker remains compatible with subprocesses that use new protocol (that is, subprocesses using Python 3.13.10, 3.14.1 and 3.15).

  • gh-142214: Fix two regressions in dataclasses in Python 3.14.1 related to annotations.

    • An exception is no longer raised if slots=True is used and the __init__ method does not have an __annotate__ attribute (likely because init=False was used).

    • An exception is no longer raised if annotations are requested on the __init__ method and one of the fields is not present in the class annotations. This can occur in certain dynamic scenarios.

    Patch by Jelle Zijlstra.

Core and Builtins

  • gh-142218: Fix crash when inserting into a split table dictionary with a non str key that matches an existing key.

Library

  • gh-116738: Fix cmath data race when initializing trigonometric tables with subinterpreters.

Python 3.14.1 final

Release date: 2025-12-02

Windows

  • gh-139810: Installing with py install 3[.x]-dev will now select final versions as well as prereleases.

Tools/Demos

  • gh-141692: Each slice of an iOS XCframework now contains a lib folder that contains a symlink to the libpython dylib. This allows binary modules to be compiled for iOS using dynamic libreary linking, rather than Framework linking.

  • gh-141442: The iOS testbed now correctly handles test arguments that contain spaces.

  • gh-140702: The iOS testbed app will now expose the GITHUB_ACTIONS environment variable to iOS apps being tested.

  • gh-137484: Have Tools/wasm/wasi put the build Python into a directory named after the build triple instead of “build”.

  • gh-137248: Add a --logdir option to Tools/wasm/wasi for specifying where to write log files.

  • gh-137243: Have Tools/wasm/wasi detect a WASI SDK install in /opt when it was directly extracted from a release tarball.

Tests

  • gh-140482: Preserve and restore the state of stty echo as part of the test environment.

  • gh-140082: Update python -m test to set FORCE_COLOR=1 when being run with color enabled so that unittest which is run by it with redirected output will output in color.

  • gh-139208: Fix regrtest --fast-ci --verbose: don’t ignore the --verbose option anymore. Patch by Victor Stinner.

  • gh-136442: Use exitcode 1 instead of 5 if unittest.TestCase.setUpClass() raises an exception

Security

  • gh-139700: Check consistency of the zip64 end of central directory record. Support records with “zip64 extensible data” if there are no bytes prepended to the ZIP file.

  • gh-139283: sqlite3: correctly handle maximum number of rows to fetch in Cursor.fetchmany and reject negative values for Cursor.arraysize. Patch by Bénédikt Tran.

  • gh-137836: Add support of the “plaintext” element, RAWTEXT elements “xmp”, “iframe”, “noembed” and “noframes”, and optionally RAWTEXT element “noscript” in html.parser.HTMLParser.

  • gh-136063: email.message: ensure linear complexity for legacy HTTP parameters parsing. Patch by Bénédikt Tran.

  • gh-136065: Fix quadratic complexity in os.path.expandvars().

  • gh-119451: Fix a potential memory denial of service in the http.client module. When connecting to a malicious server, it could cause an arbitrary amount of memory to be allocated. This could have led to symptoms including a MemoryError, swapping, out of memory (OOM) killed processes or containers, or even system crashes.

  • gh-119342: Fix a potential memory denial of service in the plistlib module. When reading a Plist file received from untrusted source, it could cause an arbitrary amount of memory to be allocated. This could have led to symptoms including a MemoryError, swapping, out of memory (OOM) killed processes or containers, or even system crashes.

Library

IDLE

  • gh-96491: Deduplicate version number in IDLE shell title bar after saving to a file.

  • gh-139742: Colorize t-string prefixes for template strings in IDLE, as done for f-string prefixes.

Documentation

Core and Builtins

  • gh-142048: Fix quadratically increasing garbage collection delays in free-threaded build.

Library

  • gh-116738: Fix thread safety issue with re scanner objects in free-threaded builds.

Core and Builtins

  • gh-141930: When importing a module, use Python’s regular file object to ensure that writes to .pyc files are complete or an appropriate error is raised.

  • gh-120158: Fix inconsistent state when enabling or disabling monitoring events too many times.

  • gh-139653: Only raise a RecursionError or trigger a fatal error if the stack pointer is both below the limit pointer and above the stack base. If outside of these bounds assume that it is OK. This prevents false positives when user-space threads swap stacks.

  • gh-139103: Improve multithreaded scaling of dataclasses on the free-threaded build.

  • gh-141579: Fix sys.activate_stack_trampoline() to properly support the perf_jit backend. Patch by Pablo Galindo.

  • gh-114203: Skip locking if object is already locked by two-mutex critical section.

  • gh-141528: Suggest using concurrent.interpreters.Interpreter.close() instead of the private _interpreters.destroy function when warning about remaining subinterpreters. Patch by Sergey Miryanov.

  • gh-141312: Fix the assertion failure in the __setstate__ method of the range iterator when a non-integer argument is passed. Patch by Sergey Miryanov.

Library

Core and Builtins

Library

  • gh-140260: Fix struct data race in endian table initialization with subinterpreters. Patch by Shamil Abdulaev.

Core and Builtins

Library

Core and Builtins

  • gh-140406: Fix memory leak when an object’s __hash__() method returns an object that isn’t an int.

  • gh-140358: Restore elapsed time and unreachable object count in GC debug output. These were inadvertently removed during a refactor of gc.c. The debug log now again reports elapsed collection time and the number of unreachable objects. Contributed by Pål Grønås Drange.

  • gh-140306: Fix memory leaks in cross-interpreter channel operations and shared namespace handling.

  • gh-140301: Fix memory leak of PyConfig in subinterpreters.

  • gh-140257: Fix data race between interpreter_clear() and take_gil() on eval_breaker during finalization with daemon threads.

  • gh-139951: Fixes a regression in GC performance for a growing heap composed mostly of small tuples.

    • Counts number of actually tracked objects, instead of trackable objects. This ensures that untracking tuples has the desired effect of reducing GC overhead.

    • Does not track most untrackable tuples during creation. This prevents large numbers of small tuples causing excessive GCs.

  • gh-140104: Fix a bug with exception handling in the JIT. Patch by Ken Jin. Bug reported by Daniel Diniz.

  • gh-140061: Fixing the checking of whether an object is uniquely referenced to ensure free-threaded compatibility. Patch by Sergey Miryanov.

  • gh-140067: Fix memory leak in sub-interpreter creation.

  • gh-140000: Fix potential memory leak when a reference cycle exists between an instance of typing.TypeAliasType, typing.TypeVar, typing.ParamSpec, or typing.TypeVarTuple and its __name__ attribute. Patch by Mikhail Efimov.

  • gh-139914: Restore support for HP PA-RISC, which has an upwards-growing stack.

  • gh-139988: Fix a memory leak when failing to create a Union type. Patch by Bénédikt Tran.

  • gh-139748: Fix reference leaks in error branches of functions accepting path strings or bytes such as compile() and os.system(). Patch by Bénédikt Tran.

  • gh-139516: Fix lambda colon erroneously start format spec in f-string in tokenizer.

  • gh-139640: ast.parse() no longer emits syntax warnings for return/break/continue in finally (see PEP 765) – they are only emitted during compilation.

  • gh-139640: Fix swallowing some syntax warnings in different modules if they accidentally have the same message and are emitted from the same line. Fix duplicated warnings in the finally block.

  • gh-63161: Support non-UTF-8 shebang and comments in Python source files if non-UTF-8 encoding is specified. Detect decoding error in comments for default (UTF-8) encoding. Show the line and position of decoding error for default encoding in a traceback. Show the line containing the coding cookie when it conflicts with the BOM in a traceback.

Library

Core and Builtins

  • gh-138558: Fix handling of unusual t-string annotations in annotationlib. Patch by Dave Peck.

  • gh-134466: Don’t run PyREPL in a degraded environment where setting termios attributes is not allowed.

  • gh-138944: Fix SyntaxError message when invalid syntax appears on the same line as a valid import ... as ... or from ... import ... as ... statement. Patch by Brian Schubert.

  • gh-105487: Remove non-existent __copy__(), __deepcopy__(), and __bases__ from the __dir__() entries of types.GenericAlias.

  • gh-69605: Fix some standard library submodules missing from the REPL auto-completion of imports.

Library

  • gh-116738: Make cProfile thread-safe on the free threaded build.

  • gh-138004: On Solaris/Illumos platforms, thread names are now encoded as ASCII to avoid errors on systems (e.g. OpenIndiana) that don’t support non-ASCII names.

Core and Builtins

C API

Build

  • gh-141808: Do not generate the jit stencils twice in case of PGO builds on Windows.

  • gh-141784: Fix _remote_debugging_module.c compilation on 32-bit Linux. Include Python.h before system headers to make sure that _remote_debugging_module.c uses the same types (ABI) than Python. Patch by Victor Stinner.

  • gh-140768: Warn when the WASI SDK version doesn’t match what’s supported.

  • gh-140513: Generate a clear compilation error when _Py_TAIL_CALL_INTERP is enabled but either preserve_none or musttail is not supported.

  • gh-140189: iOS builds were added to CI.

  • gh-138489: When cross-compiling for WASI by build_wasm or build_emscripten, the build-details.json step is now included in the build process, just like with native builds.

    This fixes the libinstall task which requires the build-details.json file during the process.

  • gh-137618: PYTHON_FOR_REGEN now requires Python 3.10 to Python 3.15. Patch by Adam Turner.

  • gh-123681: Check the strftime() behavior at runtime instead of at the compile time to support cross-compiling. Remove the internal macro _Py_NORMALIZE_CENTURY.

Python 3.14.0 final

Release date: 2025-10-07

macOS

  • gh-124111: Update macOS installer to use Tcl/Tk 8.6.17.

  • gh-139573: Updated bundled version of OpenSSL to 3.0.18.

Windows

  • gh-139573: Updated bundled version of OpenSSL to 3.0.18.

Tools/Demos

  • gh-139330: SBOM generation tool didn’t cross-check the version and checksum values against the Modules/expat/refresh.sh script, leading to the values becoming out-of-date during routine updates.

  • gh-132006: XCframeworks now include privacy manifests to satisfy Apple App Store submission requirements.

  • gh-138171: A script for building an iOS XCframework was added. As part of this change, the top level iOS folder has been moved to be a subdirectory of the Apple folder.

Security

Library

  • gh-139312: Upgrade bundled libexpat to 2.7.3

Python 3.14.0 release candidate 3

Release date: 2025-09-18

Windows

  • gh-138896: Fix error installing C runtime on non-updated Windows machines

Tools/Demos

  • gh-137873: The iOS test runner has been simplified, resolving some issues that have been observed using the runner in GitHub Actions and Azure Pipelines test environments.

Security

  • gh-135661: Fix CDATA section parsing in html.parser.HTMLParser according to the HTML5 standard: ] ]> and ]] > no longer end the CDATA section. Add private method _set_support_cdata() which can be used to specify how to parse <[CDATA[ — as a CDATA section in foreign content (SVG or MathML) or as a bogus comment in the HTML namespace.

Library

Core and Builtins

  • gh-71810: Raise OverflowError for (-1).to_bytes() for signed conversions when bytes count is zero. Patch by Sergey B Kirpichev.

  • gh-138192: Fix contextvars initialization so that all subinterpreters are assigned the MISSING value.

  • gh-138479: Fix a crash when a generic object’s __typing_subst__ returns an object that isn’t a tuple.

  • gh-138372: Fix SyntaxWarning emitted for erroneous subscript expressions involving template string literals. Patch by Brian Schubert.

  • gh-138318: The default REPL now avoids highlighting built-in names (for instance set or format()) when they are used as attribute names (for instance in value.set or text.format).

  • gh-138349: Fix crash in certain cases where a module contains both a module-level annotation and a comprehension.

  • gh-137384: Fix a crash when using the warnings module in a finalizer at shutdown. Patch by Kumar Aditya.

  • gh-137883: Fix runaway recursion when calling a function with keyword arguments.

  • gh-137079: Fix keyword typo recognition when parsing files. Patch by Pablo Galindo.

  • gh-137728: Fix the JIT’s handling of many local variables. This previously caused a segfault.

  • gh-137576: Fix for incorrect source code being shown in tracebacks from the Basic REPL when PYTHONSTARTUP is given. Patch by Adam Hartz.

Python 3.14.0 release candidate 2

Release date: 2025-08-14

macOS

  • gh-137450: macOS installer shell path management improvements: separate the installer Shell profile updater postinstall script from the Update Shell Profile.command to enable more robust error handling.

  • gh-137134: Update macOS installer to ship with SQLite version 3.50.4.

Windows

  • gh-137134: Update Windows installer to ship with SQLite 3.50.4.

Library

  • gh-137426: Remove the code deprecation of importlib.abc.ResourceLoader. It is documented as deprecated, but left for backwards compatibility with other classes in importlib.abc.

  • gh-137282: Fix tab completion and dir() on concurrent.futures.

  • gh-137257: Bump the version of pip bundled in ensurepip to version 25.2

  • gh-137226: Fix behavior of annotationlib.ForwardRef.evaluate() when the type_params parameter is passed and the name of a type param is also present in an enclosing scope.

  • gh-130522: Fix unraisable TypeError raised during interpreter shutdown in the threading module.

  • gh-137059: Fix handling of file URLs with a Windows drive letter in the URL authority by urllib.request.url2pathname(). This fixes a regression in earlier pre-releases of Python 3.14.

  • gh-130577: tarfile now validates archives to ensure member offsets are non-negative. (Contributed by Alexander Enrique Urieles Nieto in gh-130577.)

  • gh-135228: When dataclasses replaces a class with a slotted dataclass, the original class can now be garbage collected again. Earlier changes in Python 3.14 caused this class to always remain in existence together with the replacement class synthesized by dataclasses.

Documentation

  • gh-136155: We are now checking for fatal errors in EPUB builds in CI.

Core and Builtins

  • gh-137400: Fix a crash in the free threading build when disabling profiling or tracing across all threads with PyEval_SetProfileAllThreads() or PyEval_SetTraceAllThreads() or their Python equivalents threading.settrace_all_threads() and threading.setprofile_all_threads().

  • gh-137314: Fixed a regression where raw f-strings incorrectly interpreted escape sequences in format specifications. Raw f-strings now properly preserve literal backslashes in format specs, matching the behavior from Python 3.11. For example, rf"{obj:\xFF}" now correctly produces '\\xFF' instead of 'ÿ'. Patch by Pablo Galindo.

  • gh-137308: A standalone docstring in a node body is optimized as a pass statement to ensure that the node’s body is never empty. There was a ValueError in compile() otherwise.

  • gh-137288: Fix bug where some bytecode instructions of a boolean expression are not associated with the correct exception handler.

  • gh-134291: Remove some newer macOS API usage from the JIT compiler in order to restore compatibility with older OSX 10.15 deployment targets.

  • gh-131338: Disable computed stack limit checks on non-glibc linux platforms to fix crashes on deep recursion.

  • gh-136870: Fix data races while de-instrumenting bytecode of code objects running concurrently in threads.

C API

Build

Python 3.14.0 release candidate 1

Release date: 2025-07-22

Tools/Demos

  • gh-136251: Fixes and usability improvements for Tools/wasm/emscripten/web_example

Security

Library

Core and Builtins

  • gh-136801: Fix PyREPL syntax highlighting on match cases after multi-line case. Contributed by Olga Matoula.

Library

Core and Builtins

  • gh-136541: Fix some issues with the perf trampolines on x86-64 and aarch64. The trampolines were not being generated correctly for some cases, which could lead to the perf integration not working correctly. Patch by Pablo Galindo.

  • gh-136517: Fixed a typo that prevented printing of uncollectable objects when the gc.DEBUG_UNCOLLECTABLE mode was set.

  • gh-136525: Fix issue where per-thread bytecode was not instrumented for newly created threads.

  • gh-132661: Interpolation.expression now has a default, the empty string.

  • gh-132661: Reflect recent PEP 750 change.

    Disallow concatenation of string.templatelib.Template and str. Also, disallow implicit concatenation of t-string literals with string or f-string literals.

Library

Core and Builtins

  • gh-135148: Fixed a bug where f-string debug expressions (using =) would incorrectly strip out parts of strings containing escaped quotes and # characters. Patch by Pablo Galindo.

  • gh-133136: Limit excess memory usage in the free threading build when a large dictionary or list is resized and accessed by multiple threads.

  • gh-91153: Fix a crash when a bytearray is concurrently mutated during item assignment.

  • gh-127971: Fix off-by-one read beyond the end of a string in string search.

C API

Build

  • gh-135621: PyREPL no longer depends on the curses standard library. Contributed by Łukasz Langa.

Python 3.14.0 beta 4

Release date: 2025-07-08

Tools/Demos

  • gh-135968: Stubs for strip are now provided as part of an iOS install.

  • gh-133600: Backport file reorganization for Tools/wasm/wasi.

    This should make backporting future code changes easier. It also simplifies instructions around how to do WASI builds in the devguide.

Tests

  • gh-135966: The iOS testbed now handles the app_packages folder as a site directory.

  • gh-135494: Fix regrtest to support excluding tests from --pgo tests. Patch by Victor Stinner.

Security

  • gh-136053: marshal: fix a possible crash when deserializing slice objects.

  • gh-135661: Fix parsing start and end tags in html.parser.HTMLParser according to the HTML5 standard.

    • Whitespaces no longer accepted between </ and the tag name. E.g. </ script> does not end the script section.

    • Vertical tabulation (\v) and non-ASCII whitespaces no longer recognized as whitespaces. The only whitespaces are \t\n\r\f and space.

    • Null character (U+0000) no longer ends the tag name.

    • Attributes and slashes after the tag name in end tags are now ignored, instead of terminating after the first > in quoted attribute value. E.g. </script/foo=">"/>.

    • Multiple slashes and whitespaces between the last attribute and closing > are now ignored in both start and end tags. E.g. <a foo=bar/ //>.

    • Multiple = between attribute name and value are no longer collapsed. E.g. <a foo==bar> produces attribute “foo” with value “=bar”.

    • [Reverted in gh-136927] Whitespaces between the = separator and attribute name or value are no longer ignored. E.g. <a foo =bar> produces two attributes “foo” and “=bar”, both with value None; <a foo= bar> produces two attributes: “foo” with value “” and “bar” with value None.

  • gh-102555: Fix comment parsing in html.parser.HTMLParser according to the HTML5 standard. --!> now ends the comment. -- > no longer ends the comment. Support abnormally ended empty comments <--> and <--->.

Library

Documentation

  • gh-136155: EPUB builds are fixed by excluding non-XHTML-compatible tags.

Core and Builtins

  • gh-109700: Fix memory error handling in PyDict_SetDefault().

  • gh-78465: Fix error message for cls.__new__(cls, ...) where cls is not instantiable builtin or extension type (with tp_new set to NULL).

  • gh-129958: Differentiate between t-strings and f-strings in syntax error for newlines in format specifiers of single-quoted interpolated strings.

  • gh-135871: Non-blocking mutex lock attempts now return immediately when the lock is busy instead of briefly spinning in the free threading build.

  • gh-135106: Restrict the trashcan mechanism to GC’ed objects and untrack them while in the trashcan to prevent the GC and trashcan mechanisms conflicting.

  • gh-135607: Fix potential weakref races in an object’s destructor on the free threaded build.

  • gh-135608: Fix a crash in the JIT involving attributes of modules.

  • gh-135543: Emit sys.remote_exec audit event when sys.remote_exec() is called and migrate remote_debugger_script to cpython.remote_debugger_script.

  • gh-134280: Disable constant folding for ~ with a boolean argument. This moves the deprecation warning from compile time to runtime.

C API

  • gh-135906: Fix compilation errors when compiling the internal headers with a C++ compiler.

Build

  • gh-134273: Add support for configuring compiler flags for the JIT with CFLAGS_JIT

Python 3.14.0 beta 3

Release date: 2025-06-17

Windows

  • gh-135099: Fix a crash that could occur on Windows when a background thread waits on a PyMutex while the main thread is shutting down the interpreter.

Tests

  • gh-132815: Fix test__opcode: add JUMP_BACKWARD to specialization stats.

  • gh-135489: Show verbose output for failing tests during PGO profiling step with –enable-optimizations.

  • gh-135120: Add test.support.subTests().

Security

  • gh-135462: Fix quadratic complexity in processing specially crafted input in html.parser.HTMLParser. End-of-file errors are now handled according to the HTML5 specs – comments and declarations are automatically closed, tags are ignored.

  • gh-135034: Fixes multiple issues that allowed tarfile extraction filters (filter="data" and filter="tar") to be bypassed using crafted symlinks and hard links.

    Addresses CVE 2024-12718, CVE 2025-4138, CVE 2025-4330, and CVE 2025-4517.

Library

  • gh-65697: configparser’s error message when attempting to write an invalid key is now more helpful.

  • gh-135497: Fix os.getlogin() failing for longer usernames on BSD-based platforms.

  • gh-135429: Fix the argument mismatch in _lsprof for PY_THROW event.

  • gh-135368: Fix unittest.mock.Mock generation on dataclasses.dataclass() objects. Now all special attributes are set as it was before gh-124429.

  • gh-133967: Do not normalize locale name ‘C.UTF-8’ to ‘en_US.UTF-8’.

  • gh-135321: Raise a correct exception for values greater than 0x7fffffff for the BINSTRING opcode in the C implementation of pickle.

  • gh-135276: Backported bugfixes in zipfile.Path from zipp 3.23. Fixed .name, .stem and other basename-based properties on Windows when working with a zipfile on disk.

  • gh-135244: uuid: when the MAC address cannot be determined, the 48-bit node ID is now generated with a cryptographically-secure pseudo-random number generator (CSPRNG) as per RFC 9562, §6.10.3. This affects uuid1() and uuid6().

  • gh-134970: Fix the “unknown action” exception in argparse.ArgumentParser.add_argument_group() to correctly replace the action class.

  • gh-134718: ast.dump() now only omits None and [] values if they are default values.

  • gh-134939: Add the concurrent.interpreters module. See PEP 734.

  • gh-134885: Fix possible crash in the compression.zstd module related to setting parameter types. Patch by Jelle Zijlstra.

  • gh-134857: Improve error report for doctests run with unittest. Remove doctest module frames from tracebacks and redundant newline character from a failure message.

  • gh-128840: Fix parsing long IPv6 addresses with embedded IPv4 address.

  • gh-134637: Fix performance regression in calling a ctypes function pointer in free threading.

  • gh-134696: Built-in HACL* and OpenSSL implementations of hash function constructors now correctly accept the same documented named arguments. For instance, md5() could be previously invoked as md5(data=data) or md5(string=string) depending on the underlying implementation but these calls were not compatible. Patch by Bénédikt Tran.

  • gh-134151: email: Fix TypeError in email.utils.decode_params() when sorting RFC 2231 continuations that contain an unnumbered section.

  • gh-134210: curses.window.getch() now correctly handles signals. Patch by Bénédikt Tran.

  • gh-134152: email: Fix parsing of email message ID with invalid domain.

  • gh-133489: random.getrandbits() can now generate more that 231 bits. random.randbytes() can now generate more that 256 MiB.

  • gh-132813: Improve error messages for incorrect types and values of csv.Dialect attributes.

  • gh-132969: Prevent the ProcessPoolExecutor executor thread, which remains running when shutdown(wait=False), from attempting to adjust the pool’s worker processes after the object state has already been reset during shutdown. A combination of conditions, including a worker process having terminated abormally, resulted in an exception and a potential hang when the still-running executor thread attempted to replace dead workers within the pool.

  • gh-127081: Fix libc thread safety issues with os by replacing getlogin with getlogin_r re-entrant version.

  • gh-131884: Fix formatting issues in json.dump() when both indent and skipkeys are used.

  • gh-130999: Avoid exiting the new REPL and offer suggestions even if there are non-string candidates when errors occur.

Documentation

  • gh-135171: Document that the iterator for the leftmost for clause in the generator expression is created immediately.

  • bpo-45210: Document that error indicator may be set in tp_dealloc, and how to avoid clobbering it.

Core and Builtins

  • gh-135496: Fix typo in the f-string conversion type error (“exclamanation” -> “exclamation”).

  • gh-135371: Fixed asyncio debugging tools to properly display internal coroutine call stacks alongside external task dependencies. The python -m asyncio ps and python -m asyncio pstree commands now show complete execution context. Patch by Pablo Galindo.

Library

  • gh-127319: Set the allow_reuse_port class variable to False on the XMLRPC, logging, and HTTP servers. This matches the behavior in prior Python releases, which is to not allow port reuse.

Core and Builtins

  • gh-135171: Reverts the behavior of async generator expressions when created with object w/o __aiter__ method to the pre-3.13 behavior of raising a TypeError.

  • gh-130077: Properly raise custom syntax errors when incorrect syntax containing names that are prefixes of soft keywords is encountered. Patch by Pablo Galindo.

  • gh-135171: Reverts the behavior of generator expressions when created with a non-iterable to the pre-3.13 behavior of raising a TypeError. It is no longer possible to cause a crash in the debugger by altering the generator expression’s local variables. This is achieved by moving the GET_ITER instruction back to the creation of the generator expression and adding an additional check to FOR_ITER.

Library

Core and Builtins

  • gh-134876: Add support to PEP 768 remote debugging for Linux kernels which don’t have CONFIG_CROSS_MEMORY_ATTACH configured.

  • gh-134889: Fix handling of a few opcodes that leave operands on the stack when optimizing LOAD_FAST.

Library

Core and Builtins

  • gh-132617: Fix dict.update() modification check that could incorrectly raise a “dict mutated during update” error when a different dictionary was modified that happens to share the same underlying keys object.

  • gh-134679: Fix crash in the free threading build’s QSBR code that could occur when changing an object’s __dict__ attribute.

  • gh-127682: No longer call __iter__ twice in list comprehensions. This brings the behavior of list comprehensions in line with other forms of iteration

  • gh-133912: Fix the C API function PyObject_GenericSetDict to handle extension classes with inline values.

C API

Build

  • gh-119132: Remove “experimental” tag from the CPython free-threading build.

  • gh-135497: Fix the detection of MAXLOGNAME in the configure.ac script.

  • gh-134923: Windows builds with profile-guided optimization enabled now use /GENPROFILE and /USEPROFILE instead of deprecated /LTCG: options.

  • gh-134774: Fix Py_DEBUG macro redefinition warnings on Windows debug builds. Patch by Chris Eibl.

  • gh-134632: Fixed build-details.json generation to use INCLUDEPY, in order to reference the pythonX.Y subdirectory of the include directory, as required in PEP 739, instead of the top-level include directory.

Python 3.14.0 beta 2

Release date: 2025-05-26

Windows

  • gh-130727: Fix a race in internal calls into WMI that can result in an “invalid handle” exception under high load. Patch by Chris Eibl.

  • gh-76023: Make os.path.realpath() ignore Windows error 1005 when in non-strict mode.

  • gh-133779: Reverts the change to generate different pyconfig.h files based on compiler settings, as it was frequently causing extension builds to break. In particular, the Py_GIL_DISABLED preprocessor variable must now always be defined explicitly when compiling for the experimental free-threaded runtime. The sysconfig.get_config_var() function can be used to determine whether the current runtime was compiled with that flag or not.

  • gh-133626: Ensures packages are not accidentally bundled into the traditional installer.

Tools/Demos

  • gh-134215: REPL import autocomplete only suggests private modules when explicitly specified.

Tests

  • gh-133744: Fix multiprocessing interrupt test. Add an event to synchronize the parent process with the child process: wait until the child process starts sleeping. Patch by Victor Stinner.

  • gh-133682: Fixed test case test.test_annotationlib.TestStringFormat.test_displays which ensures proper handling of complex data structures (lists, sets, dictionaries, and tuples) in string annotations.

  • gh-133639: Fix TestPyReplAutoindent.test_auto_indent_default() doesn’t run input_code.

Security

  • gh-133767: Fix use-after-free in the “unicode-escape” decoder with a non-“strict” error handler.

  • gh-128840: Short-circuit the processing of long IPv6 addresses early in ipaddress to prevent excessive memory consumption and a minor denial-of-service.

Library

Core and Builtins

  • gh-127960: PyREPL interactive shell no longer starts with __package__ and __file__ global names set to _pyrepl package internals. Contributed by Yuichiro Tachibana.

  • gh-130397: Remove special-casing for C stack depth limits for WASI. Due to WebAssembly’s built-in stack protection this does not pose a security concern.

  • gh-128066: Fixes an edge case where PyREPL improperly threw an error when Python is invoked on a read only filesystem while trying to write history file entries.

  • gh-69605: When auto-completing an import in the REPL, finding no candidates now issues no suggestion, rather than suggestions from the current namespace.

  • gh-134158: Fix coloring of double braces in f-strings and t-strings in the REPL.

  • gh-134119: Fix crash when calling next() on an exhausted template string iterator. Patch by Jelle Zijlstra.

  • gh-134100: Fix a use-after-free bug that occurs when an imported module isn’t in sys.modules after its initial import. Patch by Nico-Posada.

  • gh-133999: Fix SyntaxError regression in except parsing after gh-123440.

  • gh-133886: Fix sys.remote_exec() for non-ASCII paths in non-UTF-8 locales and non-UTF-8 paths in UTF-8 locales.

  • gh-133703: Fix hashtable in dict can be bigger than intended in some situations.

  • gh-133778: Fix bug where assigning to the __annotations__ attributes of classes defined under from __future__ import annotations had no effect.

  • gh-132762: fromkeys() no longer loops forever when adding a small set of keys to a large base dict. Patch by Angela Liss.

  • gh-133541: Inconsistent indentation in user input crashed the new REPL when syntax highlighting was active. This is now fixed.

  • gh-133516: Raise ValueError when constants True, False or None are used as an identifier after NFKC normalization.

  • gh-132542: Update Thread.native_id after fork(2) to ensure accuracy. Patch by Noam Cohen.

C API

Build

  • gh-134455: Fixed build-details.json generation to use the correct c_api.headers as defined in PEP 739, instead of c_api.include.

  • gh-131769: Fix detecting when the build Python in a cross-build is a pydebug build.

  • gh-117088: AIX linker don’t support -h option, so avoid it through platform check

Python 3.14.0 beta 1

Release date: 2025-05-06

Windows

Tools/Demos

  • gh-130453: Allow passing multiple keyword arguments with the same function name in pygettext.

  • gh-130195: Add warning messages when pygettext unimplemented -a/--extract-all option is called.

Tests

  • gh-133131: The iOS testbed will now select the most recently released “SE-class” device for testing if a device isn’t explicitly specified.

  • gh-91048: Add ability to externally inspect all pending asyncio tasks, even if no task is currently entered on the event loop.

  • gh-109981: The test helper that counts the list of open file descriptors now uses the optimised /dev/fd approach on all Apple platforms, not just macOS. This avoids crashes caused by guarded file descriptors.

  • gh-132678: Add --prioritize to -m test. This option allows the user to specify which selected tests should execute first, even if the order is otherwise randomized. This is particularly useful for tests that run the longest.

  • gh-131290: Tests in Lib/test can now be correctly executed as standalone scripts.

Security

  • gh-115322: The underlying extension modules behind readline:, subprocess, and ctypes now raise audit events on previously uncovered code paths that could lead to file system access related to C function calling and external binary execution. The ctypes.call_function audit hook has also been fixed to use an unsigned value for its function pointer.

Library

IDLE

  • gh-112936: fix IDLE: no Shell menu item in single-process mode.

Documentation

  • gh-107006: Move documentation and example code for threading.local from its docstring to the official docs.

  • gh-125142: As part of the builtin help intro text, show the keyboard shortcuts for the new, non-basic REPL (F1, F2, and F3).

Core and Builtins

  • gh-133336: -J is no longer reserved for use by Jython. Patch by Adam Turner.

  • gh-133261: Fix bug where the cycle GC could untrack objects in the trashcan because they looked like they were immortal. When objects are added to the trashcan, we take care to ensure they keep a mortal reference count.

  • gh-133346: Added experimental color theming support to the _colorize module.

  • gh-132917: For the free-threaded build, check the process memory usage increase before triggering a full automatic garbage collection. If the memory used has not increased 10% since the last collection then defer it.

  • gh-91048: Add a new python -m asyncio ps PID command-line interface to inspect asyncio tasks in a running Python process. Displays a flat table of await relationships. A variant showing a tree view is also available as python -m asyncio pstree PID. Both are useful for debugging async code. Patch by Pablo Galindo, Łukasz Langa, Yury Selivanov, and Marta Gomez Macias.

  • gh-133304: Workaround NaN’s “canonicalization” in PyFloat_Pack4() and PyFloat_Unpack4() on RISC-V.

  • gh-133197: Improve SyntaxError error messages for incompatible string / bytes prefixes.

  • gh-133231: Add new utilities of observing JIT compilation: sys._jit.is_available(), sys._jit.is_enabled(), and sys._jit.is_active().

Library

Core and Builtins

  • gh-131798: Split CALL_LEN into several uops allowing the JIT to remove them when optimizing. Patch by Diego Russo.

  • gh-131798: Use sym_new_type instead of sym_new_not_null for _BUILD_STRING, _BUILD_SET

  • gh-132942: Fix two races in the type lookup cache. This affected the free-threaded build and could cause crashes (apparently quite difficult to trigger).

  • gh-131798: Propagate the return type of _BINARY_OP_SUBSCR_TUPLE_INT in JIT. Patch by Tomas Roun

  • gh-132952: Speed up startup with the -S argument by importing the private _io module instead of io. This fixes a performance regression introduced earlier in Python 3.14 development and restores performance to the level of Python 3.13.

  • gh-131798: Allow the JIT to remove int guards after _CALL_LEN by setting the return type to int. Patch by Diego Russo

  • gh-131798: Split CALL_TUPLE_1 into several uops allowing the JIT to remove some of them. Patch by Tomas Roun

  • gh-131798: Split CALL_STR_1 into several uops allowing the JIT to remove some of them. Patch by Tomas Roun

  • gh-132825: Enhance unhashable key/element error messages for dict and set. Patch by Victor Stinner.

  • gh-131591: Reset any PEP 768 remote debugging pending call in children after os.fork() calls.

  • gh-132713: Fix repr(list) race condition: hold a strong reference to the item while calling repr(item). Patch by Victor Stinner.

  • gh-132661: Implement PEP 750 (Template Strings). Add new syntax for t-strings and implement new internal string.templatelib.Template and string.templatelib.Interpolation types.

  • gh-132479: Fix compiler crash in certain circumstances where multiple module-level annotations include comprehensions and other nested scopes.

  • gh-132747: Fix a crash when calling __get__() of a method with a None second argument.

  • gh-132744: Certain calls now check for runaway recursion and respect the system recursion limit.

  • gh-132449: Syntax errors that look like misspellings of Python keywords now provide a helpful fix suggestion for the typo. Contributed by Pablo Galindo Salgado.

Library

  • gh-132737: Support profiling code that requires __main__, such as pickle.

Core and Builtins

  • gh-132639: Added PyLong_AsNativeBytes(), PyLong_FromNativeBytes() and PyLong_FromUnsignedNativeBytes() to the limited C API.

  • gh-100239: Add specialisation for BINARY_OP/SUBSCR on list and slice.

  • gh-132508: Uses tagged integers on the evaluation stack to represent the instruction offsets when reraising an exception. This avoids the need to box the integer which could fail in low memory conditions.

  • gh-124476: Fix decoding from the locale encoding in the C.UTF-8 locale.

  • gh-131927: Compiler warnings originating from the same module and line number are now only emitted once, matching the behaviour of warnings emitted from user code. This can also be configured with warnings filters.

  • gh-132457: Make staticmethod() and classmethod() generic.

  • gh-131798: Use sym_new_type instead of sym_new_not_null for _BUILD_LIST, _BUILD_SET, _BUILD_MAP

  • gh-131798: Split CALL_TYPE_1 into several uops allowing the JIT to remove some of them.

  • gh-132386: Fix crash when passing a dict subclass as the globals parameter to exec().

  • gh-127682: No longer call __iter__ twice when creating and executing a generator expression. Creating a generator expression from a non-interable will raise only when the generator expression is executed. This brings the behavior of generator expressions in line with other generators.

  • gh-132261: The internal storage for annotations and annotate functions on classes now uses different keys in the class dictionary. This eliminates various edge cases where access to the __annotate__ and __annotations__ attributes would behave unpredictably.

  • gh-132284: Don’t wrap base PyCFunction slots on class creation if not overridden.

  • gh-130415: Improve the JIT’s ability to remove unused constant and local variable loads, and fix an issue where deallocating unused values could cause JIT code to crash or behave incorrectly.

  • gh-126703: Fix possible use after free in cases where a method’s definition has the same lifetime as its self.

  • gh-132286: Fix that type.__annotate__ was not deleted, when type.__annotations__ was deleted.

  • gh-131798: Allow the JIT to remove an extra _TO_BOOL_BOOL instruction after _CONTAINS_OP_DICT by setting the return type to bool.

  • gh-124715: Prevents against stack overflows when calling Py_DECREF(). Third-party extension objects no longer need to use the “trashcan” mechanism, as protection is now built into the Py_DECREF() macro.

  • gh-131798: Allow the JIT compiler to remove some type checks for operations on lists, tuples, dictionaries, and sets.

  • gh-128398: Improve error message when an object supporting the synchronous (resp. asynchronous) context manager protocol is entered using async with (resp. with) instead of with (resp. async with). Patch by Bénédikt Tran.

  • gh-131798: Allow the JIT to remove unicode guards after _BINARY_OP_SUBSCR_STR_INT by setting the return type to string.

  • gh-131878: Handle uncaught exceptions in the main input loop for the new REPL.

  • gh-131878: Fix support of unicode characters with two or more codepoints on Windows in the new REPL.

  • gh-126835: Move constant folding to the peephole optimizer. Rename AST optimization related files (Python/ast_opt.c -> Python/ast_preprocess.c), structs (_PyASTOptimizeState -> _PyASTPreprocessState) and functions (_PyAST_Optimize -> _PyAST_Preprocess, _PyCompile_AstOptimize -> _PyCompile_AstPreprocess).

  • gh-114809: Add support for macOS multi-arch builds with the JIT enabled

  • gh-131507: PyREPL now supports syntax highlighting. Contributed by Łukasz Langa.

  • gh-130907: If the __annotations__ of a module object are accessed while the module is executing, return the annotations that have been defined so far, without caching them.

  • gh-130104: Three-argument pow() now try calling __rpow__() if necessary. Previously it was only called in two-argument pow() and the binary power operator.

  • gh-130070: Fixed an assertion error for exec() passed a string source and a non-None closure. Patch by Bartosz Sławecki.

  • gh-129958: Fix a bug that was allowing newlines inconsistently in format specifiers for single-quoted f-strings. Patch by Pablo Galindo.

  • gh-129858: elif statements that follow an else block now have a specific error message.

  • gh-69605: Add module autocomplete to PyREPL.

  • gh-128555: Add the sys.flags.thread_inherit_context flag.

  • gh-123539: Improve SyntaxError message for using import ... as and from ... import ... as with not a name.

  • gh-102567: -X importtime now accepts value 2, which indicates that an importtime entry should also be printed if an imported module has already been loaded. Patch by Noah Kim and Adam Turner.

  • gh-116436: Improve error message when TypeError occurs during dict.update()

  • gh-103997: String arguments passed to “-c” are now automatically dedented as if by textwrap.dedent(). This allows “python -c” invocations to be indented in shell scripts without causing indentation errors. (Patch by Jon Crall and Steven Sun)

Library

  • gh-89562: Remove hostflags member from PySSLContext struct.

C API

Build

  • gh-113464: Use the cpython-bin-deps “externals” repository for Windows LLVM dependency management. Installing LLVM manually is no longer necessary for Windows JIT builds.

  • gh-133183: iOS compiler shims now include IPHONEOS_DEPLOYMENT_TARGET in target triples, ensuring that SDK version minimums are honored.

  • gh-133167: Fix compilation process with --enable-optimizations and --without-docstrings.

  • gh-133171: Since free-threaded builds do not support the experimental JIT compiler, prevent these configurations from being combined.

  • gh-132758: Fix building with tail call interpreter and pystats.

  • gh-132649: The PClayout script now allows passing --include-tcltk on Windows ARM64.

  • gh-132257: Change the default LTO flags on GCC to not pass -flto-partition=none, and allow parallelization of LTO. For newer GNU makes and GCC, this has a multiple factor speedup for LTO build times, with no noticeable loss in performance.

  • gh-132026: Fix use of undefined identifiers in platform triplet detection on MIPS Linux platforms.

Python 3.14.0 alpha 7

Release date: 2025-04-08

macOS

  • gh-124111: Update macOS installer to use Tcl/Tk 8.6.16.

  • gh-131423: Update macOS installer to use OpenSSL 3.0.16. Patch by Bénédikt Tran.

  • gh-131025: Update macOS installer to ship with SQLite 3.49.1.

Windows

  • gh-131423: Update bundled version of OpenSSL to 3.0.16. The new build also disables uplink support, which may be relevant to embedders but has no impact on normal use.

  • gh-131453: Some SND_* and MB_* constants are added to winsound.

  • gh-91349: Replaces our copy of zlib with zlib-ng, for performance improvements in zlib.

  • gh-131025: Update Windows installer to ship with SQLite 3.49.1.

Tools/Demos

  • gh-132121: Always escape non-printable Unicode characters in pygettext.

  • gh-131852: msgfmt no longer adds the POT-Creation-Date to generated .mo files for consistency with GNU msgfmt.

Tests

  • gh-131277: Allow to unset one or more environment variables at once via EnvironmentVarGuard.unset(). Patch by Bénédikt Tran.

  • gh-131050: test_ssl.test_dh_params is skipped if the underlying TLS library does not support finite-field ephemeral Diffie-Hellman.

Security

  • gh-131809: Update bundled libexpat to 2.7.1

  • gh-131261: Upgrade to libexpat 2.7.0

  • gh-121284: Fix bug in the folding of rfc2047 encoded-words when flattening an email message using a modern email policy. Previously when an encoded-word was too long for a line, it would be decoded, split across lines, and re-encoded. But commas and other special characters in the original text could be left unencoded and unquoted. This could theoretically be used to spoof header lines using a carefully constructed encoded-word if the resulting rendered email was transmitted or re-parsed.

Library

Documentation

Core and Builtins

  • gh-131798: Allow the JIT to remove an extra _TO_BOOL_BOOL instruction after _CONTAINS_OP_SET by setting the return type to bool.

  • gh-132011: Fix crash when calling list.append() as an unbound method.

  • gh-131998: Fix a crash when using an unbound method descriptor object in a function where a bound method descriptor was used.

  • gh-131591: Implement PEP 768 (Safe external debugger interface for CPython). Add a new sys.remote_exec() function to the sys module. This function schedules the execution of a Python file in a separate process. Patch by Pablo Galindo, Matt Wozniski and Ivona Stojanovic.

  • gh-131798: Allow JIT to omit str guard in truthiness test when str type is known.

  • gh-131833: Add support for optionally dropping grouping parentheses when using multiple exception types as per PEP 758. Patch by Pablo Galindo

  • gh-130924: Usage of a name in a function-scope annotation no longer triggers creation of a cell for that variable. This fixes a regression in earlier alphas of Python 3.14.

  • gh-131800: Improve the experimental JIT’s ability to remove type checks for certain subscripting operations.

  • gh-131738: Compiler emits optimized code for builtin any/all/tuple calls over a generator expression.

  • gh-131719: Fix missing NULL check in _PyMem_FreeDelayed in free-threaded build.

  • gh-131670: Fix anext() failing on sync __anext__() raising an exception.

  • gh-131666: Fix signature of anext_awaitable.close objects. Patch by Bénédikt Tran.

  • gh-130415: Optimize comparison of two constants in JIT builds

  • gh-129149: Add fast path for small and medium-size integers in PyLong_FromInt32(), PyLong_FromUInt32(), PyLong_FromInt64() and PyLong_FromUInt64(). Patch by Chris Eibl.

  • gh-130887: Optimize the AArch64 code generation for the JIT. Patch by Diego Russo

  • gh-130956: Optimize the AArch64 code generation for the JIT. Patch by Diego Russo

  • gh-130928: Fix error message when formatting bytes using the 'i' flag. Patch by Maxim Ageev.

  • gh-130935: Annotations at the class and module level that are conditionally defined are now only reflected in __annotations__ if the block they are in is executed. Patch by Jelle Zijlstra.

  • gh-130775: Do not crash on negative column and end_column in ast locations.

  • gh-130704: Optimize LOAD_FAST and its superinstruction form to reduce reference counting overhead. These instructions are replaced with faster variants that load borrowed references onto the operand stack when we can prove that the reference in the frame outlives the reference loaded onto the stack.

  • gh-88887: Fixing multiprocessing Resource Tracker process leaking, usually observed when running Python as PID 1.

  • gh-130115: Fix an issue with thread identifiers being sign-extended on some platforms.

Library

  • gh-99108: Add support for built-in implementation of HMAC (RFC 2104) based on HACL*. Patch by Bénédikt Tran.

Core and Builtins

  • gh-130080: Implement PEP 765: Disallow return/break/continue that exit a finally block.

  • gh-129900: Fix return codes inside SystemExit not getting returned by the REPL.

  • gh-128632: Disallow __classdict__ as the name of a type parameter. Using this name would previously crash the interpreter in some circumstances.

  • gh-126703: Improve performance of builtin methods by using a freelist.

  • gh-126703: Improve performance of range by using a freelist.

C API

  • gh-131740: Update PyUnstable_GC_VisitObjects to traverse perm gen.

  • gh-131525: The PyTupleObject now caches the computed hash value in the new field ob_hash.

Build

  • gh-131865: The DTrace build now properly passes the CC and CFLAGS variables to the dtrace command when utilizing SystemTap on Linux.

  • gh-131675: Fix mimalloc library builds for 32-bit ARM targets.

  • gh-131691: clang-cl on Windows needs option /EHa to support SEH (structured exception handling) correctly. Fix by Chris Eibl.

  • gh-131278: Add optimizing flag WITH_COMPUTED_GOTOS to Windows builds for when using a compiler that supports it (currently clang-cl). Patch by Chris Eibl.

  • gh-130213: Update the vendored HACL* library to fix build issues with older clang compilers.

  • gh-130673: Fix potential KeyError when handling object sections during JIT building process.

Python 3.14.0 alpha 6

Release date: 2025-03-14

macOS

Windows

  • gh-131020: pylauncher correctly detects a BOM when searching for the shebang. Fix by Chris Eibl.

Tools/Demos

  • gh-130453: Make it possible to override default keywords in pygettext.

  • gh-85012: Correctly reset msgctxt when compiling messages in msgfmt.

  • gh-130453: Extend support for specifying custom keywords in pygettext.

  • gh-130195: Add warning messages when pygettext unimplemented -a/--extract-all option is called.

  • gh-130057: Add support for translator comments in pygettext.py.

  • gh-130025: The iOS testbed now correctly handles symlinks used as Python framework references.

  • gh-129911: Fix the keyword entry in the help output of pygettext.

Tests

  • gh-129200: Multiple iOS testbed runners can now be started at the same time without introducing an ambiguity over simulator ownership.

  • gh-130292: The iOS testbed will now run successfully on a machine that has not previously run Xcode tests (such as CI configurations).

  • gh-130293: The tests of terminal colorization are no longer sensitive to the value of the TERM variable in the testing environment.

  • gh-129401: Fix a flaky test in test_repr_rlock that checks the representation of multiprocessing.RLock.

  • gh-126332: Add unit tests for pyrepl.

Security

  • gh-127371: Avoid unbounded buffering for tempfile.SpooledTemporaryFile.writelines(). Previously, disk spillover was only checked after the lines iterator had been exhausted. This is now done after each line is written.

Library

Documentation

Core and Builtins

  • gh-131141: Fix data race in sys.monitoring instrumentation while registering callback.

  • gh-130804: Fix support of unicode characters on Windows in the new REPL.

  • gh-130932: Fix incorrect exception handling in _PyModule_IsPossiblyShadowing

  • gh-122029: sys.setprofile() and sys.settrace() will not generate a c_call event for INSTRUMENTED_CALL_FUNCTION_EX if the callable is a method with a C function wrapped, because we do not generate c_return event in such case.

  • gh-129964: Fix JIT crash on Windows on Arm. Patch by Diego Russo and Brandt Bucher.

  • gh-130851: Fix a crash in the free threading build when constructing a code object with co_consts that contains instances of types that are not otherwise generated by the bytecode compiler.

  • gh-128534: Ensure that both left and right branches have the same source for async for loops. Add these branches to the co_branches() iterator.

  • gh-130794: Fix memory leak in the free threaded build when resizing a shared list or dictionary from multiple short-lived threads.

  • gh-130415: Improve JIT understanding of integers in boolean context.

  • gh-130382: Fix PyRefTracer_DESTROY not being sent from Python/ceval.c Py_DECREF().

  • gh-130574: Renumber RESUME from 149 to 128.

  • gh-124878: Fix race conditions during runtime finalization that could lead to accessing freed memory.

  • gh-130415: Improve the experimental JIT’s ability to narrow boolean values based on the results of truthiness tests.

  • gh-130618: Fix a bug that was causing UnicodeDecodeError or SystemError to be raised when using f-strings with lambda expressions with non-ASCII characters. Patch by Pablo Galindo

  • gh-123044: Make sure that the location of branch targets in match cases is in the body, not the pattern.

  • gh-128534: Add branch monitoring (BRANCH_LEFT and BRANCH_RIGHT events) for async for loops.

  • gh-130163: Fix possible crashes related to concurrent change and use of the sys module attributes.

  • gh-122029: INSTRUMENTED_CALL_KW will expand the method before monitoring to reflect the actual behavior more accurately.

  • gh-130415: Improve JIT’s ability to optimize strings in boolean contexts.

  • gh-130396: Use actual stack limits (from pthread_getattr_np(3)) for linux, and other systems with _GNU_SOURCE defined, when determining limits for C stack protection.

  • gh-128396: Fix a crash that occurs when calling locals() inside an inline comprehension that uses the same local variable as the outer frame scope where the variable is a free or cell var.

  • gh-129107: Fix two more bytearray functions for free threading.

  • gh-127705: Use tagged references (_PyStackRef) for the default build as well as for the free-threading build. This has a small negative performance impact short-term but will enable larger speedups in the future and significantly reduce maintenance costs by allowing a single implementation of tagged references in the future.

  • gh-130094: Fix two race conditions involving concurrent imports that could lead to spurious failures with ModuleNotFoundError.

  • gh-129107: Make bytearray iterator safe under free threading.

  • gh-115802: Use the more efficient “medium” code model for JIT-compiled code on supported platforms.

  • gh-107956: A build-details.json file is now install in the platform-independent standard library directory (PEP 739 implementation).

  • gh-116042: Fix location for SyntaxErrors of invalid escapes in the tokenizer. Patch by Pablo Galindo

  • gh-91079: Change C stack overflow protection to consider the amount of stack consumed, rather than a counter. This allows deeper recursion in many cases, but remains safe.

  • gh-129715: Improve the experimental JIT’s handling of returns to unknown callers.

Library

  • gh-129983: Fix data race in compile_template in sre.c.

Core and Builtins

  • gh-129967: Fix a race condition in the free threading build when repr(set) is called concurrently with set.clear().

  • gh-129953: The internal (evaluation) stack is now spilled to memory whenever execution escapes from the interpreter or JIT compiled code. This should have no observable effect in either Python or builtin extensions, but will allow various important optimizations in the future.

  • gh-129515: Clarify syntax error messages for conditional expressions when a statement is specified before an if or after an else keyword.

  • gh-129349: bytes.fromhex() and bytearray.fromhex() now accepts ASCII bytes and bytes-like objects.

  • gh-129149: Add fast path for medium-size integers in PyLong_FromSsize_t(). Patch by Chris Eibl.

  • gh-129107: Make the bytearray safe under free threading.

  • gh-128974: Fix a crash in UnicodeError.__str__ when custom attributes implement __str__() with side-effects. Patch by Bénédikt Tran.

  • gh-126085: typing.TypeAliasType now supports star unpacking.

  • gh-125331: from __future__ import barry_as_FLUFL now works in more contexts, including when it is used in files, with the -c flag, and in the REPL when there are multiple statements on the same line. Previously, it worked only on subsequent lines in the REPL, and when the appropriate flags were passed directly to compile(). Patch by Pablo Galindo.

  • gh-121464: Make concurrent iterations over the same enumerate() iterator safe under free-threading. See Strategy for Iterators in Free Threading.

  • gh-87790: Support underscore and comma as thousands separators in the fractional part for floating-point presentation types of the new-style string formatting (with format() or f-strings). Patch by Sergey B Kirpichev.

  • gh-124445: Fix specialization of generic aliases that are generic over a typing.ParamSpec and have been specialized with a nested type variable.

  • gh-120608: Adapt reversed() for use in the free-threading build. The reversed() is still not thread-safe in the sense that concurrent iterations may see the same object, but they will not corrupt the interpreter state.

Library

  • gh-100388: Fix the platform._sys_version() method when __DATE__ is undefined at buildtime by changing default buildtime datetime string to the UNIX epoch.

Core and Builtins

  • bpo-44369: Improve syntax errors for incorrectly closed strings. Patch by Pablo Galindo

C API

Build

  • gh-131035: Use -flto=thin for faster build times using clang-cl on Windows. Patch by Chris Eibl.

  • gh-130740: Ensure that Python.h is included before stdbool.h unless pyconfig.h is included before or in some platform-specific contexts.

  • gh-130090: Building with PlatformToolset=ClangCL on Windows now supports PGO (profile guided optimization). Patch by Chris Eibl with invaluable support from Steve Dover.

  • gh-129819: Allow building the JIT with the tailcall interpreter.

  • gh-129989: Fix a bug where the tailcall interpreter was enabled when --without-tail-call-interp was provided to the configure script.

  • gh-129838: Don’t redefine _Py_NO_SANITIZE_UNDEFINED when compiling with a recent GCC version and undefined sanitizer enabled.

  • gh-82909: #pragma-based linking with python3*.lib can now be switched off with Py_NO_LINK_LIB. Patch by Jean-Christophe Fillion-Robin.

Python 3.14.0 alpha 5

Release date: 2025-02-11

macOS