Changelog

Python next

Release date: XXXX-XX-XX

Library

  • 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

  • gh-91132: Update macOS installer to use ncurses 6.5.

Tools/Demos

  • gh-129248: The iOS test runner now strips the log prefix from each line output by the test suite.

  • gh-104400: Fix several bugs in extraction by switching to an AST parser in pygettext.

Tests

  • gh-129386: Add test.support.reset_code, which can be used to reset various bytecode-level optimizations and local instrumentation for a function.

  • gh-128474: Disable test_embed test cases that segfault on BOLT instrument binaries. The tests are only disabled when BOLT is enabled.

  • gh-128003: Add an option --parallel-threads=N to the regression test runner that runs individual tests in multiple threads in parallel in order to find concurrency bugs. Note that most of the test suite is not yet reviewed for thread-safety or annotated with @thread_unsafe when necessary.

Security

  • gh-105704: When using urllib.parse.urlsplit() and urllib.parse.urlparse() host parsing would not reject domain names containing square brackets ([ and ]). Square brackets are only valid for IPv6 and IPvFuture hosts according to RFC 3986 Section 3.2.2.

  • gh-126108: Fix a possible NULL pointer dereference in PySys_AddWarnOptionUnicode().

  • gh-80222: Fix bug in the folding of quoted strings when flattening an email message using a modern email policy. Previously when a quoted string was folded so that it spanned more than one line, the surrounding quotes and internal escapes would be omitted. This could theoretically be used to spoof header lines using a carefully constructed quoted string if the resulting rendered email was transmitted or re-parsed.

  • gh-119511: Fix a potential denial of service in the imaplib module. When connecting to a malicious server, it could cause an arbitrary amount of memory to be allocated. On many systems this is harmless as unused virtual memory is only a mapping, but if this hit a virtual address size limit it could lead to a MemoryError or other process crash. On unusual systems or builds where all allocated memory is touched and backed by actual ram or storage it could’ve consumed resources doing so until similarly crashing.

Library

IDLE

  • gh-129873: Simplify displaying the IDLE doc by only copying the text section of idle.html to idlelib/help.html. Patch by Stan Ulbrych.

Documentation

Core and Builtins

  • gh-100239: Replace the opcode BINARY_SUBSCR and its family by BINARY_OP with oparg NB_SUBSCR.

  • gh-129732: Fixed a race in _Py_qsbr_reserve in the free threading build.

  • gh-129763: Remove the internal LLTRACE macro (use Py_DEBUG instead).

  • gh-129715: Improve JIT performance for generators.

  • gh-129643: Fix thread safety of PyList_Insert() in free-threading builds.

  • gh-129668: Fix race condition when raising MemoryError in the free threaded build.

  • gh-129643: Fix thread safety of PyList_SetItem() in free-threading builds. Patch by Kumar Aditya.

  • gh-128563: Fix an issue where the “lltrace” debug feature could have been incorrectly enabled for some frames.

  • gh-129393: On FreeBSD, sys.platform doesn’t contain the major version anymore. It is always 'freebsd', instead of 'freebsd13' or 'freebsd14'.

Library

