Changelog¶
Python next¶
Release date: XXXX-XX-XX
Library¶
gh-142594: Fix crash in
TextIOWrapper.close()when the underlying buffer’sclosedproperty callsdetach().gh-142451:
hmac: Ensure that theHMAC.block_sizeattribute is correctly copied byHMAC.copy. Patch by Bénédikt Tran.gh-142495:
collections.defaultdictnow prioritizes__setitem__()when inserting default values fromdefault_factory. This prevents race conditions where a default value would overwrite a value set beforedefault_factoryreturns.gh-142651:
unittest.mock: fix a thread safety issue whereMock.call_countmay return inaccurate values when the mock is called concurrently from multiple threads.gh-142595: Added type check during initialization of the
decimalmodule 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
ctypesobjects.gh-112527: The help text for required options in
argparseno longer extended with “ (default: None)”.gh-142346: Fix usage formatting for mutually exclusive groups in
argparsewhen 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. inargparse.gh-142282: Fix
winreg.QueryValueEx()to not accidentally read garbage buffer under race condition.gh-75949: Fix
argparseto preserve|separators in mutually exclusive groups when the usage line wraps due to length.gh-142267: Improve
argparseperformance by caching the formatter used for argument validation.gh-68552:
MisplacedEnvelopeHeaderDefectandMissing header namedefects are now correctly passed to thehandle_defectmethod ofpolicyinFeedParser.gh-142006: Fix a bug in the
email.policy.defaultfolding 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¶
gh-142589: Fix
PyUnstable_Object_IsUniqueReferencedTemporary()handling of tagged ints on the interpreter stack.gh-142571:
PyUnstable_CopyPerfMapFile()now checks that opening the file succeeded before flushing.
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.minidomnode ID cache clearing.gh-119452: Fix a potential memory denial of service in the
http.servermodule. 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 aMemoryError, swapping, out of memory (OOM) killed processes or containers, or even system crashes.
Library¶
gh-140797: Revert changes to the undocumented
re.Scannerclass. 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
multiprocessingmodule 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
dataclassesin Python 3.14.1 related to annotations.An exception is no longer raised if
slots=Trueis used and the__init__method does not have an__annotate__attribute (likely becauseinit=Falsewas 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¶
Library¶
Python 3.14.1 final¶
Release date: 2025-12-02
Windows¶
gh-139810: Installing with
py install 3[.x]-devwill now select final versions as well as prereleases.
Tools/Demos¶
gh-141692: Each slice of an iOS XCframework now contains a
libfolder 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_ACTIONSenvironment variable to iOS apps being tested.gh-137484: Have
Tools/wasm/wasiput the build Python into a directory named after the build triple instead of “build”.gh-137248: Add a
--logdiroption toTools/wasm/wasifor 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 echoas part of the test environment.gh-140082: Update
python -m testto setFORCE_COLOR=1when being run with color enabled so thatunittestwhich is run by it with redirected output will output in color.gh-139208: Fix regrtest
--fast-ci --verbose: don’t ignore the--verboseoption anymore. Patch by Victor Stinner.gh-136442: Use exitcode
1instead of5ifunittest.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 inCursor.fetchmanyand reject negative values forCursor.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.clientmodule. When connecting to a malicious server, it could cause an arbitrary amount of memory to be allocated. This could have led to symptoms including aMemoryError, swapping, out of memory (OOM) killed processes or containers, or even system crashes.gh-119342: Fix a potential memory denial of service in the
plistlibmodule. 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 aMemoryError, swapping, out of memory (OOM) killed processes or containers, or even system crashes.
Library¶
gh-74389: When the stdin being used by a
subprocess.Popeninstance is closed, this is now ignored insubprocess.Popen.communicate()instead of leaving the class in an inconsistent state.gh-87512: Fix
subprocess.Popen.communicate()timeout handling on Windows when writing large input. Previously, the timeout was ignored during stdin writing, causing the method to block indefinitely if the child process did not consume input quickly. The stdin write is now performed in a background thread, allowing the timeout to be properly enforced.gh-141473: When
subprocess.Popen.communicate()was called with input and a timeout and is called for a second time after aTimeoutExpiredexception before the process has died, it should no longer hang.gh-59000: Fix
pdbbreakpoint resolution for class methods when the module defining the class is not imported.gh-141570: Support file-like object raising
OSErrorfromfileno()in color detection (_colorize.can_colorize()). This can occur whensys.stdoutis redirected.gh-141659: Fix bad file descriptor errors from
_posixsubprocesson AIX.gh-141600: Fix musl version detection on Void Linux.
gh-141497:
ipaddress: ensure that the methodsIPv4Network.hosts()andIPv6Network.hosts()always return an iterator.gh-140938: The
statistics.stdev()andstatistics.pstdev()functions now raise aValueErrorwhen the input contains an infinity or a NaN.gh-124111: Updated Tcl threading configuration in
_tkinterto assume that threads are always available in Tcl 9 and later.gh-137109: The
os.forkand related forking APIs will no longer warn in the common case where Linux or macOS platform APIs return the number of threads in a process and find the answer to be 1 even when aos.register_at_fork()after_in_parent=callback (re)starts a thread.gh-141314: Fix assertion failure in
io.TextIOWrapper.tell()when reading files with standalone carriage return (\r) line endings.gh-141311: Fix assertion failure in
io.BytesIO.readinto()and undefined behavior arising when read position is above capcity inio.BytesIO.gh-141141: Fix a thread safety issue with
base64.b85decode(). Contributed by Benel Tayar.gh-137969: Fix
annotationlib.ForwardRef.evaluate()returningForwardRefobjects which don’t update with new globals.gh-140911:
collections: Ensure that the methodsUserString.rindex()andUserString.index()acceptcollections.UserStringinstances as the sub argument.gh-140797: The undocumented
re.Scannerclass now forbids regular expressions containing capturing groups in its lexicon patterns. Patterns using capturing groups could previously lead to crashes with segmentation fault. Use non-capturing groups (?:…) instead.gh-125115: Refactor the
pdbparsing issue so positional arguments can pass through intuitively.gh-140815:
faulthandlernow detects if a frame or a code object is invalid or freed. Patch by Victor Stinner.gh-100218: Correctly set
errnowhensocket.if_nametoindex()orsocket.if_indextoname()raise anOSError. Patch by Bénédikt Tran.gh-140875: Fix handling of unclosed character references (named and numerical) followed by the end of file in
html.parser.HTMLParserwithconvert_charrefs=False.gh-140734:
multiprocessing: fix off-by-one error when checking the length of a temporary socket file path. Patch by Bénédikt Tran.gh-140874: Bump the version of pip bundled in ensurepip to version 25.3
gh-140691: In
urllib.request, when opening a FTP URL fails because a data connection cannot be made, the control connection’s socket is now closed to avoid aResourceWarning.gh-103847: Fix hang when cancelling process created by
asyncio.create_subprocess_exec()orasyncio.create_subprocess_shell(). Patch by Kumar Aditya.gh-120057: Add
os.reload_environ()toos.__all__.gh-140228: Avoid making unnecessary filesystem calls for frozen modules in
linecachewhen the global module cache is not present.gh-140590: Fix arguments checking for the
functools.partial.__setstate__()that may lead to internal state corruption and crash. Patch by Sergey Miryanov.gh-125434: Display thread name in
faulthandleron Windows. Patch by Victor Stinner.gh-140634: Fix a reference counting bug in
os.sched_param.__reduce__().gh-140633: Ignore
AttributeErrorwhen setting a module’s__file__attribute when loading an extension module packaged as Apple Framework.gh-140593:
xml.parsers.expat: Fix a memory leak that could affect users withElementDeclHandler()set to a custom element declaration handler. Patch by Sebastian Pipping.gh-140607: Inside
io.RawIOBase.read(), validate that the count of bytes returned byio.RawIOBase.readinto()is valid (inside the provided buffer).gh-138162: Fix
logging.LoggerAdapterwithmerge_extra=Trueand without the extra argument.gh-138774:
ast.unparse()now generates full source code when handlingast.Interpolationnodes that do not have a specified source.gh-140474: Fix memory leak in
array.arraywhen creating arrays from an emptystrand theutype code.gh-137530:
dataclassesFix annotations for generated__init__methods by replacing the annotations that were in-line in the generated source code with__annotate__functions attached to the methods.gh-140348: Fix regression in Python 3.14.0 where using the
|operator on atyping.Unionobject combined with an object that is not a type would raise an error.gh-140272: Fix memory leak in the
clear()method of thedbm.gnudatabase.gh-140041: Fix import of
ctypeson Android and Cygwin when ABI flags are present.gh-140120: Fixed a memory leak in
hmacwhen it was using the hacl-star backend. Discovered by@ashm-devusing AddressSanitizer.gh-139905: Add suggestion to error message for
typing.Genericsubclasses whencls.__parameters__is missing due to a parent class failing to callsuper().__init_subclass__()in its__init_subclass__.gh-139894: Fix incorrect sharing of current task with the child process while forking in
asyncio. Patch by Kumar Aditya.gh-139845: Fix to not print KeyboardInterrupt twice in default asyncio REPL.
gh-139783: Fix
inspect.getsourcelines()for the case when a decorator is followed by a comment or an empty line.gh-139809: Prevent premature colorization of subparser
proginargparse.ArgumentParser.add_subparsers()to respect color environment variable changes after parser creation.gh-139736: Fix excessive indentation in the default
argparseHelpFormatter. Patch by Alexander Edland.gh-70765:
http.server: fix default handling of HTTP/0.9 requests inBaseHTTPRequestHandler. Previously,BaseHTTPRequestHandler.parse_request()incorrectly waited for headers in the request although those are not supported in HTTP/0.9. Patch by Bénédikt Tran.gh-63161: Fix
tokenize.detect_encoding(). Support non-UTF-8 shebang and comments if non-UTF-8 encoding is specified. Detect decoding error for non-UTF-8 encoding. Detect null bytes in source code.gh-139391: Fix an issue when, on non-Windows platforms, it was not possible to gracefully exit a
python -m asyncioprocess suspended by Ctrl+Z and later resumed by fg other than with kill.gh-101828: Fix
'shift_jisx0213','shift_jis_2004','euc_jisx0213'and'euc_jis_2004'codecs truncating null chars as they were treated as part of multi-character sequences.gh-139289: Do a real lazy-import on
rlcompleterinpdband restore the existing completer after importingrlcompleter.gh-139246: fix: paste zero-width in default repl width is wrong.
gh-90949: Add
SetAllocTrackerActivationThreshold()andSetAllocTrackerMaximumAmplification()to xmlparser objects to prevent use of disproportional amounts of dynamic memory from within an Expat parser. Patch by Bénédikt Tran.gh-139210: Fix use-after-free when reporting unknown event in
xml.etree.ElementTree.iterparse(). Patch by Ken Jin.gh-138860: Lazy import
rlcompleterinpdbto avoid deadlock in subprocess.gh-112729: Fix crash when calling
concurrent.interpreters.create()when the process is out of memory.gh-135729: Fix unraisable exception during finalization when using
concurrent.interpretersin the REPL.gh-139076: Fix a bug in the
pydocmodule that was hiding functions in a Python module if they were implemented in an extension module and the module did not have__all__.gh-139065: Fix trailing space before a wrapped long word if the line length is exactly width in
textwrap.gh-139001: Fix race condition in
pathlib.Pathon the internal_raw_pathsfield.gh-138813:
multiprocessing.BaseProcessdefaultskwargstoNoneinstead of a shared dictionary.gh-138891: Fix
SyntaxErrorwheninspect.get_annotations(f, eval_str=True)is called on a function annotated with a PEP 646star_expressiongh-130567: Fix possible crash in
locale.strxfrm()due to a platform bug on macOS.gh-138859: Fix generic type parameterization raising a
TypeErrorwhen omitting aParamSpecthat has a default which is not a list of types.gh-138764: Prevent
annotationlib.call_annotate_function()from calling__annotate__functions that don’t supportVALUE_WITH_FAKE_GLOBALSin a fake globals namespace with empty globals.Make
FORWARDREFandSTRINGannotations fall back to usingVALUEannotations in the case that neither their own format, norVALUE_WITH_FAKE_GLOBALSare supported.gh-138775: Use of
python -mwithbase64has been fixed to detect input from a terminal so that it properly notices EOF.gh-138779: Support device numbers larger than
2**63-1for thest_rdevfield of theos.stat_resultstructure.gh-137706: Fix the partial evaluation of annotations that use
typing.Annotated[T, x]whereTis a forward reference.gh-88375: Fix normalization of the
robots.txtrules and URLs in theurllib.robotparsermodule. No longer ignore trailing?. Distinguish raw special characters?,=and&from the percent-encoded ones.gh-111788: Fix parsing errors in the
urllib.robotparsermodule. Don’t fail trying to parse weird paths. Don’t fail trying to decode non-UTF-8robots.txtfiles.gh-98896: Fix a failure in multiprocessing resource_tracker when SharedMemory names contain colons. Patch by Rani Pinchuk.
gh-138425: Fix partial evaluation of
annotationlib.ForwardRefobjects which rely on names defined as globals.gh-138432:
zoneinfo.reset_tzpath()will now convert anyos.PathLikeobjects it receives into strings before adding them toTZPATH. It will raiseTypeErrorif anything other than a string is found after this conversion. If given anos.PathLikeobject that represents a relative path, it will now raiseValueErrorinstead ofTypeError, and present a more informative error message.gh-138008: Fix segmentation faults in the
ctypesmodule due to invalidargtypes. Patch by Dung Nguyen.gh-60462: Fix
locale.strxfrm()on Solaris (and possibly other platforms).gh-138239: The REPL now highlights
typeas a soft keyword in type statements.gh-138204: Forbid expansion of shared anonymous
memory mapson Linux, which caused a bus error.gh-138010: Fix an issue where defining a class with an
@warnings.deprecated-decorated base class may not invoke the correct__init_subclass__()method in cases involving multiple inheritance. Patch by Brian Schubert.gh-138151: In
annotationlib, improve evaluation of forward references to nonlocal variables that are not yet defined when the annotations are initially evaluated.gh-137317:
inspect.signature()now correctly handles classes that use a descriptor on a wrapped__init__()or__new__()method. Contributed by Yongyu Yan.gh-137754: Fix import of the
zoneinfomodule if the C implementation of thedatetimemodule is not available.gh-137490: Handle
ECANCELEDin the same way asEINTRinsignal.sigwaitinfo()on NetBSD.gh-137477: Fix
inspect.getblock(),inspect.getsourcelines()andinspect.getsource()for generator expressions.gh-137044: Return large limit values as positive integers instead of negative integers in
resource.getrlimit(). Accept large values and reject negative values (exceptRLIM_INFINITY) for limits inresource.setrlimit().gh-75989:
tarfile.TarFile.extractall()andtarfile.TarFile.extract()now overwrite symlinks when extracting hardlinks. (Contributed by Alexander Enrique Urieles Nieto in gh-75989.)gh-137017: Fix
threading.Thread.is_aliveto remainTrueuntil the underlying OS thread is fully cleaned up. This avoids false negatives in edge cases involving thread monitoring or prematurethreading.Thread.is_alivecalls.gh-137273: Fix debug assertion failure in
locale.setlocale()on Windows.gh-137239:
heapq: Updateheapq.__all__with*_maxfunctions.gh-81325:
tarfile.TarFilenow accepts a path-like when working on a tar archive. (Contributed by Alexander Enrique Urieles Nieto in gh-81325.)gh-137185: Fix a potential async-signal-safety issue in
faulthandlerwhen printing C stack traces.gh-136914: Fix retrieval of
doctest.DocTest.linenofor objects decorated withfunctools.cache()orfunctools.cached_property.gh-136912:
hmac.digest()now properly handles large keys and messages by falling back to the pure Python implementation when necessary. Patch by Bénédikt Tran.gh-83424: Allows creating a
ctypes.CDLLwithout name when passing a handle as an argument.gh-136234: Fix
asyncio.WriteTransport.writelines()to be robust to connection failure, by using the same behavior aswrite().gh-136507: Fix mimetypes CLI to handle multiple file parameters.
gh-136057: Fixed the bug in
pdbandbdbwherenextandstepcan’t go over the line if a loop exists in the line.gh-135386: Fix opening a
dbm.sqlite3database for reading from read-only file or directory.gh-135444: Fix
asyncio.DatagramTransport.sendto()to account for datagram header size when data cannot be sent.gh-126631: Fix
multiprocessingforkserverbug which prevented__main__from being preloaded.gh-135307:
email: Fix exception inset_content()when encoding text and max_line_length is set to0orNone(unlimited).gh-134453: Fixed
subprocess.Popen.communicate()input=handling ofmemoryviewinstances that were non-byte shaped on POSIX platforms. Those are now properly cast to a byte shaped view instead of truncating the input. Windows platforms did not have this bug.gh-134698: Fix a crash when calling methods of
ssl.SSLContextorssl.SSLSocketacross multiple threads.gh-125996: Fix thread safety of
collections.OrderedDict. Patch by Kumar Aditya.gh-133789: Fix unpickling of
pathlibobjects that were pickled in Python 3.13.gh-127081: Fix libc thread safety issues with
dbmby performing stateful operations in critical sections.gh-132551: Make
io.BytesIOsafe in free-threaded build.gh-131788: Make
ResourceTracker.sendfrommultiprocessingre-entrant safegh-118981: Fix potential hang in
multiprocessing.popen_spawn_posixthat can happen when the child proc dies early by closing the child fds right away.gh-102431: Clarify constraints for “logical” arguments in methods of
decimal.Context.gh-78319: UTF8 support for the IMAP APPEND command has been made RFC compliant.
bpo-38735: Fix failure when importing a module from the root directory on unix-like platforms with sys.pycache_prefix set.
bpo-41839: Allow negative priority values from
os.sched_get_priority_min()andos.sched_get_priority_max()functions.
IDLE¶
Documentation¶
gh-141994:
xml.sax.handler: Make Documentation ofxml.sax.handler.feature_external_geswarn of opening up to external entity attacks. Patch by Sebastian Pipping.gh-140578: Remove outdated sencence in the documentation for
multiprocessing, that implied thatconcurrent.futures.ThreadPoolExecutordid not exist.
Core and Builtins¶
gh-142048: Fix quadratically increasing garbage collection delays in free-threaded build.
Library¶
Core and Builtins¶
gh-141930: When importing a module, use Python’s regular file object to ensure that writes to
.pycfiles 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
RecursionErroror 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 theperf_jitbackend. 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.destroyfunction 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¶
gh-116738: Make csv module thread-safe on the free threaded build.
Core and Builtins¶
gh-140939: Fix memory leak when
bytearrayorbytesis formated with the%*bformat with a large width that results in aMemoryError.
Library¶
Core and Builtins¶
gh-140530: Fix a reference leak when
raise exc from causefails. Patch by Bénédikt Tran.gh-140373: Correctly emit
PY_UNWINDevent when generator object is closed. Patch by Mikhail Efimov.gh-140576: Fixed crash in
tokenize.generate_tokens()in case of specific incorrect input. Patch by Mikhail Efimov.gh-140551: Fixed crash in
dictifdict.clear()is called at the lookup stage. Patch by Mikhail Efimov and Inada Naoki.gh-140517: Fixed a reference leak when iterating over the result of
map()withstrict=Truewhen the input iterables have different lengths. Patch by Mikhail Efimov.gh-140471: Fix potential buffer overflow in
ast.ASTnode initialization when encountering malformed_fieldscontaining non-str.gh-140431: Fix a crash in Python’s garbage collector due to partially initialized coroutine objects when coroutine origin tracking depth is enabled (
sys.set_coroutine_origin_tracking_depth()).
Library¶
gh-140398: Fix memory leaks in
readlinefunctionsread_init_file(),read_history_file(),write_history_file(), andappend_history_file()whenPySys_Audit()fails.
Core and Builtins¶
gh-140406: Fix memory leak when an object’s
__hash__()method returns an object that isn’t anint.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
PyConfigin 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, ortyping.TypeVarTupleand 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
Uniontype. Patch by Bénédikt Tran.gh-139748: Fix reference leaks in error branches of functions accepting path strings or bytes such as
compile()andos.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 forreturn/break/continueinfinally(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
finallyblock.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¶
gh-116738: Make
mmapthread-safe on the free threaded build.
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
SyntaxErrormessage when invalid syntax appears on the same line as a validimport ... as ...orfrom ... import ... as ...statement. Patch by Brian Schubert.gh-105487: Remove non-existent
__copy__(),__deepcopy__(), and__bases__from the__dir__()entries oftypes.GenericAlias.gh-69605: Fix some standard library submodules missing from the REPL auto-completion of imports.
Library¶
gh-116738: Make
cProfilethread-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¶
gh-137433: Fix a potential deadlock in the free threading build when daemon threads enable or disable profiling or tracing while the main thread is shutting down the interpreter.
gh-137400: Fix a crash in the free threading build when disabling profiling or tracing across all threads with
PyEval_SetProfileAllThreads()orPyEval_SetTraceAllThreads()or their Python equivalentsthreading.settrace_all_threads()andthreading.setprofile_all_threads().gh-58124: Fix name of the Python encoding in Unicode errors of the code page codec: use “cp65000” and “cp65001” instead of “CP_UTF7” and “CP_UTF8” which are not valid Python code names. Patch by Victor Stinner.
gh-132657: Improve performance of
frozensetby removing locks in the free-threading build.gh-133400: Fixed Ctrl+D (^D) behavior in _pyrepl module to match old pre-3.13 REPL behavior.
gh-128640: Fix a crash when using threads inside of a subinterpreter.
C API¶
gh-137422: Fix free threading race condition in
PyImport_AddModuleRef(). It was previously possible for two calls to the function return two different objects, only one of which was stored insys.modules.gh-140042: Removed the sqlite3_shutdown call that could cause closing connections for sqlite when used with multiple sub interpreters.
gh-141042: Make qNaN in
PyFloat_Pack2()andPyFloat_Pack4(), if while conversion to a narrower precision floating-point format — the remaining after truncation payload will be zero. Patch by Sergey B Kirpichev.gh-140487: Fix
Py_RETURN_NOTIMPLEMENTEDin limited C API 3.11 and older: don’t treatPy_NotImplementedas immortal. Patch by Victor Stinner.gh-140153: Fix
Py_REFCNT()definition on limited C API 3.11-3.13. Patch by Victor Stinner.gh-139653: Add
PyUnstable_ThreadState_SetStackProtection()andPyUnstable_ThreadState_ResetStackProtection()functions to set the stack protection base address and stack protection size of a Python thread state. Patch by Victor Stinner.
Build¶
gh-141808: Do not generate the jit stencils twice in case of PGO builds on Windows.
gh-141784: Fix
_remote_debugging_module.ccompilation on 32-bit Linux. Include Python.h before system headers to make sure that_remote_debugging_module.cuses 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_INTERPis enabled but eitherpreserve_noneormusttailis not supported.gh-140189: iOS builds were added to CI.
gh-138489: When cross-compiling for WASI by
build_wasmorbuild_emscripten, thebuild-details.jsonstep is now included in the build process, just like with native builds.This fixes the
libinstalltask which requires thebuild-details.jsonfile during the process.gh-137618:
PYTHON_FOR_REGENnow 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¶
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.shscript, 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
iOSfolder has been moved to be a subdirectory of theApplefolder.
Security¶
gh-139400:
xml.parsers.expat: Make sure that parent Expat parsers are only garbage-collected once they are no longer referenced by subparsers created byExternalEntityParserCreate(). Patch by Sebastian Pipping.
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.HTMLParseraccording 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¶
gh-138998: Update bundled libexpat to 2.7.2
gh-118803: Add back
collections.abc.ByteStringandtyping.ByteString. Both had been removed in prior alpha, beta and release candidates for Python 3.14, but their removal has now been postponed to Python 3.17.gh-137226: Fix
typing.get_type_hints()calls on generictyping.TypedDictclasses defined with string annotations.gh-138804: Raise
TypeErrorinstead ofAttributeErrorwhen an argument of incorrect type is passed toshlex.quote(). This restores the behavior of the function prior to 3.14.gh-128636: Fix crash in PyREPL when os.environ is overwritten with an invalid value for mac
gh-138514: Raise
ValueErrorwhen a multi-character string is passed to the echo_char parameter ofgetpass.getpass(). Patch by Benjamin Johnson.gh-99948:
ctypes.util.find_library()now works in Emscripten build.gh-138253: Add the block parameter in the
put()andget()methods of theconcurrent.interpretersqueues for compatibility with thequeue.Queueinterface.gh-138133: Prevent infinite traceback loop when sending CTRL^C to Python through
strace.gh-134869: Fix an issue where pressing Ctrl+C during tab completion in the REPL would leave the autocompletion menu in a corrupted state.
gh-90548: Fix
musldetection forplatform.libc_ver()on Alpine Linux if compiled with –strip-all.gh-136134:
SMTP.auth_cram_md5()now raises anSMTPExceptioninstead of aValueErrorif Python has been built without MD5 support. In particular,SMTPclients will not attempt to use this method even if the remote server is assumed to support it. Patch by Bénédikt Tran.gh-136134:
IMAP4.login_cram_md5now raises anIMAP4.errorif CRAM-MD5 authentication is not supported. Patch by Bénédikt Tran.gh-134953: Expand
_colorizetheme withkeyword_constantand implement in repl.
Core and Builtins¶
gh-71810: Raise
OverflowErrorfor(-1).to_bytes()for signed conversions when bytes count is zero. Patch by Sergey B Kirpichev.gh-138192: Fix
contextvarsinitialization so that all subinterpreters are assigned theMISSINGvalue.gh-138479: Fix a crash when a generic object’s
__typing_subst__returns an object that isn’t atuple.gh-138372: Fix
SyntaxWarningemitted 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
setorformat()) when they are used as attribute names (for instance invalue.setortext.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
warningsmodule 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
PYTHONSTARTUPis given. Patch by Adam Hartz.
Python 3.14.0 release candidate 2¶
Release date: 2025-08-14
macOS¶
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 inimportlib.abc.gh-137282: Fix tab completion and
dir()onconcurrent.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
TypeErrorraised during interpreter shutdown in thethreadingmodule.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:
tarfilenow validates archives to ensure member offsets are non-negative. (Contributed by Alexander Enrique Urieles Nieto in gh-130577.)gh-135228: When
dataclassesreplaces 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 bydataclasses.
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()orPyEval_SetTraceAllThreads()or their Python equivalentsthreading.settrace_all_threads()andthreading.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
passstatement to ensure that the node’s body is never empty. There was aValueErrorincompile()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¶
gh-137573: Mark
_PyOptimizer_OptimizeasPy_NO_INLINEto prevent stack overflow crashes on macOS.
Build¶
gh-132339: Add support for OpenSSL 3.5.
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¶
gh-135661: Fix parsing attributes with whitespaces around the
=separator inhtml.parser.HTMLParseraccording to the HTML5 standard.gh-118350: Fix support of escapable raw text mode (elements “textarea” and “title”) in
html.parser.HTMLParser.
Library¶
gh-136170: Removed the unreleased
zipfile.ZipFile.data_offsetproperty added in 3.14.0a7 as it wasn’t fully clear which behavior it should have in some situations so the result was not always what a user might expect.gh-124621: pyrepl now works in Emscripten.
gh-136874: Discard URL query and fragment in
urllib.request.url2pathname().gh-136549: Fix signature of
threading.excepthook().gh-136523: Fix
wave.Wave_writeemitting an unraisable when open raises.gh-52876: Add missing
keepends(defaultTrue) parameter tocodecs.StreamReaderWriter.readline()andcodecs.StreamReaderWriter.readlines().gh-136470: Correct
concurrent.futures.InterpreterPoolExecutor’s default thread name.gh-136476: Fix a bug that was causing the
get_async_stack_tracefunction to miss some frames in the stack trace.gh-136434: Fix docs generation of
UnboundIteminconcurrent.interpreterswhen running with-OO.gh-136380: Raises
AttributeErrorwhen accessingconcurrent.futures.InterpreterPoolExecutorand subinterpreters are not available.gh-134759: Fix
UnboundLocalErrorinemail.message.Message.get_payload()when the payload to decode is abytesobject. Patch by Kliment Lamonov.gh-134657:
asyncio: Remove some private names fromasyncio.__all__.
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_UNCOLLECTABLEmode was set.gh-136525: Fix issue where per-thread bytecode was not instrumented for newly created threads.
gh-132661:
Interpolation.expressionnow has a default, the empty string.gh-132661: Reflect recent PEP 750 change.
Disallow concatenation of
string.templatelib.Templateandstr. Also, disallow implicit concatenation of t-string literals with string or f-string literals.
Library¶
gh-116738: Make functions in
grpthread-safe on the free threaded build.
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
bytearrayis concurrently mutated during item assignment.gh-127971: Fix off-by-one read beyond the end of a string in string search.
C API¶
gh-112068: Revert support of nullable arguments in
PyArg_Parse().gh-133296: New variants for the critical section API that accept one or two
PyMutexpointers rather thanPyObjectinstances are now public in the non-limited C API.gh-134009: Expose
PyMutex_IsLocked()as part of the public C API.
Build¶
Python 3.14.0 beta 4¶
Release date: 2025-07-08
Tools/Demos¶
Tests¶
Security¶
gh-136053:
marshal: fix a possible crash when deserializingsliceobjects.gh-135661: Fix parsing start and end tags in
html.parser.HTMLParseraccording 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\fand 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.HTMLParseraccording to the HTML5 standard.--!>now ends the comment.-- >no longer ends the comment. Support abnormally ended empty comments<-->and<--->.
Library¶
gh-136286: Fix pickling failures for protocols 0 and 1 for many objects realted to subinterpreters.
gh-136316: Improve support for evaluating nested forward references in
typing.evaluate_forward_ref().gh-85702: If
zoneinfo._common.load_tzdatais given a package without a resource azoneinfo.ZoneInfoNotFoundErroris raised rather than aPermissionError. Patch by Victor Stinner.gh-136028: Fix parsing month names containing “İ” (U+0130, LATIN CAPITAL LETTER I WITH DOT ABOVE) in
time.strptime(). This affects locales az_AZ, ber_DZ, ber_MA and crh_UA.gh-135995: In the palmos encoding, make byte
0x9bdecode to›(U+203A - SINGLE RIGHT-POINTING ANGLE QUOTATION MARK).gh-53203: Fix
time.strptime()for%cand%xformats on locales byn_ER, wal_ET and lzh_TW, and for%Xformat on locales ar_SA, bg_BG and lzh_TW.gh-91555: An earlier change, which was introduced in 3.14.0b2, has been reverted. It disabled logging for a logger during handling of log messages for that logger. Since the reversion, the behaviour should be as it was before 3.14.0b2.
gh-135878: Fixes a crash of
types.SimpleNamespaceon free threading builds, when several threads were calling its__repr__()method at the same time.gh-135836: Fix
IndexErrorinasyncio.loop.create_connection()that could occur when non-OSErrorexception is raised during connection and socket’sclose()raisesOSError.gh-135836: Fix
IndexErrorinasyncio.loop.create_connection()that could occur when the Happy Eyeballs algorithm resulted in an empty exceptions list during connection attempts.gh-135855: Raise
TypeErrorinstead ofSystemErrorwhen_interpreters.set___main___attrs()is passed a non-dict object. Patch by Brian Schubert.gh-135815:
netrc: skip security checks ifos.getuid()is missing. Patch by Bénédikt Tran.gh-135640: Address bug where it was possible to call
xml.etree.ElementTree.ElementTree.write()on an ElementTree object with an invalid root element. This behavior blanked the file passed towriteif it already existed.gh-135645: Added
supports_isolated_interpretersfield tosys.implementation.gh-135646: Raise consistent
NameErrorexceptions inannotationlib.ForwardRef.evaluate()gh-135557: Fix races on
heapqupdates andlistreads on the free threaded build.gh-119180: Only fetch globals and locals if necessary in
annotationlib.get_annotations()gh-135561: Fix a crash on DEBUG builds when an HACL* HMAC routine fails. Patch by Bénédikt Tran.
gh-135487: Fix
reprlib.Repr.repr_int()when given integers with more thansys.get_int_max_str_digits()digits. Patch by Bénédikt Tran.gh-135335:
multiprocessing: Flushstdoutandstderrafter preloading modules in theforkserver.gh-135069: Fix the “Invalid error handling” exception in
encodings.idna.IncrementalDecoderto correctly replace the ‘errors’ parameter.gh-130662: +Accept leading zeros in precision and width fields for +:class:
Decimalformatting, for exampleformat(Decimal(1.25), '.016f').gh-130662: Accept leading zeros in precision and width fields for
Fractionformatting, for exampleformat(Fraction(1, 3), '.016f').gh-87790: Support underscore and comma as thousands separators in the fractional part for
Fraction’s formatting. Patch by Sergey B Kirpichev.gh-87790: Support underscore and comma as thousands separators in the fractional part for
Decimal’s formatting. Patch by Sergey B Kirpichev.gh-130664: Handle corner-case for
Fraction’s formatting: treat zero-padding (preceding the width field by a zero ('0') character) as an equivalent to a fill character of'0'with an alignment type of'=', just as in case offloat’s.
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, ...)whereclsis not instantiable builtin or extension type (withtp_newset toNULL).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
weakrefraces 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_execaudit event whensys.remote_exec()is called and migrateremote_debugger_scripttocpython.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¶
Tests¶
gh-132815: Fix test__opcode: add
JUMP_BACKWARDto specialization stats.