Changelog¶
Python next¶
Release date: XXXX-XX-XX
Tests¶
gh-142836: Accommodated Solaris in
test_pdb.test_script_target_anonymous_pipe.
Library¶
gh-142783: Fix zoneinfo use-after-free with descriptor _weak_cache. a descriptor as _weak_cache could cause crashes during object creation. The fix ensures proper reference counting for descriptor-provided objects.
gh-142594: Fix crash in
TextIOWrapper.close()when the underlying buffer’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¶
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
tarfileextraction filters (filter="data"andfilter="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
_lsprofforPY_THROWevent.gh-135368: Fix
unittest.mock.Mockgeneration ondataclasses.dataclass()objects. Now all special attributes are set as it was before gh-124429.gh-133967: Do not normalize
localename ‘C.UTF-8’ to ‘en_US.UTF-8’.gh-135321: Raise a correct exception for values greater than 0x7fffffff for the
BINSTRINGopcode in the C implementation ofpickle.gh-135276: Backported bugfixes in zipfile.Path from zipp 3.23. Fixed
.name,.stemand 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 affectsuuid1()anduuid6().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 omitsNoneand[]values if they are default values.gh-134939: Add the
concurrent.interpretersmodule. See PEP 734.gh-134885: Fix possible crash in the
compression.zstdmodule related to setting parameter types. Patch by Jelle Zijlstra.gh-134857: Improve error report for
doctests run withunittest. Removedoctestmodule 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
ctypesfunction 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 asmd5(data=data)ormd5(string=string)depending on the underlying implementation but these calls were not compatible. Patch by Bénédikt Tran.gh-134151:
email: FixTypeErrorinemail.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.Dialectattributes.gh-132969: Prevent the
ProcessPoolExecutorexecutor thread, which remains running whenshutdown(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
osby replacinggetloginwithgetlogin_rre-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¶
Core and Builtins¶
gh-135496: Fix typo in the f-string conversion type error (“exclamanation” -> “exclamation”).
gh-135371: Fixed
asynciodebugging tools to properly display internal coroutine call stacks alongside external task dependencies. Thepython -m asyncio psandpython -m asyncio pstreecommands now show complete execution context. Patch by Pablo Galindo.
Library¶
gh-127319: Set the
allow_reuse_portclass variable toFalseon 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_ITERinstruction back to the creation of the generator expression and adding an additional check toFOR_ITER.
Library¶
gh-116738: Make methods in
heapqthread-safe on the free threaded build.
Core and Builtins¶
Library¶
gh-134908: Fix crash when iterating over lines in a text file on the free threaded build.
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 iterationgh-133912: Fix the C API function
PyObject_GenericSetDictto handle extension classes with inline values.
C API¶
gh-134989: Fix
Py_RETURN_NONE,Py_RETURN_TRUEandPy_RETURN_FALSEmacros in the limited C API 3.11 and older: don’t treatPy_None,Py_TrueandPy_Falseas immortal. Patch by Victor Stinner.gh-134989: Implement
PyObject_DelAttr()andPyObject_DelAttrString()as macros in the limited C API 3.12 and older. Patch by Victor Stinner.gh-133968: Add
PyUnicodeWriter_WriteASCII()function to write an ASCII string into aPyUnicodeWriter. The function is faster thanPyUnicodeWriter_WriteUTF8(), but has an undefined behavior if the input string contains non-ASCII characters. Patch by Victor Stinner.
Build¶
gh-119132: Remove “experimental” tag from the CPython free-threading build.
gh-135497: Fix the detection of
MAXLOGNAMEin theconfigure.acscript.gh-134923: Windows builds with profile-guided optimization enabled now use
/GENPROFILEand/USEPROFILEinstead of deprecated/LTCG:options.gh-134774: Fix
Py_DEBUGmacro redefinition warnings on Windows debug builds. Patch by Chris Eibl.gh-134632: Fixed
build-details.jsongeneration to useINCLUDEPY, in order to reference thepythonX.Ysubdirectory 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.hfiles based on compiler settings, as it was frequently causing extension builds to break. In particular, thePy_GIL_DISABLEDpreprocessor variable must now always be defined explicitly when compiling for the experimental free-threaded runtime. Thesysconfig.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¶
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_displayswhich 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 runinput_code.
Security¶
Library¶
gh-132710: If possible, ensure that
uuid.getnode()returns the same result even across different processes. Previously, the result was constant only within the same process. Patch by Bénédikt Tran.gh-80334:
multiprocessing.freeze_support()now checks for work on any “spawn” start method platform rather than only on Windows.gh-134582: Fix tokenize.untokenize() round-trip errors related to t-strings braces escaping
gh-134546: Ensure
pdbremote debugging script is readable by remote Python process.gh-134451: Converted
asyncio.tools.CycleFoundExceptionfrom dataclass to a regular exception type.gh-114177: Fix
asyncioto not close subprocess pipes which would otherwise error out when the event loop is already closed.gh-90871: Fixed an off by one error concerning the backlog parameter in
create_unix_server(). Contributed by Christian Harries.gh-134323: Fix the
threading.RLock.locked()method.gh-86802: Fixed asyncio memory leak in cancelled shield tasks. For shielded tasks where the shield was cancelled, log potential exceptions through the exception handler. Contributed by Christian Harries.
gh-134209:
curses: Thecurses.window.instr()andcurses.window.getstr()methods now allocate their internal buffer on the heap instead of the stack; in addition, the max buffer size is increased from 1023 to 2047.gh-134235: Updated tab completion on REPL to include builtin modules. Contributed by Tom Wang, Hunter Young
gh-134152: Fixed
UnboundLocalErrorthat could occur duringemailheader parsing if an expected trailing delimiter is missing in some contexts.gh-134168:
http.server: Fix IPv6 address binding and--directoryhandling when using HTTPS.gh-62184: Remove import of C implementation of
io.FileIOfrom Python implementation which has its own implementationgh-133982: Emit
RuntimeWarningin the Python implementation ofiowhen the file-like object is not closed explicitly in the presence of multiple I/O layers.gh-133890: The
tarfilemodule now handlesUnicodeEncodeErrorin the same way asOSErrorwhen cannot extract a member.gh-134097: Fix interaction of the new REPL and
-X showrefcountcommand line option.gh-133889: The generated directory listing page in
http.server.SimpleHTTPRequestHandlernow only shows the decoded path component of the requested URL, and not the query and fragment.gh-134098: Fix handling paths that end with a percent-encoded slash (
%2for%2F) inhttp.server.SimpleHTTPRequestHandler.gh-132124: On POSIX-compliant systems,
multiprocessing.util.get_temp_dir()now ignoresTMPDIR(and similar environment variables) if the path length ofAF_UNIXsocket files exceeds the platform-specific maximum length when using the forkserver start method. Patch by Bénédikt Tran.gh-134062:
ipaddress: fix collisions in__hash__()forIPv4NetworkandIPv6Networkobjects.gh-133970: Make
string.templatelib.Templateandstring.templatelib.Interpolationgeneric.gh-71253: Raise
ValueErrorinopen()if opener returns a negative file-descriptor in the Python implementation ofioto match the C implementation.gh-133960: Simplify and improve
typing.evaluate_forward_ref(). It now no longer raises errors on certain invalid types. In several situations, it is now able to evaluate forward references that were previously unsupported.gh-133925: Make the private class
typing._UnionGenericAliashashable.gh-133653: Fix
argparse.ArgumentParserwith the formatter_class argument. Fix TypeError when formatter_class is a custom subclass ofHelpFormatter. Fix TypeError when formatter_class is not a subclass ofHelpFormatterand non-standard prefix_char is used. Fix support of colorizing when formatter_class is not a subclass ofHelpFormatter.gh-132641: Fixed a race in
functools.lru_cache()under free-threading.gh-133783: Fix bug with applying
copy.replace()toastobjects. Attributes that default toNonewere incorrectly treated as required for manually created AST nodes.gh-133684: Fix bug where
annotationlib.get_annotations()would return the wrong result for certain classes that are part of a class hierarchy wherefrom __future__ import annotationsis used.gh-77057: Fix handling of invalid markup declarations in
html.parser.HTMLParser.gh-130328: Speedup pasting in
PyREPLon Windows in a legacy console. Patch by Chris Eibl.gh-133701: Fix bug where
typing.TypedDictclasses defined underfrom __future__ import annotationsand inheriting from anotherTypedDicthad an incorrect__annotations__attribute.gh-133581: Improve unparsing of t-strings in
ast.unparse()andfrom __future__ import annotations. Empty t-strings now round-trip correctly and formatting in interpolations is preserved. Patch by Jelle Zijlstra.gh-133551: Support t-strings (PEP 750) in
annotationlib. Patch by Jelle Zijlstra.gh-133439: Fix dot commands with trailing spaces are mistaken for multi-line SQL statements in the sqlite3 command-line interface.
gh-132493: Avoid accessing
__annotations__unnecessarily ininspect.signature().gh-132876:
ldexp()on Windows doesn’t round subnormal results before Windows 11, but should. Python’smath.ldexp()wrapper now does round them, so results may change slightly, in rare cases of very small results, on Windows versions before 11.gh-133009:
xml.etree.ElementTree: Fix a crash inElement.__deepcopy__when the element is concurrently mutated. Patch by Bénédikt Tran.gh-91555: Ignore log messages generated during handling of log messages, to avoid deadlock or infinite recursion. [NOTE: This change has since been reverted.]
gh-125028:
functools.Placeholdercannot be passed tofunctools.partial()as a keyword argument.gh-62824: Fix aliases for
iso8859_8encoding. Patch by Dave Goncalves.gh-86155:
html.parser.HTMLParser.close()no longer loses data when the<script>tag is not closed. Patch by Waylan Limberg.gh-69426: Fix
html.parser.HTMLParserto not unescape character entities in attribute values if they are followed by an ASCII alphanumeric or an equals sign.bpo-28494: Improve Zip file validation false positive rate in
zipfile.is_zipfile().gh-134381: Fix
RuntimeErrorwhen using a not-startedthreading.Threadafter callingos.fork()
Core and Builtins¶
gh-127960: PyREPL interactive shell no longer starts with
__package__and__file__global names set to_pyreplpackage 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.modulesafter its initial import. Patch by Nico-Posada.gh-133999: Fix
SyntaxErrorregression inexceptparsing 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 underfrom __future__ import annotationshad 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
ValueErrorwhen constantsTrue,FalseorNoneare used as an identifier after NFKC normalization.gh-132542: Update
Thread.native_idafter fork(2) to ensure accuracy. Patch by Noam Cohen.
C API¶
gh-134144: Fix crash when calling
Py_EndInterpreter()with a thread state that isn’t the initial thread for the interpreter.
Build¶
Python 3.14.0 beta 1¶
Release date: 2025-05-06
Windows¶
gh-132930: Marks the installer for Windows as deprecated and updates documentation to cover the new Python install manager.
gh-127405: Add
ABIFLAGStosysconfig.get_config_vars()on Windows. Patch by Xuehai Pan.
Tools/Demos¶
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/fdapproach on all Apple platforms, not just macOS. This avoids crashes caused by guarded file descriptors.gh-132678: Add
--prioritizeto-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/testcan now be correctly executed as standalone scripts.
Security¶
gh-115322: The underlying extension modules behind
readline:,subprocess, andctypesnow raise audit events on previously uncovered code paths that could lead to file system access related to C function calling and external binary execution. Thectypes.call_functionaudit hook has also been fixed to use an unsigned value for itsfunction pointer.
Library¶
gh-133490: Add color support to PDB in remote mode.
gh-132493: Avoid eagerly evaluating annotations in functions decorated with
reprlib.recursive_repr().gh-130645: Add color to stdlib argparse CLIs. Patch by Hugo van Kemenade.
gh-119180: Make
annotationlib.get_annotations()succeed with theFORWARDREFformat if evaluating the annotations throws an exception other thanNameErrororAttributeError.gh-133351: Fix remote PDB to correctly request tab completions for Python expressions from the server when completing a continuation line of a multi-line Python block.
gh-133367: Add the
--feature-version,--optimize, and--show-emptyoptions to theastcommand-line interface. Patch by Semyon Moroz.gh-133363: The
cmd.Cmdclass has been fixed to reliably call thecompletedefaultmethod whenever thedo_shellmethod is not defined and tab completion is requested for a line beginning with!.gh-133306: Use
\zinstead of\Zinfnmatch.translate()andglob.translate().gh-133306: Support
\zas a synonym for\Zinregular expressions.gh-133300: Make
argparse.ArgumentParser’ssuggest_on_errora keyword-only parameter. Patch by Hugo van Kemenade.gh-133290: Fix attribute caching issue when setting
ctypes._Pointer._type_in the undocumented and deprecatedctypes.SetPointerType()function and the undocumentedset_type()method.gh-133223: When PDB is attached to a remote process, do a better job of intercepting Ctrl+C and forwarding it to the remote process.
gh-133153: Do not complete
pdbcommands ininteractmode ofpdb.gh-133139: Add the
curses.assume_default_colors()function, a refinement of thecurses.use_default_colors()function which allows to change the color pair0.gh-133089: Use original timeout value for
subprocess.TimeoutExpiredwhen the funcsubprocess.run()is called with a timeout instead of sometimes a confusing partial remaining time out value used internally on the finalwait().gh-133036:
codecs.open()is now deprecated. Useopen()instead. Contributed by Inada Naoki.gh-132987: Many builtin and extension functions which accept an unsigned integer argument, now use
__index__()if available.gh-124703: Set return code to
1when aborting process frompdb.gh-133005: Support passing
presetoption totarfile.open()when using'w|xz'mode.gh-115032: Support for custom logging handlers with the strm argument is deprecated and scheduled for removal in Python 3.16. Define handlers with the stream argument instead. Patch by Mariusz Felisiak.
gh-132991: Add
socket.IP_FREEBINDconstant on Linux 2.4 and later.gh-132995: Bump the version of pip bundled in ensurepip to version 25.1.1
gh-132933: The zipapp module now applies the filter when creating the list of files to add, rather than waiting until the file is being added to the archive.
gh-121249: Always support the float complex and double complex C types in the
structmodule. Patch by Sergey B Kirpichev.gh-132915:
fcntl.fcntl()andfcntl.ioctl()can now detect a buffer overflow and raiseSystemError. The stack and memory can be corrupted in such case, so treat this error as fatal.gh-132017: Fix error when
pyreplis suspended, then resumed and terminated.gh-132893: Improved
statistics.NormalDist.cdf()accuracy for inputs smaller than the mean.gh-130328: Speedup pasting in
PyREPLon Windows. Fix by Chris Eibl.gh-132882: Fix copying of
typing.Unionobjects containing objects that do not support the|operator.gh-93696: Fixed the breakpoint display error for frozen modules in
pdb.gh-129965: Add MIME types for
.7z,.apk,.deb,.glb,.gltf,.gz,.m4v,.php,.rar,.rpm,.stland.wmv. Patch by Hugo van Kemenade.gh-132742:
fcntl.fcntl()now supports arbitrary bytes-like objects, not onlybytes.fcntl.ioctl()now automatically retries system calls failing with EINTR and releases the GIL during a system call even for large bytes-like object.gh-132451: The CLI for the PDB debugger now accepts a
-p PIDargument to allow attaching to a running process. The process must be running the same version of Python as the one running PDB.gh-125618: Add a format parameter to
annotationlib.ForwardRef.evaluate(). Evaluating annotations in theFORWARDREFformat now succeeds in more cases that would previously have raised an exception.gh-132805: Fix incorrect handling of nested non-constant values in the FORWARDREF format in
annotationlib.gh-132673: Fix
AssertionErrorraised onctypes.Structurewith_align_ = 0and_fields_ = [].gh-132578: Rename the
threading.Thread._handlefield to avoid shadowing methods defined on subclasses ofthreading.Thread.gh-132561: Fix the public
lockedmethod ofmultiprocessing.SemLockclass. Also adding 2 tests for the derivatedmultiprocessing.Lockandmultiprocessing.RLockclasses.gh-121468: Add
pdb.set_trace_async()function to supportawaitstatements inpdb.gh-132493:
typing.Protocolnow usesannotationlib.get_annotations()when checking whether or not an instance implements the protocol withisinstance(). This enables support forisinstancechecks against classes with deferred annotations.gh-132536: Do not disable
PY_THROWevent inbdbbecause it can’t be disabled.gh-132527: Include the valid typecode ‘w’ in the error message when an invalid typecode is passed to
array.array.gh-132099: The Bluetooth socket with the
BTPROTO_HCIprotocol on Linux now accepts an address in the format of an integerdevice_id, not only a tuple(device_id,).gh-81793: Fix
os.link()on platforms (like Linux) where the systemlink()function does not follow symlinks. On Linux, it now follows symlinks by default or iffollow_symlinks=Trueis specified. On Windows, it now raises an error iffollow_symlinks=Trueis passed. On macOS, it now raises an error iffollow_symlinks=Falseis passed and the systemlinkat()function is not available at runtime.gh-132493: Support creation of
typing.Protocolclasses with annotations that cannot be resolved at class creation time.gh-132491: Rename
annotationlib.value_to_stringtoannotationlib.type_repr()and provide better handling for function objects.gh-132426: Add
annotationlib.get_annotate_from_class_namespace()as a helper for accessing annotations in metaclasses, and removeannotationlib.get_annotate_function.gh-70145: Add support for channels in Bluetooth HCI protocol (
BTPROTO_HCI).gh-131913: Add a shortcut function
multiprocessing.Process.interrupt()alongside the existingmultiprocessing.Process.terminate()andmultiprocessing.Process.kill()for an improved control over child process termination.gh-132439: Fix
PyREPLon Windows: characters entered via AltGr are swallowed. Patch by Chris Eibl.gh-132429: Fix support of Bluetooth sockets on NetBSD and DragonFly BSD. Add support for cid and bdaddr_type in the BTPROTO_L2CAP address on FreeBSD. Return cid in
getsockname()for BTPROTO_L2CAP if it is not zero.gh-132106:
QueueListener.startnow raises aRuntimeErrorif the listener is already started.gh-132417: Fix a
NULLpointer dereference when a C function called usingctypeswithrestypepy_objectreturnsNULL.gh-132385: Fix instance error suggestions trigger potential exceptions in
object.__getattr__()intraceback.gh-125866: Add optional add_scheme argument to
urllib.request.pathname2url(); when set to true, a complete URL is returned. Likewise add optional require_scheme argument tourl2pathname(); when set to true, a complete URL is accepted.gh-132308: A
traceback.TracebackExceptionnow correctly renders the__context__and__cause__attributes from falseyException, and theexceptionsattribute from falseyExceptionGroup.gh-130645: Add colour to
argparsehelp output. Patch by Hugo van Kemenade.gh-127495: In PyREPL, append a new entry to the
PYTHON_HISTORYfile after every statement. This should preserve command-line history after interpreter is terminated. Patch by Sergey B Kirpichev.gh-129463: Comparison of
annotationlib.ForwardRefobjects no longer uses the internal__code__and__ast_node__attributes, which are used as caches.gh-132250: Fixed the
SystemErrorincProfilewhen locating the actual C function of a method raises an exception.gh-132064:
annotationlib.get_annotations()now uses the__annotate__attribute if it is present, even if__annotations__is not present. Additionally, the function now raises aTypeErrorif it is passed an object that does not have any annotatins.gh-130664: Support the
'_'digit separator in formatting of the integral part ofDecimal’s. Patch by Sergey B Kirpichev.gh-131952: Add color output to the json CLI. Patch by Tomas Roun.
gh-132063: Prevent exceptions that evaluate as falsey (namely, when their
__bool__method returnsFalseor their__len__method returns 0) from being ignored byconcurrent.futures.ProcessPoolExecutorandconcurrent.futures.ThreadPoolExecutor.gh-132106:
logging.handlers.QueueListenernow implements the context manager protocol, allowing it to be used in awithstatement.gh-132054: The
application/yamlmime type (RFC 9512) is now supported bymimetypes. Patch by Sasha “Nelie” Chernykh and Hugo van Kemenade.gh-119605: Respect
follow_wrappedfor__init__()and__new__()methods when getting the class signature for a class withinspect.signature(). Preserve class signature after wrapping withwarnings.deprecated(). Patch by Xuehai Pan.gh-118761: Improve import times by up to 33x for the
shlexmodule, and improve the performance ofshlex.quote()by up to 12x. Patch by Adam Turner.gh-85302: Add support for
BTPROTO_SCOin sockets on FreeBSD.gh-131757: Make
functools.lru_cache()call the cached function unlocked to allow concurrency.gh-131423:
sslcan show descriptions for errors added in OpenSSL 3.4.1. Patch by Bénédikt Tran.gh-131434: Improve error reporting for incorrect format in
time.strptime().gh-131524: Add help message to
platformcommand-line interface. Contributed by Harry Lees.gh-100926: Move
ctypes.POINTER()types cache from a global internal cache (_pointer_type_cache) to thectypes._CData.__pointer_type__attribute of the correspondingctypestypes. This will stop the cache from growing without limits in some situations.gh-85702: If
zoneinfo._common.load_tzdatais given a package without a resource aZoneInfoNotFoundErroris raised rather than aIsADirectoryError.gh-123471: Make concurrent iterations over
itertools.repeatsafe under free-threading.gh-131127: Systems using LibreSSL now successfully build.
gh-89157: Make the pure Python implementation of
datetime.date.fromisoformat(), only accept ASCII strings for consistency with the C implementation.gh-130941: Fix
configparser.ConfigParserparsing empty interpolation withallow_no_valueset toTrue.gh-110067: Make
heapqmax-heap functionsheapq.heapify_max(),heapq.heappush_max(),heapq.heappop_max(), andheapq.heapreplace_max()public. Previous underscored naming is kept for backwards compatibility. Additionally, the missing functionheapq.heappushpop_max()has been added to both the C and Python implementations.gh-129098: Fix REPL traceback reporting when using
compile()with an inexisting file. Patch by Bénédikt Tran.gh-130631:
http.cookiejar.join_header_words()is now more similar to the original Perl version. It now quotes the same set of characters and always quote values that end with"\n".gh-130482: Add ability to specify name for
tkinter.OptionMenuandtkinter.ttk.OptionMenu.gh-77065: Add keyword-only optional argument echo_char for
getpass.getpass()for optional visual keyboard feedback support. Patch by Semyon Moroz.gh-130317: Fix
PyFloat_Pack2()andPyFloat_Unpack2()for NaN’s with payload. This corrects round-trip forstruct.unpack()andstruct.pack()in case of the IEEE 754 binary16 “half precision” type. Patch by Sergey B Kirpichev.gh-130402: Joining running daemon threads during interpreter shutdown now raises
PythonFinalizationError.gh-130167: Improve speed of
difflib.IS_LINE_JUNK(). Patch by Semyon Moroz.gh-101410: Added more detailed messages for domain errors in the
mathmodule.gh-128384: Make
warnings.catch_warningsuse a context variable for holding the warning filtering state if thesys.flags.context_aware_warningsflag is set to true. This makes using the context manager thread-safe in multi-threaded programs. The flag is true by default in free-threaded builds and is otherwise false. The value of the flag can be overridden by the the-X context_aware_warningscommand-line option or by thePYTHON_CONTEXT_AWARE_WARNINGSenvironment variable.gh-129719: Fix missing
socket.CAN_RAW_ERR_FILTERconstant in the socket module on Linux systems. It was missing since Python 3.11.gh-129027: Raise
DeprecationWarningforsys._clear_type_cache(). This function was deprecated in Python 3.13 but it didn’t raise a runtime warning.gh-128307: Add
eager_startkeyword argument toasyncio.loop.create_task()gh-127604: Add support for printing the C stack trace on systems that support it via
faulthandler.dump_c_stack()or via the c_stack argument infaulthandler.enable().gh-127385: Add the
F_DUPFD_QUERYconstant to thefcntlmodule.gh-126838: Add resolve_host keyword-only parameter to
urllib.request.url2pathname(), and fix handling of file URLs with authorities.gh-82129: Fix
NameErrorwhen callingtyping.get_type_hints()on adataclasses.dataclass()created bydataclasses.make_dataclass()with un-annotated fields.gh-122559: Remove
__reduce__()and__reduce_ex__()methods that always raiseTypeErrorin the C implementation ofio.FileIO,io.BufferedReader,io.BufferedWriterandio.BufferedRandomand replace them with default__getstate__()methods that raiseTypeError. This restores fine details of behavior of Python 3.11 and older versions.gh-122179:
hashlib.file_digest()now raisesBlockingIOErrorwhen no data is available during non-blocking I/O. Before, it added spurious null bytes to the digest.gh-53032: Expose
decimal.IEEEContext()to support creation of contexts corresponding to the IEEE 754 (2008) decimal interchange formats. Patch by Sergey B Kirpichev.gh-120220: Deprecate the
tkinter.Variablemethodstrace_variable(),trace_vdelete()andtrace_vinfo(). Methodstrace_add(),trace_remove()andtrace_info()can be used instead.gh-113539:
webbrowser: Names in theBROWSERenvironment variable can now refer to already registered web browsers, instead of always generating a new browser command.This makes it possible to set
BROWSERto the value of one of the supported browsers on macOS.bpo-44172: Keep a reference to original
curseswindows in subwindows so that the original window does not get deleted before subwindows.gh-75223: Deprecate undotted extensions in
mimetypes.MimeTypes.add_type(). Patch by Hugo van Kemenade.
IDLE¶
gh-112936: fix IDLE: no Shell menu item in single-process mode.
Documentation¶
gh-107006: Move documentation and example code for
threading.localfrom 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:
-Jis 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
_colorizemodule.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 PIDcommand-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 aspython -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()andPyFloat_Unpack4()on RISC-V.gh-133197: Improve
SyntaxErrorerror messages for incompatible string / bytes prefixes.gh-133231: Add new utilities of observing JIT compilation:
sys._jit.is_available(),sys._jit.is_enabled(), andsys._jit.is_active().
Library¶
gh-133194:
ast.parse()will no longer parse new PEP 758 syntax with older feature_version passed.
Core and Builtins¶
gh-131798: Split
CALL_LENinto several uops allowing the JIT to remove them when optimizing. Patch by Diego Russo.gh-131798: Use
sym_new_typeinstead ofsym_new_not_nullfor _BUILD_STRING, _BUILD_SETgh-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_INTin JIT. Patch by Tomas Roungh-132952: Speed up startup with the
-Sargument by importing the private_iomodule instead ofio. 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_LENby setting the return type to int. Patch by Diego Russogh-131798: Split
CALL_TUPLE_1into several uops allowing the JIT to remove some of them. Patch by Tomas Roungh-131798: Split
CALL_STR_1into several uops allowing the JIT to remove some of them. Patch by Tomas Roungh-132825: Enhance unhashable key/element error messages for
dictandset. 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 callingrepr(item). Patch by Victor Stinner.gh-132661: Implement PEP 750 (Template Strings). Add new syntax for t-strings and implement new internal
string.templatelib.Templateandstring.templatelib.Interpolationtypes.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 aNonesecond 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¶
Core and Builtins¶
gh-132639: Added
PyLong_AsNativeBytes(),PyLong_FromNativeBytes()andPyLong_FromUnsignedNativeBytes()to the limited C API.gh-100239: Add specialisation for
BINARY_OP/SUBSCRon 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
warningsfilters.gh-132457: Make
staticmethod()andclassmethod()generic.gh-131798: Use
sym_new_typeinstead ofsym_new_not_nullfor _BUILD_LIST, _BUILD_SET, _BUILD_MAPgh-131798: Split
CALL_TYPE_1into several uops allowing the JIT to remove some of them.gh-132386: Fix crash when passing a dict subclass as the
globalsparameter toexec().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
PyCFunctionslots 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, whentype.__annotations__was deleted.gh-131798: Allow the JIT to remove an extra
_TO_BOOL_BOOLinstruction after_CONTAINS_OP_DICTby 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 thePy_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 ofwith(resp.async with). Patch by Bénédikt Tran.gh-131798: Allow the JIT to remove unicode guards after
_BINARY_OP_SUBSCR_STR_INTby 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-argumentpow()and the binary power operator.gh-130070: Fixed an assertion error for
exec()passed a stringsourceand a non-Noneclosure. 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:
elifstatements that follow anelseblock now have a specific error message.gh-69605: Add module autocomplete to PyREPL.
gh-128555: Add the
sys.flags.thread_inherit_contextflag.This flag is set to true by default on the free-threaded build and false otherwise. If the flag is true, starting a new thread using
threading.Threadwill, by default, use a copy of thecontextvars.Contextfrom the caller ofthreading.Thread.start()rather than using an empty context.Add the
-X thread_inherit_contextcommand-line option andPYTHON_THREAD_INHERIT_CONTEXTenvironment variable, which set thethread_inherit_contextflag.Add the
contextkeyword parameter toThread. It can be used to explicitly pass a context value to be used by a new thread.Make the
_contextvarsmodule built-in.
gh-123539: Improve
SyntaxErrormessage for usingimport ... asandfrom ... import ... aswith not a name.gh-102567:
-X importtimenow accepts value2, which indicates that animporttimeentry 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
TypeErroroccurs duringdict.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
hostflagsmember fromPySSLContextstruct.
C API¶
gh-133166: Fix regression where
PyType_GetModuleByDef()returns NULL without settingTypeErrorwhen a static type is passed.gh-133164: Add
PyUnstable_Object_IsUniqueReferencedTemporary()function for determining if an object exists as a unique temporary variable on the interpreter’s stack. This is a replacement for some cases where checking thatPy_REFCNT()is one is no longer sufficient to determine if it’s safe to modify a Python object in-place with no visible side effects.gh-133140: Add
PyUnstable_Object_IsUniquelyReferenced()as a replacement forPy_REFNCT(op) == 1on free threaded builds of Python.gh-131747: On non-Windows platforms, deprecate using
ctypes.Structure._pack_to use a Windows-compatible layout on non-Windows platforms. The layout should be specified explicitly by settingctypes.Structure._layout_to'ms'.gh-128972: For non-free-threaded builds, the memory layout of
PyASCIIObjectis reverted to match Python 3.13. (Note that the structure is not part of stable ABI and so its memory layout is guaranteed to remain stable.)gh-133079: The undocumented APIs
Py_C_RECURSION_LIMITandPyThreadState.c_recursion_remaining, added in 3.13, are removed without a deprecation period.gh-132987: The
kandKformats inPyArg_Parse()now support the__index__()special method, like all other integer formats.gh-132909: Fix an overflow when handling the K format in
Py_BuildValue(). Patch by Bénédikt Tran.gh-132798: Deprecated and undocumented functions
PyUnicode_AsEncodedObject(),PyUnicode_AsDecodedObject(),PyUnicode_AsEncodedUnicode()andPyUnicode_AsDecodedUnicode()are scheduled for removal in 3.15.gh-132470: Creating a
ctypes.CFieldwith a byte_size that does not match the actual type size now raises aValueErrorinstead of crashing the interpreter.gh-112068: [Reverted in gh-136991] Add support of nullable arguments in
PyArg_Parse()and similar functions. Adding?after any format unit makesNonebe accepted as a value.gh-50333: Non-tuple sequences are deprecated as argument for the
(items)format unit inPyArg_ParseTuple()and other argument parsing functions if items contains format units which store a borrowed buffer or a borrowed reference.
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_TARGETin target triples, ensuring that SDK version minimums are honored.gh-133167: Fix compilation process with
--enable-optimizationsand--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
PClayoutscript now allows passing--include-tcltkon 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¶
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_*andMB_*constants are added towinsound.gh-91349: Replaces our copy of
zlibwithzlib-ng, for performance improvements inzlib.gh-131025: Update Windows installer to ship with SQLite 3.49.1.
Tools/Demos¶
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_paramsis 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¶
gh-132174: Fix function name in error message of
_interpreters.run_string.gh-132171: Fix crash of
_interpreters.run_stringon string subclasses.gh-129204: Introduce new
_PYTHON_SUBPROCESS_USE_POSIX_SPAWNenvironment variable knob insubprocessto control the use ofos.posix_spawn().gh-132159: Do not shadow user arguments in generated
__new__()by decoratorwarnings.deprecated. Patch by Xuehai Pan.gh-132168: The
ctypes.py_objecttype now supports subscription, making it a generic type.gh-84481: Add the
zipfile.ZipFile.data_offsetattribute, which stores the offset to the beginning of ZIP data in a file when available. When thezipfile.ZipFileis opened in either mode'w'or'x'and the underlying file does not supporttell(), the value will beNoneinstead.gh-132075: Fix possible use of
socketaddress structures with uninitialized members. Now all structure members are initialized with zeroes by default.gh-118761: Improve import times by up to 27x for the
stringmodule. Patch by Adam Turner.gh-125434: Display thread name in
faulthandler. Patch by Victor Stinner.gh-132002: Fix crash when deallocating
contextvars.ContextVarwith weird unahashable string names.gh-131938:
xml.etree.ElementTree: update the error message when an element to remove viaElement.removeis not found. Patch by Bénédikt Tran.gh-115942: Add
threading.RLock.locked(),multiprocessing.Lock.locked(),multiprocessing.RLock.locked(), and allowmultiprocessing.managers.SyncManager.Lock()andmultiprocessing.managers.SyncManager.RLock()to proxylocked()call.gh-131974: Fix several thread-safety issues in
ctypeson the free threaded build.gh-118761: Improve the import time of the
astmodule by extracting theunparse()function to a helper module.gh-107369: Improved performance of
textwrap.indent()by an average of ~1.3x. Patch by Adam Turner.gh-131792: Improved performance of
textwrap.dedent()by an average of ~2.4x, (with improvements of up to 4x for large inputs), and fixed a bug where blank lines with whitespace characters other than space or horizontal tab were not normalised to the newline. Patch by Adam Turner, Marius Juston, and Pieter Eendebak.gh-131668:
socket: Fix code parsing AF_BLUETOOTH socket addresses.gh-60115: Support frozen modules for
linecache.getline().gh-131492: Fix a resource leak when constructing a
gzip.GzipFilewith a filename fails, for example when passing an invalidcompresslevel.gh-131435: 10-20% performance improvement of
random.randint().gh-131461: Fix
ResourceWarningwhen constructing agzip.GzipFilein write mode with a broken file object.gh-125866: Deprecate the
nturl2pathmodule. Callurllib.request.url2pathname()andpathname2url()instead.gh-126367: Fix issue where
urllib.request.url2pathname()raisedOSErrorwhen given a Windows URI containing a colon character not following a drive letter, such as before an NTFS alternate data stream.gh-120144: Disable
CALLevent inbdbinmonitoringbackend when we don’t need any new events on the code object to get a better performance.gh-131358: Register
cseuckras an encoding alias foreuc_kr.gh-131325: Fix sendfile fallback implementation to drain data after writing to transport in
asyncio.gh-90548:
platform.libc_ver()can now detect and report the version ofmuslon Alpine Linux.gh-129843: Fix incorrect argument passing in
warnings.warn_explicit().gh-70647: When creating a
datetimeobject with an out of range date a more informative error is raised.gh-130914: Allow
graphlib.TopologicalSorter.prepare()to be called more than once as long as sorting has not started. Patch by Daniel Pope.gh-131236: Allow to generate multiple UUIDs at once via
python -m uuid --count.gh-126895: Fix
readlinein free-threaded build.gh-121468:
$_asynctaskis added as apdbconvenience variable to access the current asyncio task if applicable.gh-118761: Improve import time of
localeusing lazy importre. Patch by Semyon Moroz.gh-129598: Fix
ast.unparse()whenast.Interactivecontains multiple statements.gh-85162: The
http.servermodule now includes built-in support for HTTPS servers exposed byhttp.server.HTTPSServer. This functionality is exposed by the command-line interface (python -m http.server) through the--tls-cert,--tls-keyand--tls-password-fileoptions. Patch by Semyon Moroz.gh-129463: The implementations of equality and hashing for
annotationlib.ForwardRefnow use all attributes on the object. TwoForwardRefobjects are equal only if all attributes are equal.gh-128593:
annotationlib.ForwardRefobjects no longer cache their value when they are successfully evaluated. Successive calls toannotationlib.ForwardRef.evaluate()may return different values.gh-117779: Fix reading duplicated entries in
zipfileby name. Reading duplicated entries (except the last one) byZipInfonow emits a warning instead of raising an exception.gh-128715: The class of
Structure/Unionfield descriptors is now available asCField, and has new attributes to aid debugging and introspection.gh-128055: Fix
test.test_sysconfig.test_sysconfigdata_jsonwhen running outside the build directory (eg. after installing).gh-126037:
xml.etree.ElementTree: Fix a crash inElement.find,Element.findtextandElement.findallwhen the tag to find implements an__eq__()method mutating the element being queried. Patch by Bénédikt Tran.gh-127794: When headers are added to
email.message.Messageobjects, either throughemail.message.Message.__setitem__()oremail.message.Message.add_header(), the field name is now validated according to RFC 5322, Section 2.2 and aValueErroris raised if the field name contains any invalid characters.gh-123599: Deprecate
pathlib.PurePath.as_uri(); usepathlib.Path.as_uri()instead.gh-126033:
xml.etree.ElementTree: Fix a crash inElement.removewhen the element is concurrently mutated. Patch by Bénédikt Tran.gh-120144: Add the optional backend of
sys.monitoringtobdband use it forpdb.gh-74598: Add
fnmatch.filterfalse()for excluding names matching a pattern. Patch by Bénédikt Tran.gh-114917: Add support for AI_NUMERICSERV in getaddrinfo emulation
bpo-17254: Added aliases for Thai Language using Microsoft Code Pages.
Documentation¶
gh-131417: Mention
asyncio.Futureandasyncio.Taskin generic classes list.
Core and Builtins¶
gh-131798: Allow the JIT to remove an extra
_TO_BOOL_BOOLinstruction after_CONTAINS_OP_SETby 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 thesysmodule. 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_FreeDelayedin free-threaded build.gh-131670: Fix
anext()failing on sync__anext__()raising an exception.gh-131666: Fix signature of
anext_awaitable.closeobjects. 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()andPyLong_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
columnandend_columninastlocations.gh-130704: Optimize
LOAD_FASTand 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¶
Core and Builtins¶
gh-130080: Implement PEP 765: Disallow return/break/continue that exit a finally block.
gh-129900: Fix return codes inside
SystemExitnot 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
rangeby using a freelist.
C API¶
Build¶
gh-131865: The DTrace build now properly passes the
CCandCFLAGSvariables to thedtracecommand when utilizing SystemTap on Linux.gh-131675: Fix mimalloc library builds for 32-bit ARM targets.
gh-131691: clang-cl on Windows needs option
/EHato support SEH (structured exception handling) correctly. Fix by Chris Eibl.gh-131278: Add optimizing flag
WITH_COMPUTED_GOTOSto 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
KeyErrorwhen handling object sections during JIT building process.
Python 3.14.0 alpha 6¶
Release date: 2025-03-14
macOS¶
gh-128540: Ensure web browser is launched by
webbrowser.open()on macOS, even forfile://URLs.
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
msgctxtwhen compiling messages in msgfmt.gh-130453: Extend support for specifying custom keywords in pygettext.
gh-130195: Add warning messages when
pygettextunimplemented-a/--extract-alloption 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
TERMvariable in the testing environment.gh-129401: Fix a flaky test in
test_repr_rlockthat checks the representation ofmultiprocessing.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¶
gh-131204: Use monospace font from System Font Stack for cross-platform support in
difflib.HtmlDiff.gh-131196: Improve performance of
uuid.UUID.hexanduuid.UUID.__str__.gh-130940: The behavior of
PyConfig.use_system_loggerwas modified to be enabled by default on iOS. It remains disabled by default on macOS.gh-131123: Supported completions for attributes of convenience variables in
pdb.gh-93096: Removed undocumented CLI
python -m difflib. Usepython -m doctest Lib/difflib.py -vinstead. Patch by Semyon Moroz.gh-93096: Removed undocumented
-tand-varguments ofpython -m pickle. Usepython -m doctest Lib/pickle.py -vinstead. Patch by Semyon Moroz.gh-81267: Correct
time.sleep()error message when an object that cannot be interpreted as an integer or float is provided.gh-93096: Removed undocumented
-tand-varguments ofpython -m pickletools. Usepython -m doctest Lib/pickletools.py -vinstead. Patch by Semyon Moroz.gh-131045: Fix issue with
__contains__, values, and pseudo-members forenum.Flag.gh-130959: Fix pure-Python implementation of
datetime.time.fromisoformat()to reject times with spaces in fractional part (for example,12:34:56.400 +02:00), matching the C implementation. Patch by Michał Gorny.gh-130806: Deleting
gzip.GzipFilebefore it is closed now emits aResourceWarning.gh-130637: Add validation for numeric response data in poplib.POP3.stat() method
gh-130665: Only apply locale to calendar CLI when set via
--localeand not viaLANGenvironment variable.gh-130660:
sys.ps1andsys.ps2are now restored aftercode.interact()call.gh-130608: Remove dirs_exist_ok argument from
pathlib.Path.copy()andcopy_into(). These methods are new in Python 3.14.gh-130461: Remove
.. index::directives from theuuidmodule documentation. These directives previously created entries in the general index forgetnode()as well as theuuid1(),uuid3(),uuid4(),uuid5(), anduuid8()constructor functions.gh-130379: The zipapp module now calculates the list of files to be added to the archive before creating the archive. This avoids accidentally including the target when it is being created in the source directory.
gh-82987: Inline breakpoints like
breakpoint()orpdb.set_trace()will always stop the program at calling frame, ignoring theskippattern (if any).gh-125377:
<tab>at the beginning of the line inpdbmulti-line input will fill in a 4-space indentation now, instead of inserting a\tcharacter.gh-125413: Ensure the path returned from
pathlib.Path.copy()ormove()has freshinfo.gh-65697: stdlib configparser will now attempt to validate that keys it writes will not result in file corruption (creating a file unable to be accurately parsed by a future read() call from the same parser). Attempting a corrupting write() will raise an InvalidWriteError.
gh-125413: Speed up
Path.copyby making better use ofinfointernally.gh-130285: Fix corner case for
random.sample()allowing the counts parameter to specify an empty population. So now,sample([], 0, counts=[])andsample('abc', k=0, counts=[0, 0, 0])both give the same result assample([], 0).gh-124703: Executing
quitcommand inpdbwill raisebdb.BdbQuitwhenpdbis started from an interactive console usingbreakpoint()orpdb.set_trace().gh-107773: Make
datetimesubclass__repr__()consistent both implementations. Patch by Semyon Moroz.gh-130250: Fix regression in
traceback.print_last().gh-123471: Make concurrent iterations over
itertools.batchedsafe under free-threading.gh-130230: Fix crash in
pow()with onlyDecimalthird argument.gh-126944: Show explicit errors when required arguments of
pdbcommands are missinggh-127750: Improve repr of
functools.singledispatchmethodmethods and descriptors.gh-128520: Apply type conversion consistently in
pathlib.PurePathandPathmethods can accept a path object as an argument, such asmatch()andrename(). The argument is now converted to path object if it lacks awith_segments()attribute, and not otherwise.gh-118761: Reverts a change in the previous release attempting to make some stdlib imports used within the
subprocessmodule lazy as this was causing errors during__del__finalizers calling methods such asterminate, orkill, orsend_signal.gh-130164: Fixed failure to raise
TypeErrorininspect.Signature.bind()for positional-only arguments provided by keyword when a variadic keyword argument (e.g.**kwargs) is present.gh-130151: Fix reference leaks in
_hashlib.hmac_new()and_hashlib.hmac_digest(). Patch by Bénédikt Tran.gh-130145: Fix
asyncio.AbstractEventloop.run_forever()when another loop is already running.gh-130139: Fix bug where
ast.parse()did not error on AST input which is not of the correct type, when called with optimize=False.gh-127260: Forbid the use of colon (“:”) as a fractional component separator and other improvements to the consistency of error raising between the C and Python implementations of
datetime.time.fromisoformat()anddatetime.datetime.fromisoformat(). Patch by Semyon Moroz.gh-85795: Using
super()and__class__closure variable in user-defined methods oftyping.NamedTuplesubclasses is now explicitly prohibited at runtime. Contributed by Bartosz Sławecki in gh-130082.gh-118761: Improve import time of
cmdby lazy importinginspectand removingstring. Patch by Semyon Moroz.gh-129726: Fix
gzip.GzipFileraising an unraisable exception during garbage collection when referring to a temporary object by breaking the reference loop withweakref.gh-127750: Remove broken
functools.singledispatchmethod()caching introduced in gh-85160. Achieve the same performance using different optimization.gh-129948: Add support for shared
settomultiprocessing.managers.SyncManagerviaSyncManager.set().gh-129965: Update MIME types for
.aviand.wav. Add MIME types for.docx,.pptx,.xlsx,.epub,.flac,.m4a,.odg,.odp,.ods,.odt,.oga,.ogg,.ogxand.weba. Patch by Hugo van Kemenade.gh-129889: Support context manager protocol by
contextvars.Token. Patch by Andrew Svetlov.gh-97850: Update the deprecation warning of
importlib.abc.Loader.load_module().gh-129678:
configparser.ConfigParser: do not write an empty unnamed sectiongh-128641: Restore
configparser.ConfigParser.read()performance.gh-129569: Fix
unicodedata.normalize()to always return a built-instrobject when given an input of astrsubclass, regardless of whether the string is already normalized.gh-128231: Execution of multiple statements in the new REPL now stops immediately upon the first exception encountered. Patch by Bartosz Sławecki.
gh-96092: Fix bug in
traceback.walk_stack()called with None where it was skipping more frames than in prior versions. This bug fix also changes walk_stack to walk the stack in the frame where it was called rather than where it first gets used.gh-129288: Add optional
l2_cidandl2_bdaddr_typefields tosocketBTPROTO_L2CAPsockaddr tuple.gh-128703: Fix
mimetypes.guess_type()to use default mapping for emptyContent-Typein registry.gh-128647: Eagerly write to buffers passed to
gzip.GzipFile’sreadinto()andreadinto1()implementations, avoiding unnecessary allocations. Patch by Chris Markiewicz.gh-128184: Improve display of
annotationlib.ForwardRefobject withininspect.Signaturerepresentations. This also fixes aNameErrorthat was raised when usingdataclasses.dataclass()on classes with unresolvable forward references.gh-128041: Add
concurrent.futures.ProcessPoolExecutor.terminate_workers()andconcurrent.futures.ProcessPoolExecutor.kill_workers()as ways to terminate or kill all living worker processes in the given pool. (Contributed by Charles Machalow in gh-130849.)gh-127647: Add protocols
io.Readerandio.Writeras alternatives totyping.IO,typing.TextIO, andtyping.BinaryIO.gh-109798: Added additional information into error messages in
datetime, and made the messages more consistent between the C and Python implementations. Patch by Semyon Moroz.gh-125746: Delay deprecated
zipimport.zipimporter.load_module()removal time to 3.15. Usezipimport.zipimporter.exec_module()instead.gh-74028: Add the optional
buffersizeparameter toconcurrent.futures.Executor.map()to limit the number of submitted tasks whose results have not yet been yielded. If the buffer is full, iteration over the iterables pauses until a result is yielded from the buffer.gh-124927: Non-printing characters are now properly handled in the new REPL.
gh-124096: Turn on virtual terminal mode and enable bracketed paste in REPL on Windows console. (If the terminal does not support bracketed paste, enabling it does nothing.)
gh-89083: Add
uuid.uuid7()for generating UUIDv7 objects as specified in RFC 9562. Patch by Bénédikt Tran.gh-89083: Add
uuid.uuid6()for generating UUIDv6 objects as specified in RFC 9562. Patch by Bénédikt Tran.gh-117151: Increase
io.DEFAULT_BUFFER_SIZEfrom 8k to 128k and adjustopen()on platforms whereos.fstat()provides ast_blksizefield (such as Linux) to usemax(min(blocksize, 8 MiB), io.DEFAULT_BUFFER_SIZE)rather than always using the device block size. This should improve I/O performance. Patch by Romain Morotti.gh-105499: Make
types.UnionTypean alias fortyping.Union. Bothint | strandUnion[int, str]now create instances of the same type. Patch by Jelle Zijlstra.gh-93096: Document the command-line for
mimetypes. It now exits with1on failure instead of0and2on incorrect command-line parameters instead of1. Also, errors are printed to stderr instead of stdout and their text is made tighter. Patch by Oleg Iarygin and Hugo van Kemenade.
Documentation¶
gh-125722: Require Sphinx 8.2.0 or later to build the Python documentation. Patch by Adam Turner.
gh-129712: The wheel tags supported by each macOS universal SDK option are now documented.
gh-46236: C API: Document
PyUnicode_RSplit(),PyUnicode_Partition()andPyUnicode_RPartition().
Core and Builtins¶
gh-131141: Fix data race in
sys.monitoringinstrumentation while registering callback.gh-130804: Fix support of unicode characters on Windows in the new REPL.
gh-130932: Fix incorrect exception handling in
_PyModule_IsPossiblyShadowinggh-122029:
sys.setprofile()andsys.settrace()will not generate ac_callevent forINSTRUMENTED_CALL_FUNCTION_EXif the callable is a method with a C function wrapped, because we do not generatec_returnevent 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
codeobject withco_conststhat 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 forloops. Add these branches to theco_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_DESTROYnot being sent fromPython/ceval.cPy_DECREF().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
UnicodeDecodeErrororSystemErrorto be raised when using f-strings withlambdaexpressions with non-ASCII characters. Patch by Pablo Galindogh-123044: Make sure that the location of branch targets in
matchcases is in the body, not the pattern.gh-128534: Add branch monitoring (
BRANCH_LEFTandBRANCH_RIGHTevents) forasync forloops.gh-130163: Fix possible crashes related to concurrent change and use of the
sysmodule attributes.gh-122029:
INSTRUMENTED_CALL_KWwill 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_SOURCEdefined, 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
bytearrayfunctions 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
bytearrayiterator 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.jsonfile 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 withset.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
ifor after anelsekeyword.gh-129349:
bytes.fromhex()andbytearray.fromhex()now accepts ASCIIbytesand bytes-like objects.gh-129149: Add fast path for medium-size integers in
PyLong_FromSsize_t(). Patch by Chris Eibl.gh-129107: Make the
bytearraysafe 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.TypeAliasTypenow supports star unpacking.gh-125331:
from __future__ import barry_as_FLUFLnow works in more contexts, including when it is used in files, with the-cflag, 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 tocompile(). 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.ParamSpecand have been specialized with a nested type variable.gh-120608: Adapt
reversed()for use in the free-threading build. Thereversed()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¶
gh-111178: Fix
PyCMethodAPI: replacesize_t nargswithPy_ssize_t nargsinPyCMethod. Patch by Victor Stinner.gh-130947: Add again
PySequence_Fast()to the limited C API. Patch by Victor Stinner.gh-128863: The following private functions are deprecated and planned for removal in Python 3.18:
_PyUnicodeWriter_Init(): replace_PyUnicodeWriter_Init(&writer)withwriter = PyUnicodeWriter_Create(0)._PyUnicodeWriter_Finish(): replace_PyUnicodeWriter_Finish(&writer)withPyUnicodeWriter_Finish(writer)._PyUnicodeWriter_Dealloc(): replace_PyUnicodeWriter_Dealloc(&writer)withPyUnicodeWriter_Discard(writer)._PyUnicodeWriter_WriteChar(): replace_PyUnicodeWriter_WriteChar(&writer, ch)withPyUnicodeWriter_WriteChar(writer, ch)._PyUnicodeWriter_WriteStr(): replace_PyUnicodeWriter_WriteStr(&writer, str)withPyUnicodeWriter_WriteStr(writer, str)._PyUnicodeWriter_WriteSubstring(): replace_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)withPyUnicodeWriter_WriteSubstring(writer, str, start, end)._PyUnicodeWriter_WriteASCIIString(): replace_PyUnicodeWriter_WriteASCIIString(&writer, str)withPyUnicodeWriter_WriteUTF8(writer, str)._PyUnicodeWriter_WriteLatin1String(): replace_PyUnicodeWriter_WriteLatin1String(&writer, str)withPyUnicodeWriter_WriteUTF8(writer, str)._PyUnicodeWriter_Prepare(): (no replacement)._PyUnicodeWriter_PrepareKind(): (no replacement).
The pythoncapi-compat project can be used to get these new public functions on Python 3.13 and older.
Patch by Victor Stinner.
gh-45325: Add a new
pformat parameter toPy_BuildValue()that allows to take a C integer and produce a Pythonboolobject. Patch by Pablo Galindo.
Build¶
gh-131035: Use
-flto=thinfor faster build times using clang-cl on Windows. Patch by Chris Eibl.gh-130740: Ensure that
Python.his included beforestdbool.hunlesspyconfig.his included before or in some platform-specific contexts.gh-130090: Building with
PlatformToolset=ClangCLon 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-interpwas provided to the configure script.gh-129838: Don’t redefine
_Py_NO_SANITIZE_UNDEFINEDwhen compiling with a recent GCC version and undefined sanitizer enabled.gh-82909:
#pragma-based linking withpython3*.libcan 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