Core and Builtins

  • gh-129231: Improve memory layout of JIT traces. Patch by Diego Russo

  • gh-129149: Add fast path for medium-size integers in PyLong_FromUnsignedLong(), PyLong_FromUnsignedLongLong() and PyLong_FromSize_t().

  • gh-129201: The free-threaded version of the cyclic garbage collector has been optimized to conditionally use CPU prefetch instructions during the collection. This can reduce collection times by making it more likely that data is in the CPU cache when it is needed. The prefetch instructions are enabled if the number of long-lived objects (objects surviving a full collection) exceeds a threshold.

  • gh-129093: Fix f-strings such as f'{expr=}' sometimes not displaying the full expression when the expression contains !=.

  • gh-124363: Treat debug expressions in f-string as raw strings. Patch by Pablo Galindo

  • gh-128714: Fix the potential races in get/set dunder methods __annotations__, __annotate__ and __type_params__ for function object, and add related tests.

  • gh-128799: Add frame of except* to traceback when it wraps a naked exception.

  • gh-128842: Collect JIT memory stats using pystats. Patch by Diego Russo.

  • gh-100239: Specialize BINARY_OP for bitwise logical operations on compact ints.

  • gh-128910: Undocumented and unused private C-API functions _PyTrash_begin and _PyTrash_end are removed.

  • gh-128807: Add a marking phase to the free-threaded GC. This is similar to what was done in gh-126491. Since the free-threaded GC does not have generations and is not incremental, the marking phase looks for all objects reachable from known roots. The roots are objects known to not be garbage, like the module dictionary for sys. For most programs, this marking phase should make the GC a bit faster since typically less work is done per object.

  • gh-100239: Add opcode BINARY_OP_EXTEND which executes a pair of functions (guard and specialization functions) accessed from the inline cache.

  • gh-128563: A new type of interpreter has been added to CPython. This interpreter uses tail calls for its instruction handlers. Preliminary benchmark results suggest 7-11% geometric mean faster on pyperformance (depending on platform), and up to 30% faster on Python-intensive workloads. This interpreter currently only works on newer compilers, such as clang-19. Other compilers will continue using the old interpreter. Patch by Ken Jin, with ideas on how to implement this in CPython by Mark Shannon, Garret Gu, Haoran Xu, and Josh Haberman.

  • gh-126703: Improve performance of iterating over lists and tuples by using a freelist for the iterator objects.

  • gh-127953: The time to handle a LINE event in sys.monitoring (and sys.settrace) is now independent of the number of lines in the code object.

  • gh-128330: Restore terminal control characters on REPL exit.

  • gh-128016: Improved the SyntaxWarning message for invalid escape sequences to clarify that such sequences will raise a SyntaxError in future Python releases. The new message also suggests a potential fix, i.e., Did you mean "\\e"?.

  • gh-126004: Fix handling of UnicodeError.start and UnicodeError.end values in the codecs.replace_errors() error handler. Patch by Bénédikt Tran.

  • gh-126004: Fix handling of UnicodeError.start and UnicodeError.end values in the codecs.backslashreplace_errors() error handler. Patch by Bénédikt Tran.

  • gh-126004: Fix handling of UnicodeError.start and UnicodeError.end values in the codecs.xmlcharrefreplace_errors() error handler. Patch by Bénédikt Tran.

  • gh-127119: Slightly optimize the int deallocator.

  • gh-127349: Fixed the error when resizing terminal in Python REPL. Patch by Semyon Moroz.

  • gh-125723: Fix crash with gi_frame.f_locals when generator frames outlive their generator. Patch by Mikhail Efimov.

Library

Core and Builtins

  • gh-115911: If the current working directory cannot be determined due to permissions, then import will no longer raise PermissionError. Patch by Alex Willmer.

Library

C API

Build

  • gh-129660: Drop test_embed from PGO training, whose contribution in recent versions is considered to be ignorable.

  • gh-128902: Fix compile errors with Clang 9 and older due to lack of __attribute__((fallthrough)) support.

Python 3.14.0 alpha 4

Release date: 2025-01-14

macOS

  • gh-127592: Usage of the unified Apple System Log APIs was disabled when the minimum macOS version is earlier than 10.12.

Tools/Demos

  • gh-128152: Fix a bug where Argument Clinic’s C pre-processor parser tried to parse pre-processor directives inside C comments. Patch by Erlend Aasland.

Tests

  • gh-128690: Temporarily do not use test_embed in PGO profile builds until the problem with test_init_pyvenv_cfg failing in some configurations is resolved.

Library

Core and Builtins

  • gh-128078: Fix a SystemError when using anext() with a default tuple value. Patch by Bénédikt Tran.

  • gh-128717: Fix a crash when setting the recursion limit while other threads are active on the free threaded build.

  • gh-124483: Treat Py_DECREF and variants as escaping when generating opcode and uop metadata. This prevents the possibility of a __del__ method causing the JIT to behave incorrectly.

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

  • gh-128137: Update PyASCIIObject layout to handle interned field with the atomic operation. Patch by Donghee Na.

Library

Core and Builtins

Library

  • gh-128035: Indicate through ssl.HAS_PHA whether the ssl module supports TLSv1.3 post-handshake client authentication (PHA). Patch by Will Childs-Klein.

Core and Builtins

  • gh-127274: Add a new flag, CO_METHOD, to co_flags that indicates whether the code object belongs to a function defined in class scope.

  • gh-66409: During the path initialization, we now check if base_exec_prefix is the same as base_prefix before falling back to searching the Python interpreter directory.

  • gh-127970: We now use the location of the libpython runtime library used in the current process to determine sys.base_prefix on all platforms implementing the dladdr function defined by the UNIX standard — this includes Linux, Android, macOS, iOS, FreeBSD, etc. This was already the case on Windows and macOS Framework builds.

  • gh-127773: Do not use the type attribute cache for types with incompatible MRO.

  • gh-127903: Objects/unicodeobject.c: fix a crash on DEBUG builds in _copy_characters when there is nothing to copy.

  • gh-127809: Fix an issue where the experimental JIT may infer an incorrect result type for exponentiation (** and **=), leading to bugs or crashes.

  • gh-126862: Fix a possible overflow when a class inherits from an absurd number of super-classes. Reported by Valery Fedorenko. Patch by Bénédikt Tran.

