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.