C API

Build

  • gh-128627: For Emscripten builds the function pointer cast call trampoline now uses the wasm-gc ref.test instruction if it’s available instead of Wasm JS type reflection.

  • gh-128472: Skip BOLT optimization of functions using computed gotos, fixing errors on build with LLVM 19.

  • gh-115765: GNU Autoconf 2.72 is now required to generate configure. Patch by Erlend Aasland.

  • gh-123925: Fix building the curses module on platforms with libncurses but without libncursesw.

  • gh-90905: Add support for cross-compiling to x86_64 on aarch64/arm64 macOS.

  • gh-128321: Set LIBS instead of LDFLAGS when checking if sqlite3 library functions are available. This fixes the ordering of linked libraries during checks, which was incorrect when using a statically linked libsqlite3.

  • gh-100384: Error on unguarded-availability in macOS builds, preventing invalid use of symbols that are not available in older versions of the OS.

  • gh-128104: Remove Py_STRFTIME_C99_SUPPORT conditions in favor of requiring C99 strftime(3) specifier support at build time. When cross-compiling, there is no build time check and support is assumed.

  • gh-127951: Add option --pystats to the Windows build to enable performance statistics collection.

Python 3.14.0 alpha 3

Release date: 2024-12-17

Windows

  • gh-127353: Allow to force color output on Windows using environment variables. Patch by Andrey Efremov.

  • gh-125729: Makes the presence of the turtle module dependent on the Tcl/Tk installer option. Previously, the module was always installed but would be unusable without Tcl/Tk.

Tools/Demos

Tests

  • gh-127906: Test the limited C API in test_cppext. Patch by Victor Stinner.

  • gh-127637: Add tests for the dis command-line interface. Patch by Bénédikt Tran.

  • gh-126925: iOS test results are now streamed during test execution, and the deprecated xcresulttool is no longer used.

  • gh-127076: Disable strace based system call tests when LD_PRELOAD is set.

  • gh-127076: Filter out memory-related mmap, munmap, and mprotect calls from file-related ones when testing io behavior using strace.

Security

Library

Documentation

Core and Builtins

  • gh-127740: Fix error message in bytes.fromhex() when given an odd number of digits to properly indicate that an even number of hexadecimal digits is required.

  • gh-127058: PySequence_Tuple now creates the resulting tuple atomically, preventing partially created tuples being visible to the garbage collector or through gc.get_referrers()

  • gh-127599: Fix statistics for increments of object reference counts (in particular, when a reference count was increased by more than 1 in a single operation).

  • gh-127651: When raising ImportError for missing symbols in from imports, use __file__ in the error message if __spec__.origin is not a location

  • gh-127582: Fix non-thread-safe object resurrection when calling finalizers and watcher callbacks in the free threading build.

  • gh-127434: The iOS compiler shims can now accept arguments with spaces.

  • gh-127536: Add missing locks around some list assignment operations in the free threading build.

  • gh-127085: Fix race when exporting a buffer from a memoryview object on the free-threaded build.

  • gh-127238: Correct error message for sys.set_int_max_str_digits().

  • gh-113841: Fix possible undefined behavior division by zero in complex’s _Py_c_pow().

Library

Core and Builtins

  • gh-126491: Add a marking phase to the GC. All objects that can be transitively reached from builtin modules or the stacks are marked as reachable before cycle detection. This reduces the amount of work done by the GC by approximately half.

  • gh-127020: Fix a crash in the free threading build when PyCode_GetCode(), PyCode_GetVarnames(), PyCode_GetCellvars(), or PyCode_GetFreevars() were called from multiple threads at the same time.

  • gh-127010: Simplify GC tracking of dictionaries. All dictionaries are tracked when created, rather than being lazily tracked when a trackable object was added to them. This simplifies the code considerably and results in a slight speedup.

  • gh-126980: Fix __buffer__() of bytearray crashing when READ or WRITE are passed as flags.

  • gh-126937: Fix TypeError when a ctypes.Structure has a field size that doesn’t fit into an unsigned 16-bit integer. Instead, the maximum number of bits is sys.maxsize.

  • gh-126868: Increase performance of int by adding a freelist for compact ints.

  • gh-126881: Fix crash in finalization of dtoa state. Patch by Kumar Aditya.

  • gh-126892: Require cold or invalidated code to “warm up” before being JIT compiled again.

  • gh-126091: Ensure stack traces are complete when throwing into a generator chain that ends in a custom generator.

  • gh-126024: Optimize decoding of short UTF-8 sequences containing non-ASCII characters by approximately 15%.

  • gh-125420: Add memoryview.index() to memoryview objects. Patch by Bénédikt Tran.

  • gh-125420: Add memoryview.count() to memoryview objects. Patch by Bénédikt Tran.

  • gh-124470: Fix crash in free-threaded builds when replacing object dictionary while reading attribute on another thread

  • gh-69639: Implement mixed-mode arithmetic rules combining real and complex numbers as specified by C standards since C99. Patch by Sergey B Kirpichev.

  • gh-120010: Correct invalid corner cases which resulted in (nan+nanj) output in complex multiplication, e.g., (1e300+1j)*(nan+infj). Patch by Sergey B Kirpichev.

  • gh-109746: If _thread.start_new_thread() fails to start a new thread, it deletes its state from interpreter and thus avoids its repeated cleanup on finalization.

C API

Build

  • gh-127865: Fix build failure on systems without thread-locals support.

  • gh-127629: Emscripten builds now include ctypes support.

  • gh-127111: Updated the Emscripten web example to use ES6 modules and be built into a distinct web_example subfolder.

  • gh-115869: Make jit_stencils.h (which is produced during JIT builds) reproducible.

  • gh-126898: The Emscripten build of Python is now based on ES6 modules.

Python 3.14.0 alpha 2

Release date: 2024-11-19

Windows

  • gh-126911: Update credits command output.

  • gh-118973: Ensures the experimental free-threaded install includes the _tkinter module. The optional Tcl/Tk component must also be installed in order for the module to work.

  • gh-126497: Fixes venv failure due to missing redirector executables in experimental free-threaded installs.

  • gh-126074: Removed unnecessary DLLs from Windows embeddable package

  • gh-125315: Avoid crashing in platform due to slow WMI calls on some Windows machines.

  • gh-126084: Fix venvwlauncher to launch pythonw instead of python so no extra console window is created.

  • gh-125842: Fix a SystemError when sys.exit() is called with 0xffffffff on Windows.

  • gh-125550: Enable the Python install manager to detect Python 3.14 installs from the Windows Store.

  • gh-123803: All Windows code pages are now supported as “cpXXX” codecs on Windows.

Tools/Demos

  • gh-126807: Fix extraction warnings in pygettext.py caused by mistaking function definitions for function calls.

  • gh-126167: The iOS testbed was modified so that it can be used by third-party projects for testing purposes.

Tests

  • gh-126909: Fix test_os extended attribute tests to work on filesystems with 1 KiB xattr size limit.

  • gh-125730: Change make test to not run GUI tests by default. Use make ci to run tests with GUI tests instead.

  • gh-124295: Add translation tests to the argparse module.

Security

Library

Documentation

  • gh-126622: Added stub pages for removed modules explaining their removal, where to find replacements, and linking to the last Python version that supported them. Contributed by Ned Batchelder.

  • gh-125277: Require Sphinx 7.2.6 or later to build the Python documentation. Patch by Adam Turner.

  • gh-60712: Include the object type in the lists of documented types. Change by Furkan Onder and Martin Panter.

Core and Builtins

  • gh-126795: Increase the threshold for JIT code warmup. Depending on platform and workload, this can result in performance gains of 1-9% and memory savings of 3-5%.

  • gh-126341: Now ValueError is raised instead of SystemError when trying to iterate over a released memoryview object.

  • gh-126688: Fix a crash when calling os.fork() on some operating systems, including SerenityOS.

Library

  • gh-126066: Fix importlib to not write an incomplete .pyc files when a ulimit or some other operating system mechanism is preventing the write to go through fully.

Core and Builtins

  • gh-126222: Do not include count of “peek” items in _PyUop_num_popped. This ensures that the correct number of items are popped from the stack when a micro-op exits with an error.

  • gh-126366: Fix crash when using yield from on an object that raises an exception in its __iter__.

Library

  • gh-126209: Fix an issue with skip_file_prefixes parameter which resulted in an inconsistent behaviour between the C and Python implementations of warnings.warn(). Patch by Daehee Kim.

Core and Builtins

  • gh-126312: Fix crash during garbage collection on an object frozen by gc.freeze() on the free-threaded build.

  • gh-103951: Relax optimization requirements to allow fast attribute access to module subclasses.

  • gh-126072: Following gh-126101, for Code Objects like lambda, annotation and type alias, we no longer add None to its co_consts.

  • gh-126195: Improve JIT performance by 1.4% on macOS Apple Silicon by using platform-specific memory protection APIs. Patch by Diego Russo.

  • gh-126139: Provide better error location when attempting to use a future statement with an unknown future feature.

  • gh-126072: Add a new attribute in co_flags to indicate whether the first item in co_consts is the docstring. If a code object has no docstring, None will NOT be inserted.

  • gh-126076: Relocated objects such as tuple, bytes and str objects are properly tracked by tracemalloc and its associated hooks. Patch by Pablo Galindo.

  • gh-90370: Avoid temporary tuple creation for vararg in argument passing with Argument Clinic generated code (if arguments either vararg or positional-only).

  • gh-126018: Fix a crash in sys.audit() when passing a non-string as first argument and Python was compiled in debug mode.

  • gh-126012: The memoryview type now supports subscription, making it a generic type.

  • gh-125837: Adds LOAD_SMALL_INT and LOAD_CONST_IMMORTAL instructions. LOAD_SMALL_INT pushes a small integer equal to the oparg to the stack. LOAD_CONST_IMMORTAL does the same as LOAD_CONST but is more efficient for immortal objects. Removes RETURN_CONST instruction.

  • gh-125942: On Android, the errors setting of sys.stdout was changed from surrogateescape to backslashreplace.

  • gh-125859: Fix a crash in the free threading build when gc.get_objects() or gc.get_referrers() is called during an in-progress garbage collection.

  • gh-125868: It was possible in 3.14.0a1 only for attribute lookup to give the wrong value. This was due to an incorrect specialization in very specific circumstances. This is fixed in 3.14.0a2.

  • gh-125498: The JIT has been updated to leverage Clang 19’s new preserve_none attribute, which supports more platforms and is more useful than LLVM’s existing ghccc calling convention. This also removes the need to manually patch the calling convention in LLVM IR, simplifying the JIT compilation process.

  • gh-125703: Correctly honour tracemalloc hooks in specialized Py_DECREF paths. Patch by Pablo Galindo

  • gh-125593: Use color to highlight error locations in traceback from exception group

  • gh-125017: Fix crash on certain accesses to the __annotations__ of staticmethod and classmethod objects.

  • gh-125588: The Python PEG generator can now use f-strings in the grammar actions. Patch by Pablo Galindo

  • gh-125444: Fix illegal instruction for older Arm architectures. Patch by Diego Russo, testing by Ross Burton.

  • gh-118423: Add a new INSTRUCTION_SIZE macro to the cases generator which returns the current instruction size.

  • gh-125038: Fix crash when iterating over a generator expression after direct changes on gi_frame.f_locals. Patch by Mikhail Efimov.

  • gh-124855: Don’t allow the JIT and perf support to be active at the same time. Patch by Pablo Galindo

  • gh-123714: Update JIT compilation to use LLVM 19

  • gh-123930: Improve the error message when a script shadowing a module from the standard library causes ImportError to be raised during a “from” import. Similarly, improve the error message when a script shadowing a third party module attempts to “from” import an attribute from that third party module while still initialising.

  • gh-119793: The map() built-in now has an optional keyword-only strict flag like zip() to check that all the iterables are of equal length. Patch by Wannes Boeykens.

Library

  • gh-118950: Fix bug where SSLProtocol.connection_lost wasn’t getting called when OSError was thrown on writing to socket.

  • gh-113570: Fixed a bug in reprlib.repr where it incorrectly called the repr method on shadowed Python built-in types.

C API

Build

  • gh-126691: Removed the --with-emscripten-target configure flag. We unified the node and browser options and the same build can now be used, independent of target runtime.

  • gh-123877: Use wasm32-wasip1 as the target triple for WASI instead of wasm32-wasi. The latter will eventually be reclaimed for WASI 1.0 while CPython currently only supports WASI preview1.

  • gh-126458: Disable SIMD support for HACL under WASI.

  • gh-89640: Hard-code float word ordering as little endian on WASM.

  • gh-126206: make clinic now runs Argument Clinic using the --force option, thus forcefully regenerating generated code.

  • gh-126187: Introduced Tools/wasm/emscripten.py to simplify doing Emscripten builds.

  • gh-124932: For cross builds, there is now support for having a different install prefix than the host_prefix used by getpath.py. This is set to / by default for Emscripten, on other platforms the default behavior is the same as before.

  • gh-125946: The minimum supported Android version is now 7.0 (API level 24).

  • gh-125940: The Android build now supports 16 KB page sizes.

  • gh-89640: Improve detection of float word ordering on Linux when link-time optimizations are enabled.

  • gh-124928: Emscripten builds now require node >= 18.

  • gh-115382: Fix cross compile failures when the host and target SOABIs match.

Python 3.14.0 alpha 1

Release date: 2024-10-15

macOS

  • gh-124448: Update bundled Tcl/Tk in macOS installer to 8.6.15.

  • gh-123797: Check for runtime availability of ptsname_r function on macos.

  • gh-123418: Updated macOS installer build to use OpenSSL 3.0.15.

Windows

  • gh-124487: Increases Windows required OS and API level to Windows 10.

  • gh-124609: Fix _Py_ThreadId for Windows builds using MinGW. Patch by Tony Roberts.

  • gh-124448: Updated bundled Tcl/Tk to 8.6.15.

  • gh-124254: Ensures experimental free-threaded binaries remain installed when updating.

  • gh-123915: Ensure that Tools\msi\buildrelease.bat uses different directories for AMD64 and ARM64 builds.

  • gh-123418: Updated Windows build to use OpenSSL 3.0.15.

  • gh-123476: Add support for socket.TCP_QUICKACK on Windows platforms.

  • gh-122573: The Windows build of CPython now requires 3.10 or newer.

  • gh-100256: mimetypes no longer fails when it encounters an inaccessible registry key.

  • gh-119679: Ensures correct import libraries are included in Windows installs.

  • gh-119690: Adds Unicode support and fixes audit events for _winapi.CreateNamedPipe.

  • gh-111201: Add support for new pyrepl on Windows

  • gh-119070: Fixes py.exe handling of shebangs like /usr/bin/env python3.12, which were previously interpreted as python3.exe instead of python3.12.exe.

  • gh-117505: Fixes an issue with the Windows installer not running ensurepip in a fully isolated environment. This could cause unexpected interactions with the user site-packages.

  • gh-118209: Avoid crashing in mmap on Windows when the mapped memory is inaccessible due to file system errors or access violations.

  • gh-79846: Makes ssl.create_default_context() ignore invalid certificates in the Windows certificate store

Tools/Demos

  • gh-123418: Update GitHub CI workflows to use OpenSSL 3.0.15 and multissltests to use 3.0.15, 3.1.7, and 3.2.3.

Tests

  • gh-125041: Re-enable skipped tests for zlib on the s390x architecture: only skip checks of the compressed bytes, which can be different between zlib’s software implementation and the hardware-accelerated implementation.

  • gh-124378: Updated test_ttk to pass with Tcl/Tk 8.6.15.

  • gh-124213: Detect whether the test suite is running inside a systemd-nspawn container with --suppress-sync=true option, and skip the test_os and test_mmap tests that are failing in this scenario.

  • gh-124190: Add capability to ignore entire files or directories in check warning CI tool

  • gh-121921: Update Lib/test/crashers/bogus_code_obj.py so that it crashes properly again.

  • gh-112301: Add tooling to check for changes in compiler warnings. Patch by Nate Ohlson.

  • gh-59022: Add tests for pkgutil.extend_path(). Patch by Andreas Stocker.

  • gh-99242: os.getloadavg() may throw OSError when running regression tests under certain conditions (e.g. chroot). This error is now caught and ignored, since reporting load average is optional.

  • gh-121084: Fix test_typing random leaks. Clear typing ABC caches when running tests for refleaks (-R option): call _abc_caches_clear() on typing abstract classes and their subclasses. Patch by Victor Stinner.

  • gh-121160: Add a test for readline.set_history_length(). Note that this test may fail on readline libraries.

  • gh-121200: Fix test_expanduser_pwd2() of test_posixpath. Call getpwnam() to get pw_dir, since it can be different than getpwall() pw_dir. Patch by Victor Stinner.

  • gh-121188: When creating the JUnit XML file, regrtest now escapes characters which are invalid in XML, such as the chr(27) control character used in ANSI escape sequences. Patch by Victor Stinner.

  • gh-120801: Cleaned up fixtures for importlib.metadata tests and consolidated behavior with ‘test.support.os_helper’.

  • gh-119727: Add --single-process command line option to Python test runner (regrtest). Patch by Victor Stinner.

  • gh-119273: Python test runner no longer runs tests using TTY (ex: test_ioctl) in a process group (using setsid()). Previously, tests using TTY were skipped. Patch by Victor Stinner.

  • gh-119050: regrtest test runner: Add XML support to the refleak checker (-R option). Patch by Victor Stinner.

  • gh-101525: Skip test_gdb if the binary is relocated by BOLT. Patch by Donghee Na.

  • gh-107562: Test certificates have been updated to expire far in the future. This allows testing Y2038 with system time set to after that, so that actual Y2038 issues can be exposed, and not masked by expired certificate errors.

Security

  • gh-125140: Remove the current directory from sys.path when using PyREPL.

  • gh-123678: Upgrade libexpat to 2.6.3

  • gh-112301: Enable compiler options that warn of potential security vulnerabilities.

  • gh-122792: Changed IPv4-mapped ipaddress.IPv6Address to consistently use the mapped IPv4 address value for deciding properties. Properties which have their behavior fixed are is_multicast, is_reserved, is_link_local, is_global, and is_unspecified.

  • gh-112301: Add ability to ignore warnings per file with warning count in warning checking tooling. Patch by Nate Ohlson.

  • gh-112301: Add macOS warning tracking to warning check tooling. Patch by Nate Ohlson.

  • gh-122133: Authenticate the socket connection for the socket.socketpair() fallback on platforms where AF_UNIX is not available like Windows.

    Patch by Gregory P. Smith <greg@krypto.org> and Seth Larson <seth@python.org>. Reported by Ellie <el@horse64.org>

  • gh-121957: Fixed missing audit events around interactive use of Python, now also properly firing for python -i, as well as for python -m asyncio. The events in question are cpython.run_stdin and cpython.run_startup.

  • gh-112301: Enable runtime protections for glibc to abort execution when unsafe behavior is encountered, for all platforms except Windows.

  • gh-121285: Remove backtracking from tarfile header parsing for hdrcharset, PAX, and GNU sparse headers.

  • gh-112301: Add default compiler options to improve security. Enable -Wimplicit-fallthrough, -fstack-protector-strong, -Wtrampolines.

  • gh-118773: Fixes creation of ACLs in os.mkdir() on Windows to work correctly on non-English machines.

  • gh-118486: os.mkdir() on Windows now accepts mode of 0o700 to restrict the new directory to the current user. This fixes CVE 2024-4030 affecting tempfile.mkdtemp() in scenarios where the base temporary directory is more permissive than the default.

Library

IDLE

  • gh-122392: Increase currently inadequate vertical spacing for the IDLE browsers (path, module, and stack) on high-resolution monitors.

  • gh-112938: Fix uninteruptable hang when Shell gets rapid continuous output.

  • gh-122482: Change About IDLE to direct users to discuss.python.org instead of the now unused idle-dev email and mailing list.

  • gh-78889: Stop Shell freezes by blocking user access to non-method sys.stdout.shell attributes, which are all private.

  • gh-120083: Add explicit black IDLE Hovertip foreground color needed for recent macOS. Fixes Sonoma showing unreadable white on pale yellow. Patch by John Riggles.

  • gh-120104: Fix padding in config and search dialog windows in IDLE.

Documentation

  • gh-124872: Added definitions for context, current context, and context management protocol, updated related definitions to be consistent, and expanded the documentation for contextvars.Context.

  • gh-125018: The importlib.metadata documentation now includes semantic cross-reference targets for the significant documented APIs. This means intersphinx references like importlib.metadata.version() will now work as expected.

  • gh-124720: Update “Using Python on a Mac” section of the “Python Setup and Usage” document and include information on installing free-threading support.

  • gh-124457: Remove coverity scan from the CPython repo. It has not been used since 2020 and is currently unmaintained.

  • gh-116622: Add an Android platform guide, and flag modules not available on Android.

  • gh-123976: Refresh docs around custom providers.

  • gh-70870: Clarified the dual usage of the term “free variable” (both the formal meaning of any reference to names defined outside the local scope, and the narrower pragmatic meaning of nonlocal variables named in co_freevars).

  • gh-121277: Writers of CPython’s documentation can now use next as the version for the versionchanged, versionadded, deprecated directives.

  • gh-117765: Improved documentation for unittest.mock.patch.dict()

  • gh-121749: Fix documentation for PyModule_AddObjectRef().

  • gh-120012: Clarify the behaviours of multiprocessing.Queue.empty() and multiprocessing.SimpleQueue.empty() on closed queues. Patch by Bénédikt Tran.

  • gh-119574: Added some missing environment variables to the output of --help-env.

  • bpo-34008: The Py_Main() documentation moved from the “Very High Level API” section to the “Initialization and Finalization” section.

    Also make it explicit that we expect Py_Main to typically be called instead of Py_Initialize rather than after it (since Py_Main makes its own call to Py_Initialize). Document that calling both is supported but is version dependent on which settings will be applied correctly.

Core and Builtins

  • gh-124375: Fix a crash in the free threading build when the GC runs concurrently with a new thread starting.

  • gh-125221: Fix possible race condition when calling __reduce_ex__() for the first time in the free threading build.

  • gh-125174: Make the handling of reference counts of immortal objects more robust. Immortal objects with reference counts that deviate from their original reference count by up to a billion (half a billion on 32 bit builds) are still counted as immortal.

  • gh-125039: Make this_instr and prev_instr const in cases generator.

Library

Core and Builtins

  • gh-124871: Fix compiler bug (in some versions of 3.13) where an assertion fails during reachability analysis.

  • gh-123378: Fix a crash in the __str__() method of UnicodeError objects when the UnicodeError.start and UnicodeError.end values are invalid or out-of-range. Patch by Bénédikt Tran.

  • gh-118093: Improve the experimental JIT compiler’s ability to stay “on trace” when encountering highly-biased branches.

  • gh-124642: Fixed scalability issue in free-threaded builds for lock-free reads from dictionaries in multi-threaded scenarios

  • gh-116510: Fix a crash caused by immortal interned strings being shared between sub-interpreters that use basic single-phase init. In that case, the string can be used by an interpreter that outlives the interpreter that created and interned it. For interpreters that share obmalloc state, also share the interned dict with the main interpreter.

  • gh-116510: Fix a bug that can cause a crash when sub-interpreters use “basic” single-phase extension modules. Shared objects could refer to PyGC_Head nodes that had been freed as part of interpreter cleanup.

  • gh-119180: The __main__ module no longer always contains an __annotations__ dictionary in its global namespace.

  • gh-124547: When deallocating an object with inline values whose __dict__ is still live: if memory allocation for the inline values fails, clear the dictionary. Prevents an interpreter crash.

  • gh-124513: Fix a crash in FrameLocalsProxy constructor: check the number of arguments. Patch by Victor Stinner.

  • gh-124442: Fix nondeterminism in compilation by sorting the value of __static_attributes__. Patch by kp2pml30.

  • gh-124285: Fix bug where bool(a) can be invoked more than once during the evaluation of a compound boolean expression.

  • gh-123856: Fix PyREPL failure when a keyboard interrupt is triggered after using a history search

  • gh-65961: Deprecate the setting and using __package__ and __cached__.

  • gh-119726: The JIT now generates more efficient code for calls to C functions resulting in up to 0.8% memory savings and 1.5% speed improvement on AArch64. Patch by Diego Russo.

  • gh-122878: Use the pager binary, if available (e.g. on Debian and derivatives), to display REPL help().

  • gh-124188: Fix reading and decoding a line from the source file with non-UTF-8 encoding for syntax errors raised in the compiler.

  • gh-124027: Support <page up>, <page down>, and <delete> keys in the Python REPL when $TERM is set to vt100.

  • gh-124022: Fix bug where docstring is removed from classes in interactive mode.

  • gh-123958: docstrings are now removed from the optimized AST in optimization level 2.

  • gh-123923: The f_executable field in the internal _PyInterpreterFrame struct now uses a tagged pointer. Profilers and debuggers that uses this field should clear the least significant bit to recover the PyObject* pointer.

  • gh-77894: Fix possible crash in the garbage collector when it tries to break a reference loop containing a memoryview object. Now a memoryview object can only be cleared if there are no buffers that refer it.

  • gh-120221: asyncio REPL is now again properly recognizing KeyboardInterrupts. Display of exceptions raised in secondary threads is fixed.

  • gh-119310: Allow the new interactive shell to read history files written with the editline library that use unicode-escaped entries. Patch by aorcajo and Łukasz Langa.

  • gh-123572: Fix key mappings for various F-keys in Windows for the new REPL. Patch by devdanzin

Library

  • gh-123614: Add turtle.save() to easily save Turtle drawings as PostScript files. Patch by Marie Roald and Yngve Mardal Moe.

Core and Builtins

  • gh-123339: Setting the __module__ attribute for a class now removes the __firstlineno__ item from the type’s dict, so they will no longer be inconsistent.

  • gh-119034: Change <page up> and <page down> keys of the Python REPL to history search forward/backward. Patch by Victor Stinner.

  • gh-123562: Improve SyntaxError message for using case ... as ... with not a name.

  • gh-123545: Fix a double decref in rare cases on experimental JIT builds.

  • gh-123484: Fix _Py_DebugOffsets for long objects to be relative to the start of the object rather than the start of a subobject.

  • gh-123446: Fix empty function name in TypeError when builtin magic methods are used without the required args.