Changelog¶
Python next¶
Release date: XXXX-XX-XX
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
macOS¶
gh-91132: Update macOS installer to use ncurses 6.5.
Tools/Demos¶
Tests¶
gh-129386: Add
test.support.reset_code, which can be used to reset various bytecode-level optimizations and local instrumentation for a function.gh-128474: Disable
test_embedtest cases that segfault on BOLT instrument binaries. The tests are only disabled when BOLT is enabled.gh-128003: Add an option
--parallel-threads=Nto the regression test runner that runs individual tests in multiple threads in parallel in order to find concurrency bugs. Note that most of the test suite is not yet reviewed for thread-safety or annotated with@thread_unsafewhen necessary.
Security¶
gh-105704: When using
urllib.parse.urlsplit()andurllib.parse.urlparse()host parsing would not reject domain names containing square brackets ([and]). Square brackets are only valid for IPv6 and IPvFuture hosts according to RFC 3986 Section 3.2.2.gh-126108: Fix a possible
NULLpointer dereference inPySys_AddWarnOptionUnicode().gh-80222: Fix bug in the folding of quoted strings when flattening an email message using a modern email policy. Previously when a quoted string was folded so that it spanned more than one line, the surrounding quotes and internal escapes would be omitted. This could theoretically be used to spoof header lines using a carefully constructed quoted string if the resulting rendered email was transmitted or re-parsed.
gh-119511: Fix a potential denial of service in the
imaplibmodule. When connecting to a malicious server, it could cause an arbitrary amount of memory to be allocated. On many systems this is harmless as unused virtual memory is only a mapping, but if this hit a virtual address size limit it could lead to aMemoryErroror other process crash. On unusual systems or builds where all allocated memory is touched and backed by actual ram or storage it could’ve consumed resources doing so until similarly crashing.
Library¶
gh-129939: Comparison pages with highlighted changes generated by the
difflib.HtmlDiffclass now support dark mode.gh-129928: Raise
sqlite3.ProgrammingErrorif a user-defined SQL function with invalid number of parameters is created. Patch by Erlend Aasland.gh-129583: Update bundled pip to 25.0.1
gh-129766: Fix crash in
warnings, when calling_release_lock()with no existing lock.gh-129005:
_pyio.FileIO.readall()now allocates, resizes, and fills a data buffer using the same algorithm_io.FileIO.readall()uses.gh-129646: Update the locale alias mapping in the
localemodule to match the latest X Org locale alias mapping and support new locales in Glibc 2.41.gh-128317: Put CLI calendar highlighting in private class, removing
highlight_dayfrom publiccalendar.TextCalendarAPI. Patch by Hugo van Kemenade.gh-129603: Fix bugs where
sqlite3.Rowobjects could segfault if their inheriteddescriptionwas set toNone. Patch by Erlend Aasland.gh-129559: Add
bytearray.resize()method sobytearraycan be efficiently resized in place.gh-129502: Unlikely errors in preparing arguments for
ctypescallback are now handled in the same way as errors raised in the callback of in converting the result of the callback – usingsys.unraisablehook()instead ofsys.excepthook()and not settingsys.last_excand other variables.gh-129403: Corrected
ValueErrormessage forasyncio.Barrierandthreading.Barrier.gh-129409: Fix an integer overflow in the
csvmodule when writing a data field larger than 2GB.gh-126400: Add a socket timeout keyword argument to
logging.handlers.SysLogHandler.gh-118761: Always lazy import
warningsinthreading. Patch by Taneli Hukkinen.gh-118761: Improve import time of
subprocessby lazy importinglocaleandsignal. Patch by Taneli Hukkinen.gh-129346: In
sqlite3, handle out-of-memory when creating user-defined SQL functions.gh-129005: Optimize
_pyio.FileIO.readintoby avoiding unnecessary objects and copies usingos.readinto().gh-129195: Support reporting call graph information from
asyncio.staggered.staggered_race().gh-129205: Add
os.readinto()to read into a buffer object from a file descriptor.gh-128772: Fix
pydocfor methods with the__module__attribute equal toNone.gh-129061: Fix FORCE_COLOR and NO_COLOR when empty strings. Patch by Hugo van Kemenade.
gh-92897: Scheduled the deprecation of the
check_homeargument ofsysconfig.is_python_build()to Python 3.15.gh-129064: Deprecate
sysconfig.expand_makefile_vars(), in favor of usingsysconfig.get_paths()with thevarsargument.gh-128550: Removed an incorrect optimization relating to eager tasks in
asyncio.TaskGroupthat resulted in cancellations being missed.gh-128991: Release the enter frame reference within
bdbcallbackgh-118761: Reduce import time of
pstatsandzipfileby up to 20%, by removing unnecessary imports totyping. Patch by Bénédikt Tran.gh-128978: Fix a
NameErrorinsysconfig.expand_makefile_vars(). Patch by Bénédikt Tran.gh-128961: Fix a crash when setting state on an exhausted
array.arrayiterator.gh-128894: Fix
traceback.TracebackException._format_syntax_errornot to fail on exceptions with custom metadata.gh-128916: Do not attempt to set
SO_REUSEPORTon sockets of address families other thanAF_INETandAF_INET6, as it is meaningless with these address families, and the call with fail with Linux kernel 6.12.9 and newer.gh-118761: Improve import time of
tomllibby removingtyping,string, andtomllib._typesimports. Patch by Taneli Hukkinen.gh-128679:
tracemalloc: Fix race conditions whentracemalloc.stop()is called by a thread, while other threads are tracing memory allocations. Patch by Victor Stinner.gh-128891: Add specialized opcodes to
opcode.opname.gh-118761: Reduce import time of
gettextby up to ten times, by importingreon demand. In particular,reis no longer implicitly exposed asgettext.re. Patch by Eli Schwartz.gh-118761: Reduce the import time of
optparsewhen no help text is printed. Patch by Eli Schwartz.gh-128657: Fix possible extra reference when using objects returned by
hashlib.sha256()under free threading.gh-118761: Reduce the import time of
csvby up to five times, by importingreon demand. In particular,reis no more implicitly exposed ascsv.re. Patch by Bénédikt Tran.gh-128308: Support the name keyword argument for eager tasks in
asyncio.loop.create_task(),asyncio.create_task()andasyncio.TaskGroup.create_task(), by passing on all kwargs to the task factory set byasyncio.loop.set_task_factory().gh-118761: Improve the performance of
base64.b16decode()by up to ten times by more efficiently checking the byte-string for hexadecimal digits. Reduce the import time ofbase64by up to six times, by no longer importingre. Patch by Bénédikt Tran, Chris Markiewicz, and Adam Turner.gh-128156: When using macOS system
libffi, support for complex types inctypesis now checked at runtime (macOS 10.15 or newer). The types must also be available at build time.gh-128636: Fix PyREPL failure when
os.environis overwritten with an invalid value.gh-128498: Default to stdout isatty for color detection instead of stderr. Patch by Hugo van Kemenade.
gh-128384: Add locking to
warningsto avoid some data races when free-threading is used. Change_warnings_runtime_state.mutexto be a recursive mutex and expose it towarnings, via the_acquire_lock()and_release_lock()functions. The lock is held whenfiltersand_filters_versionare updated.gh-128509: Add
sys._is_immortal()for identifying immortal objects at runtime.gh-128479: Fix
asyncio.staggered.staggered_race()leaking tasks and issuing an unhandled exception.gh-128427:
uuid.NILanduuid.MAXare now available to represent the Nil and Max UUID formats as defined by RFC 9562.gh-91279:
zipfile.ZipFile.writestr()now respectSOURCE_DATE_EPOCHthat distributions can set centrally and have build tools consume this in order to produce reproducible output.gh-112064: Fix incorrect handling of negative read sizes in
HTTPResponse.read. Patch by Yury Manushkin.gh-128131: Completely support random access of uncompressed unencrypted read-only zip files obtained by
ZipFile.open.gh-127975: Avoid reusing quote types in
ast.unparse()if not needed.gh-115514: Fix exceptions and incomplete writes after
asyncio._SelectorTransportis closed before writes are completed.gh-121604: Add missing Deprecation warnings for
importlib.machinery.DEBUG_BYTECODE_SUFFIXES,importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES,importlib.machinery.WindowsRegistryFinder,importlib.abc.ResourceLoader,importlib.abc.SourceLoader.path_mtime().gh-127873: When
-Eis set, only ignorePYTHON_COLORSand notFORCE_COLOR/NO_COLOR/TERMwhen colourising output. Patch by Hugo van Kemenade.gh-125413: Add
pathlib.Path.infoattribute, which stores an object implementing thepathlib.types.PathInfoprotocol (also new). The object supports querying the file type and internally cachingstat()results. Path objects generated byiterdir()are initialized with file type information gleaned from scanning the parent directory.gh-127712: Fix handling of the
secureargument oflogging.handlers.SMTPHandler.gh-127096: Do not recreate unnamed section on every read in
configparser.ConfigParser. Patch by Andrey Efremov.gh-124369: Deprecate
pdb.Pdb.curframe_localsgh-126332: Fix _pyrepl crash when entering a double CTRL-Z on an overflowing line.
gh-125553: Fix round-trip invariance for backslash continuations in
tokenize.untokenize().gh-91048: Add
asyncio.capture_call_graph()andasyncio.print_call_graph()functions.gh-124703: Quitting
pdbininlinemode will emit a confirmation prompt and exit gracefully now, instead of printing an exception traceback.gh-123987: Fixed issue in NamespaceReader where a non-path item in a namespace path, such as a sentinel added by an editable installer, would break resource loading.
gh-119349: Add the
ctypes.util.dllist()function to list the loaded shared libraries for the current process.gh-55454: Add IMAP4
IDLEsupport to theimaplibmodule. Patch by Forest.gh-119257: Show tab completions menu below the current line, which results in less janky behaviour, and fixes a cursor movement bug. Patch by Daniel Hollas
gh-101410: Support custom messages for domain errors in the
mathmodule (math.sqrt(),math.log()andmath.atanh()were modified as examples). Patch by Charlie Zhao and Sergey B Kirpichev.gh-81340: Use
os.copy_file_range()inshutil.copy(),shutil.copy2(), andshutil.copyfile()functions by default. An underlying Linux system call gives filesystems an opportunity to implement the use of copy-on-write (in case of btrfs and XFS) or server-side copy (in the case of NFS.) Patch by Illia Volochii.bpo-27307: Add attribute and item access support to
string.Formatterin auto-numbering mode, which allows format strings like ‘{.name}’ and ‘{[1]}’.
IDLE¶
gh-129873: Simplify displaying the IDLE doc by only copying the text section of idle.html to idlelib/help.html. Patch by Stan Ulbrych.
Documentation¶
gh-125722: Require Sphinx 8.1.3 or later to build the Python documentation. Patch by Adam Turner.
gh-67206: Document that
string.printableis not printable in the POSIX sense. In particular,string.printable.isprintable()returnsFalse. Patch by Bénédikt Tran.
Core and Builtins¶
gh-100239: Replace the opcode BINARY_SUBSCR and its family by BINARY_OP with oparg NB_SUBSCR.
gh-129732: Fixed a race in
_Py_qsbr_reservein the free threading build.gh-129763: Remove the internal
LLTRACEmacro (usePy_DEBUGinstead).gh-129715: Improve JIT performance for generators.
gh-129643: Fix thread safety of
PyList_Insert()in free-threading builds.gh-129668: Fix race condition when raising
MemoryErrorin the free threaded build.gh-129643: Fix thread safety of
PyList_SetItem()in free-threading builds. Patch by Kumar Aditya.gh-128563: Fix an issue where the “lltrace” debug feature could have been incorrectly enabled for some frames.
gh-129393: On FreeBSD,
sys.platformdoesn’t contain the major version anymore. It is always'freebsd', instead of'freebsd13'or'freebsd14'.
Library¶
gh-129345: Fix null pointer dereference in
syslog.openlog()when an audit hook raises an exception.
Core and Builtins¶
gh-129231: Improve memory layout of JIT traces. Patch by Diego Russo
gh-129149: Add fast path for medium-size integers in
PyLong_FromUnsignedLong(),PyLong_FromUnsignedLongLong()andPyLong_FromSize_t().gh-129201: The free-threaded version of the cyclic garbage collector has been optimized to conditionally use CPU prefetch instructions during the collection. This can reduce collection times by making it more likely that data is in the CPU cache when it is needed. The prefetch instructions are enabled if the number of long-lived objects (objects surviving a full collection) exceeds a threshold.
gh-129093: Fix f-strings such as
f'{expr=}'sometimes not displaying the full expression when the expression contains!=.gh-124363: Treat debug expressions in f-string as raw strings. Patch by Pablo Galindo
gh-128714: Fix the potential races in get/set dunder methods
__annotations__,__annotate__and__type_params__for function object, and add related tests.gh-128799: Add frame of
except*to traceback when it wraps a naked exception.gh-128842: Collect JIT memory stats using pystats. Patch by Diego Russo.
gh-100239: Specialize
BINARY_OPfor bitwise logical operations on compact ints.gh-128910: Undocumented and unused private C-API functions
_PyTrash_beginand_PyTrash_endare removed.gh-128807: Add a marking phase to the free-threaded GC. This is similar to what was done in gh-126491. Since the free-threaded GC does not have generations and is not incremental, the marking phase looks for all objects reachable from known roots. The roots are objects known to not be garbage, like the module dictionary for
sys. For most programs, this marking phase should make the GC a bit faster since typically less work is done per object.gh-100239: Add opcode
BINARY_OP_EXTENDwhich executes a pair of functions (guard and specialization functions) accessed from the inline cache.gh-128563: A new type of interpreter has been added to CPython. This interpreter uses tail calls for its instruction handlers. Preliminary benchmark results suggest 7-11% geometric mean faster on pyperformance (depending on platform), and up to 30% faster on Python-intensive workloads. This interpreter currently only works on newer compilers, such as
clang-19. Other compilers will continue using the old interpreter. Patch by Ken Jin, with ideas on how to implement this in CPython by Mark Shannon, Garret Gu, Haoran Xu, and Josh Haberman.gh-126703: Improve performance of iterating over lists and tuples by using a freelist for the iterator objects.
gh-127953: The time to handle a
LINEevent in sys.monitoring (and sys.settrace) is now independent of the number of lines in the code object.gh-128330: Restore terminal control characters on REPL exit.
gh-128016: Improved the
SyntaxWarningmessage for invalid escape sequences to clarify that such sequences will raise aSyntaxErrorin future Python releases. The new message also suggests a potential fix, i.e.,Did you mean "\\e"?.gh-126004: Fix handling of
UnicodeError.startandUnicodeError.endvalues in thecodecs.replace_errors()error handler. Patch by Bénédikt Tran.gh-126004: Fix handling of
UnicodeError.startandUnicodeError.endvalues in thecodecs.backslashreplace_errors()error handler. Patch by Bénédikt Tran.gh-126004: Fix handling of
UnicodeError.startandUnicodeError.endvalues in thecodecs.xmlcharrefreplace_errors()error handler. Patch by Bénédikt Tran.gh-127349: Fixed the error when resizing terminal in Python REPL. Patch by Semyon Moroz.
gh-125723: Fix crash with
gi_frame.f_localswhen generator frames outlive their generator. Patch by Mikhail Efimov.
Library¶
gh-126349: Add
turtle.fill(),turtle.poly()andturtle.no_animation()context managers. Patch by Marie Roald and Yngve Mardal Moe.
Core and Builtins¶
gh-115911: If the current working directory cannot be determined due to permissions, then import will no longer raise
PermissionError. Patch by Alex Willmer.
Library¶
gh-112713: Added support for the
Partitionedcookie flag inhttp.cookies.
C API¶
gh-129533: Update
PyGC_Enable(),PyGC_Disable(),PyGC_IsEnabled()to use atomic operation for thread-safety at free-threading build. Patch by Donghee Na.gh-89188: Implement
PyUnicode_KIND()andPyUnicode_DATA()as function, in addition to the macros with the same names. The macros rely on C bit fields which have compiler-specific layout. Patch by Victor Stinner.gh-91417: Remove
PySequence_Fast()from the limited C API, since this function has to be used withPySequence_Fast_GET_ITEMwhich never worked in the limited C API. Patch by Victor Stinner.gh-128509: Add
PyUnstable_IsImmortal()for determining whether an object is immortal.gh-129033: Remove
_PyInterpreterState_GetConfigCopy()and_PyInterpreterState_SetConfig()private functions. Use insteadPyConfig_Get()andPyConfig_Set(), public C API added by PEP 741 “Python Configuration C API”. Patch by Victor Stinner.gh-129033: Remove the private
_Py_InitializeMain()function. It was a provisional API added to Python 3.8 by PEP 587. Patch by Victor Stinner.gh-128844: Add
PyUnstable_TryIncRef()andPyUnstable_EnableTryIncRef()unstable APIs. These are helpers for dealing with unowned references in a thread-safe way, particularly in the free threading build.gh-128911: Add
PyImport_ImportModuleAttr()andPyImport_ImportModuleAttrString()helper functions to import a module and get an attribute of the module. Patch by Victor Stinner.gh-128863: The following private functions are deprecated and planned for removal in Python 3.18:
_PyBytes_Join(): usePyBytes_Join()._PyDict_GetItemStringWithError(): usePyDict_GetItemStringRef()._PyDict_Pop(): usePyDict_Pop()._PyLong_Sign(): usePyLong_GetSign()._PyLong_FromDigits()and_PyLong_New(): usePyLongWriter_Create()._PyThreadState_UncheckedGet(): usePyThreadState_GetUnchecked()._PyUnicode_AsString(): usePyUnicode_AsUTF8()._Py_HashPointer(): usePy_HashPointer()._Py_fopen_obj(): usePy_fopen().
The pythoncapi-compat project can be used to get these new public functions on Python 3.13 and older.
Patch by Victor Stinner.
gh-126599: Remove some internal test APIs for the experimental JIT compiler.
gh-127925: Convert the
decimalmodule to use PEP 757 C API (export-import integers), offering some speed-up if the integer part of theDecimalinstance is small. Patch by Sergey B Kirpichev.
Build¶
Python 3.14.0 alpha 4¶
Release date: 2025-01-14
macOS¶
gh-127592: Usage of the unified Apple System Log APIs was disabled when the minimum macOS version is earlier than 10.12.
Tools/Demos¶
gh-128152: Fix a bug where Argument Clinic’s C pre-processor parser tried to parse pre-processor directives inside C comments. Patch by Erlend Aasland.
Tests¶
gh-128690: Temporarily do not use test_embed in PGO profile builds until the problem with test_init_pyvenv_cfg failing in some configurations is resolved.
Library¶
gh-128731: Fix
ResourceWarninginurllib.robotparser.RobotFileParser.read().gh-71339: Add new assertion methods for
unittest:assertHasAttr(),assertNotHasAttr(),assertIsSubclass(),assertNotIsSubclass()assertStartsWith(),assertNotStartsWith(),assertEndsWith()andassertNotEndsWith().gh-118761: Improve import time of
pickleby 25% by removing an unnecessary regular expression. As such,reis no more implicitly available aspickle.re. Patch by Bénédikt Tran.gh-128661: Fixes
typing.evaluate_forward_ref()not showing deprecation whentype_paramsarg is not passed.gh-128562: Fix possible conflicts in generated
tkinterwidget names if the widget class name ends with a digit.gh-128552: Fix cyclic garbage introduced by
asyncio.loop.create_task()andasyncio.TaskGroup.create_task()holding a reference to the created task if it is eager.gh-128340: Add internal thread safe handle to be used in
asyncio.loop.call_soon_threadsafe()for thread safe cancellation.gh-128182: Fix crash when using
ctypespointers concurrently on the free threaded build.gh-128400: Only show the current thread in
faulthandleron the free threaded build to prevent races.gh-128400: Fix crash when using
faulthandler.dump_traceback()while other threads are active on the free threaded build.gh-128388: Fix
PyREPLon Windows to support more keybindings, like the Control-← and Control-→ word-skipping keybindings and those with meta (i.e. Alt), e.g. Alt-d tokill-wordor Alt-Backspacebackward-kill-word.gh-88834: Unify the instance check for
typing.Unionandtypes.UnionType:Unionnow uses the instance checks against its parameters instead of the subclass checks.gh-128302: Fix
xml.dom.xmlbuilder.DOMEntityResolver.resolveEntity(), which was broken by the Python 3.0 transition.gh-128317: Highlight today in colour in
calendar’s CLI output. Patch by Hugo van Kemenade.gh-128302: Allow
xml.dom.xmlbuilder.DOMParser.parse()to correctly handlexml.dom.xmlbuilder.DOMInputSourceinstances that only have asystemIdattribute set.gh-128151: Improve generation of
UUIDobjects version 3, 4, 5, and 8 via their dedicated functions by 30%. Patch by Bénédikt Tran.gh-128118: Improve performance of
copy.copy()by 30% via a fast path for atomic types and container types.gh-127946: Fix crash when modifying
ctypes._CFuncPtrobjects concurrently on the free threaded build.gh-128062: Revert the font of
turtledemo’s menu bar to its default value and display the shortcut keys in the correct position.gh-128014: Fix resetting the default window icon by passing
default=''to thetkintermethodwm_iconbitmap().gh-41872: Fix quick extraction of module docstrings from a file in
pydoc. It now supports docstrings with single quotes, escape sequences, raw string literals, and other Python syntax.gh-127060: Set TERM environment variable to “dumb” to disable traceback colors in IDLE, since IDLE doesn’t understand ANSI escape sequences. Patch by Victor Stinner.
gh-126742: Fix support of localized error messages reported by dlerror(3) and gdbm_strerror in
ctypesanddbm.gnufunctions respectively. Patch by Bénédikt Tran.gh-122548: Adds two new local events to sys.monitoring,
BRANCH_LEFTandBRANCH_RIGHT. This allows the two arms of the branch to be disabled independently, which should hugely improve performance of branch-level coverage tools. The old branch event,BRANCHis now deprecated.gh-127847: Fix the position when doing interleaved seeks and reads in uncompressed, unencrypted zip files returned by
zipfile.ZipFile.open().gh-127688: Add the
SCHED_DEADLINEandSCHED_NORMALconstants to theosmodule.gh-83662: Add missing
__class_getitem__method to the Python implementation offunctools.partial(), to make it compatible with the C version. This is mainly relevant for alternative Python implementations like PyPy and GraalPy, because CPython will usually use the C-implementation of that function.gh-127586:
multiprocessing.pool.Poolnow properly restores blocked signal handlers of the parent thread when creating processes via either spawn or forkserver.gh-98188: Fix an issue in
email.message.Message.get_payload()where data cannot be decoded if the Content Transfer Encoding mechanism contains trailing whitespaces or additional junk text. Patch by Hui Liu.gh-127529: Correct behavior of
asyncio.selector_events.BaseSelectorEventLoop._accept_connection()in handlingConnectionAbortedErrorin a loop. This improves performance on OpenBSD.gh-127360: When a descriptive error message cannot be provided for an
ssl.SSLError, the “unknown error” message now shows the internal error code (as retrieved byERR_get_errorand similar OpenSSL functions).gh-127196: Fix crash when dict with keys in invalid encoding were passed to several functions in
_interpretersmodule.gh-124130: Fix a bug in matching regular expression
\Bin empty input string. Now it is always the opposite of\b. To get an old behavior, use(?!\A\Z)\B. To get a new behavior in old Python versions, use(?!\b).gh-126639:
tempfile.NamedTemporaryFilewill now issue aResourceWarningwhen it is finalized by the garbage collector without being explicitly closed.gh-126624: Expose error code
XML_ERROR_NOT_STARTEDof Expat >=2.6.4 inxml.parsers.expat.errors.gh-126225:
getoptandoptparseare no longer marked as deprecated. There are legitimate reasons to use one of these modules in preference toargparse, and none of these modules are at risk of being removed from the standard library. Of the three,argparseremains the recommended default choice, unless one of the concerns noted at the top of theoptparsemodule documentation applies.gh-124761: Add
SO_REUSEPORT_LBconstant tosocketfor FreeBSD.gh-121720:
enum.EnumDictcan now be used without resorting to private API.gh-123424: Add
zipfile.ZipInfo._for_archive()setting default properties onZipInfoobjects. Patch by Bénédikt Tran and Jason R. Coombs.gh-121676: Deprecate calling the Python implementation of
functools.reduce()with afunctionorsequenceas a keyword argument. This will be forbidden in Python 3.16 in order to match the C implementation.gh-112015:
ctypes.memoryview_at()now exists to create amemoryviewobject that refers to the supplied pointer and length. This works likectypes.string_at()except it avoids a buffer copy, and is typically useful when implementing pure Python callback functions that are passed dynamically-sized buffers.gh-95371: Added support for other image formats (PNG, PGM, and PPM) to the turtle module. Patch by Shin-myoung-serp.
Core and Builtins¶
gh-128078: Fix a
SystemErrorwhen usinganext()with a default tuple value. Patch by Bénédikt Tran.gh-128717: Fix a crash when setting the recursion limit while other threads are active on the free threaded build.
gh-124483: Treat
Py_DECREFand variants as escaping when generating opcode and uop metadata. This prevents the possibility of a__del__method causing the JIT to behave incorrectly.gh-126703: Improve performance of class methods by using a freelist.
gh-128137: Update
PyASCIIObjectlayout to handle interned field with the atomic operation. Patch by Donghee Na.
Library¶
gh-128192: Upgrade HTTP digest authentication algorithm for
urllib.requestby supporting SHA-256 digest authentication as specified in RFC 7616.
Core and Builtins¶
gh-114203: Optimize
Py_BEGIN_CRITICAL_SECTIONfor simple recursive calls.gh-127705: Adds stackref debugging when
Py_STACKREF_DEBUGis set. Finds all double-closes and leaks, logging the origin and last borrow.Inspired by HPy’s debug mode. https://docs.hpyproject.org/en/latest/debug-mode.html
gh-128079: Fix a bug where
except*does not properly check the return value of anExceptionGroup’ssplit()function, leading to a crash in some cases. Now whensplit()returns an invalid object,except*raises aTypeErrorwith the original raisedExceptionGroupobject chained to it.gh-128030: Avoid error from calling
PyModule_GetFilenameObjecton a non-module object when importing a non-existent symbol from a non-module object.
Library¶
gh-128035: Indicate through
ssl.HAS_PHAwhether thesslmodule supports TLSv1.3 post-handshake client authentication (PHA). Patch by Will Childs-Klein.
Core and Builtins¶
gh-127274: Add a new flag,
CO_METHOD, toco_flagsthat indicates whether the code object belongs to a function defined in class scope.gh-66409: During the path initialization, we now check if
base_exec_prefixis the same asbase_prefixbefore falling back to searching the Python interpreter directory.gh-127970: We now use the location of the
libpythonruntime library used in the current process to determinesys.base_prefixon all platforms implementing the dladdr function defined by the UNIX standard — this includes Linux, Android, macOS, iOS, FreeBSD, etc. This was already the case on Windows and macOS Framework builds.gh-127773: Do not use the type attribute cache for types with incompatible MRO.
gh-127903:
Objects/unicodeobject.c: fix a crash on DEBUG builds in_copy_characterswhen there is nothing to copy.gh-127809: Fix an issue where the experimental JIT may infer an incorrect result type for exponentiation (
**and**=), leading to bugs or crashes.gh-126862: Fix a possible overflow when a class inherits from an absurd number of super-classes. Reported by Valery Fedorenko. Patch by Bénédikt Tran.
C API¶
gh-128400:
Py_FatalError()no longer shows all threads on the free threaded build to prevent crashes.gh-128629: Add macros
Py_PACK_VERSION()andPy_PACK_FULL_VERSION()for bit-packing Python version numbers.gh-128008: Add
PyWeakref_IsDead()function, which tests if a weak reference is dead.gh-127350: Add
Py_fopen()function to open a file. Similar to thefopen()function, but the path parameter is a Python object and an exception is set on error. Add alsoPy_fclose()function to close a file, function needed for Windows support. Patch by Victor Stinner.
Build¶
gh-128627: For Emscripten builds the function pointer cast call trampoline now uses the wasm-gc ref.test instruction if it’s available instead of Wasm JS type reflection.
gh-128472: Skip BOLT optimization of functions using computed gotos, fixing errors on build with LLVM 19.
gh-115765: GNU Autoconf 2.72 is now required to generate
configure. Patch by Erlend Aasland.gh-123925: Fix building the
cursesmodule on platforms with libncurses but without libncursesw.gh-90905: Add support for cross-compiling to x86_64 on aarch64/arm64 macOS.
gh-128321: Set
LIBSinstead ofLDFLAGSwhen checking ifsqlite3library functions are available. This fixes the ordering of linked libraries during checks, which was incorrect when using a statically linkedlibsqlite3.gh-100384: Error on
unguarded-availabilityin macOS builds, preventing invalid use of symbols that are not available in older versions of the OS.gh-128104: Remove
Py_STRFTIME_C99_SUPPORTconditions in favor of requiring C99 strftime(3) specifier support at build time. When cross-compiling, there is no build time check and support is assumed.gh-127951: Add option
--pystatsto the Windows build to enable performance statistics collection.
Python 3.14.0 alpha 3¶
Release date: 2024-12-17
Windows¶
Tools/Demos¶
Tests¶
gh-127906: Test the limited C API in test_cppext. Patch by Victor Stinner.
gh-127637: Add tests for the
discommand-line interface. Patch by Bénédikt Tran.gh-126925: iOS test results are now streamed during test execution, and the deprecated xcresulttool is no longer used.
gh-127076: Disable strace based system call tests when LD_PRELOAD is set.
gh-127076: Filter out memory-related
mmap,munmap, andmprotectcalls from file-related ones when testingiobehavior using strace.
Security¶
gh-127655: Fixed the
asyncio.selector_events._SelectorSocketTransporttransport not pausing writes for the protocol when the buffer reaches the high water mark when usingasyncio.WriteTransport.writelines().
Library¶
gh-126907: Fix crash when using
atexitconcurrently on the free-threaded build.gh-127870: Detect recursive calls in ctypes
_as_parameter_handling. Patch by Victor Stinner.gh-127732: The
platformmodule now correctly detects Windows Server 2025.gh-126789: Fixed
sysconfig.get_config_vars(),sysconfig.get_paths(), and siblings, returning outdated cached data if the value ofsys.prefixorsys.exec_prefixchanges. Overwritingsys.prefixorsys.exec_prefixstill is discouraged, as that might break other parts of the code.gh-127718: Add colour to
test.regrtestoutput. Patch by Hugo van Kemenade.gh-127610: Added validation for more than one var-positional or var-keyword parameters in
inspect.Signature. Patch by Maxim Ageev.gh-127627: Added
posix._emscripten_debugger()to help with debugging the test suite on the Emscripten target.gh-126821: macOS and iOS apps can now choose to redirect stdout and stderr to the system log during interpreter configuration.
gh-93312: Include
<sys/pidfd.h>to getos.PIDFD_NONBLOCKconstant. Patch by Victor Stinner.gh-127481: Add the
EPOLLWAKEUPconstant to theselectmodule.gh-127065: Make
operator.methodcaller()thread-safe and re-entrant safe.gh-127321:
pdb.set_trace()will not stop at an opcode that does not have an associated line number anymore.gh-127429: Fixed bug where, on cross-builds, the
sysconfigPOSIX data was being generated with the host Python’sMakefile. The data is now generated from current build’sMakefile.gh-127413: Add the
dis --specializedcommand-line option to show specialized bytecode. Patch by Bénédikt Tran.gh-125413: Revert addition of
pathlib.Path.scandir(). This method was added in 3.14.0a2. The optimizations remain for file system paths, but other subclasses should only have to implementpathlib.Path.iterdir().gh-127257: In
ssl, system call failures that OpenSSL reports usingERR_LIB_SYSare now raised asOSError.gh-59705: On Linux,
threading.Threadnow sets the thread name to the operating system. Patch by Victor Stinner.gh-127303: Publicly expose
EXACT_TOKEN_TYPESintoken.__all__.gh-127331:
sslcan show descriptions for errors added in OpenSSL 3.4.gh-123967: Fix faulthandler for trampoline frames. If the top-most frame is a trampoline frame, skip it. Patch by Victor Stinner.
gh-127178: A
_sysconfig_vars_(...).jsonfile is now shipped in the standard library directory. It contains the output ofsysconfig.get_config_vars()on the default environment encoded as JSON data. This is an implementation detail, and may change at any time.gh-127072: Remove outdated
socket.NETLINK_*constants not present in Linux kernels beyond 2.6.17.gh-127255: The
CopyComPointer()function is now public. Previously, this was private and only available in_ctypes.gh-127182: Fix
io.StringIO.__setstate__()crash, whenNonewas passed as the first value.gh-127217: Fix
urllib.request.pathname2url()for paths starting with multiple slashes on Posix.gh-125866:
urllib.request.pathname2url()now adds an empty authority when generating a URL for a path that begins with exactly one slash. For example, the path/etc/hostsis converted to the scheme-less URL///etc/hosts. As a result of this change, URLs without authorities are only generated for relative paths.gh-127221: Add colour to
unittestoutput. Patch by Hugo van Kemenade.gh-127035: Fix
shutil.whichon Windows. Now it looks at direct match if and only if the command ends with a PATHEXT extension or X_OK is not in mode. Support extensionless files if “.” is in PATHEXT. Support PATHEXT extensions that end with a dot.gh-122273: Support PyREPL history on Windows. Patch by devdanzin and Victor Stinner.
gh-125866:
urllib.request.pathname2url()andurl2pathname()no longer convert Windows drive letters to uppercase.gh-127078: Fix issue where
urllib.request.url2pathname()failed to discard an extra slash before a UNC drive in the URL path on Windows.gh-126766: Fix issue where
urllib.request.url2pathname()failed to discard any ‘localhost’ authority present in the URL.gh-127065: Fix crash when calling a
operator.methodcaller()instance from multiple threads in the free threading build.gh-127090: Fix value of
urllib.response.addinfourl.urlforfile:URLs that express relative paths and absolute Windows paths. The canonical URL generated byurllib.request.pathname2url()is now used.gh-126992: Fix LONG and INT opcodes to only use base 10 for string to integer conversion in
pickle.gh-126997: Fix support of STRING and GLOBAL opcodes with non-ASCII arguments in
pickletools.pickletools.dis()now outputs non-ASCII bytes in STRING, BINSTRING and SHORT_BINSTRING arguments as escaped (\xXX).gh-126316:
grp: Makegrp.getgrall()thread-safe by adding a mutex. Patch by Victor Stinner.gh-126618: Fix the representation of
itertools.countobjects when the count value issys.maxsize.gh-126615: The
COMErrorexception is now public. Previously, this was private and only available in_ctypes.gh-126985: When running under a virtual environment with the
sitedisabled (see-S),sys.prefixandsys.base_prefixwill now point to the virtual environment, instead of the base installation.gh-112192: In the
tracemodule, increase the coverage precision (cov%) to one decimal.gh-118761: Improve import time of
mimetypesby around 11-16 times. Patch by Hugo van Kemenade.gh-126947: Raise
TypeErrorin_pydatetime.timedelta.__new__()if the passed arguments are notintorfloat, so that the Python implementation is in line with the C implementation.gh-126946: Improve the
GetoptErrorerror message when a long option prefix matches multiple accepted options ingetopt.getopt()andgetopt.gnu_getopt().gh-126899: Make tkinter widget methods
after()andafter_idle()accept arguments passed by keyword.gh-85168: Fix issue where
urllib.request.url2pathname()andpathname2url()always used UTF-8 when quoting and unquoting file URIs. They now use the filesystem encoding and error handler.gh-126780: Fix
os.path.normpath()for drive-relative paths on Windows.gh-126775: Make
linecache.checkcache()thread safe and GC re-entrancy safe.gh-126601: Fix issue where
urllib.request.pathname2url()raisedOSErrorwhen given a Windows path containing a colon character not following a drive letter, such as before an NTFS alternate data stream.gh-126727:
locale.nl_langinfo(locale.ERA)now returns multiple era description segments separated by semicolons. Previously it only returned the first segment on platforms with Glibc.gh-118201: Fixed intermittent failures of
os.confstr,os.pathconfandos.sysconfon iOS and Android.gh-86463: The
usageparameter ofargparse.ArgumentParserno longer affects the default value of theprogparameter in subparsers.gh-124008: Fix possible crash (in debug build), incorrect output or returning incorrect value from raw binary
write()when writing to console on Windows.gh-123401: The
http.cookiesmodule now supports parsing obsolete RFC 850 date formats, in accordance with RFC 9110 requirements. Patch by Nano Zheng.gh-122431:
readline.append_history_file()now raises aValueErrorwhen given a negative value.gh-122356: Guarantee that the position of a file-like object passed to
zipfile.is_zipfile()is left untouched after the call. Patch by Bénédikt Tran.gh-122288: Improve the performances of
fnmatch.translate()by a factor 1.7. Patch by Bénédikt Tran.gh-88110: Fixed
multiprocessing.Processreporting a.exitcodeof 1 even on success when using the"fork"start method while using aconcurrent.futures.ThreadPoolExecutor.gh-97514: Authentication was added to the
multiprocessingforkserver start method control socket so that only processes with the authentication key generated by the process that spawned the forkserver can control it. This is an enhancement over the other gh-97514 fixes so that access is no longer limited only by filesystem permissions.The file descriptor exchange of control pipes with the forked worker process now requires an explicit acknowledgement byte to be sent over the socket after the exchange on all forkserver supporting platforms. That makes testing the above much easier.
Documentation¶
gh-127347: Publicly expose
traceback.print_list()intraceback.__all__.
Core and Builtins¶
gh-127740: Fix error message in
bytes.fromhex()when given an odd number of digits to properly indicate that an even number of hexadecimal digits is required.gh-127058:
PySequence_Tuplenow creates the resulting tuple atomically, preventing partially created tuples being visible to the garbage collector or throughgc.get_referrers()gh-127599: Fix statistics for increments of object reference counts (in particular, when a reference count was increased by more than 1 in a single operation).
gh-127651: When raising
ImportErrorfor missing symbols infromimports, use__file__in the error message if__spec__.originis not a locationgh-127582: Fix non-thread-safe object resurrection when calling finalizers and watcher callbacks in the free threading build.
gh-127434: The iOS compiler shims can now accept arguments with spaces.
gh-127536: Add missing locks around some list assignment operations in the free threading build.
gh-127085: Fix race when exporting a buffer from a
memoryviewobject on the free-threaded build.gh-127238: Correct error message for
sys.set_int_max_str_digits().gh-113841: Fix possible undefined behavior division by zero in
complex’s_Py_c_pow().
Library¶
gh-127133: Calling
argparse.ArgumentParser.add_argument_group()on an argument group, and callingargparse.ArgumentParser.add_argument_group()orargparse.ArgumentParser.add_mutually_exclusive_group()on a mutually exclusive group now raise exceptions. This nesting was never supported, often failed to work correctly, and was unintentionally exposed through inheritance. This functionality has been deprecated since Python 3.11.
Core and Builtins¶
gh-126491: Add a marking phase to the GC. All objects that can be transitively reached from builtin modules or the stacks are marked as reachable before cycle detection. This reduces the amount of work done by the GC by approximately half.
gh-127020: Fix a crash in the free threading build when
PyCode_GetCode(),PyCode_GetVarnames(),PyCode_GetCellvars(), orPyCode_GetFreevars()were called from multiple threads at the same time.gh-127010: Simplify GC tracking of dictionaries. All dictionaries are tracked when created, rather than being lazily tracked when a trackable object was added to them. This simplifies the code considerably and results in a slight speedup.
gh-126980: Fix
__buffer__()ofbytearraycrashing whenREADorWRITEare passed as flags.gh-126937: Fix
TypeErrorwhen actypes.Structurehas a field size that doesn’t fit into an unsigned 16-bit integer. Instead, the maximum number of bits issys.maxsize.gh-126868: Increase performance of
intby adding a freelist for compact ints.gh-126881: Fix crash in finalization of dtoa state. Patch by Kumar Aditya.
gh-126892: Require cold or invalidated code to “warm up” before being JIT compiled again.
gh-126091: Ensure stack traces are complete when throwing into a generator chain that ends in a custom generator.
gh-126024: Optimize decoding of short UTF-8 sequences containing non-ASCII characters by approximately 15%.
gh-125420: Add
memoryview.index()tomemoryviewobjects. Patch by Bénédikt Tran.gh-125420: Add
memoryview.count()tomemoryviewobjects. Patch by Bénédikt Tran.gh-124470: Fix crash in free-threaded builds when replacing object dictionary while reading attribute on another thread
gh-69639: Implement mixed-mode arithmetic rules combining real and complex numbers as specified by C standards since C99. Patch by Sergey B Kirpichev.
gh-120010: Correct invalid corner cases which resulted in
(nan+nanj)output in complex multiplication, e.g.,(1e300+1j)*(nan+infj). Patch by Sergey B Kirpichev.gh-109746: If
_thread.start_new_thread()fails to start a new thread, it deletes its state from interpreter and thus avoids its repeated cleanup on finalization.
C API¶
gh-127896: The previously undocumented function
PySequence_In()is soft deprecated. UsePySequence_Contains()instead.gh-127791: Fix loss of callbacks after more than one call to
PyUnstable_AtExit().gh-127691: The Unicode Exception Objects C API now raises a
TypeErrorif its exception argument is not aUnicodeErrorobject. Patch by Bénédikt Tran.gh-123378: Ensure that the value of
UnicodeEncodeError.endretrieved byPyUnicodeEncodeError_GetEnd()lies in[min(1, objlen), max(min(1, objlen), objlen)]where objlen is the length ofUnicodeEncodeError.object. Similar arguments apply toUnicodeDecodeErrorandUnicodeTranslateErrorand their corresponding C interface. Patch by Bénédikt Tran.gh-127314: Improve error message when calling the C API without an active thread state on the free-threaded build.
gh-123378: Ensure that the value of
UnicodeEncodeError.startretrieved byPyUnicodeEncodeError_GetStart()lies in[0, max(0, objlen - 1)]where objlen is the length ofUnicodeEncodeError.object. Similar arguments apply toUnicodeDecodeErrorandUnicodeTranslateErrorand their corresponding C interface. Patch by Bénédikt Tran.gh-109523: Reading text from a non-blocking stream with
readmay now raise aBlockingIOErrorif the operation cannot immediately return bytes.gh-102471: Add a new import and export API for Python
intobjects (PEP 757):Patch by Victor Stinner.
gh-121058:
PyThreadState_Clear()now warns (and callssys.excepthook) if the thread state still has an active exception.
Build¶
gh-127865: Fix build failure on systems without thread-locals support.
gh-127629: Emscripten builds now include ctypes support.
gh-127111: Updated the Emscripten web example to use ES6 modules and be built into a distinct
web_examplesubfolder.gh-115869: Make
jit_stencils.h(which is produced during JIT builds) reproducible.gh-126898: The Emscripten build of Python is now based on ES6 modules.
Python 3.14.0 alpha 2¶
Release date: 2024-11-19
Windows¶
gh-126911: Update credits command output.
gh-118973: Ensures the experimental free-threaded install includes the
_tkintermodule. The optional Tcl/Tk component must also be installed in order for the module to work.gh-126497: Fixes venv failure due to missing redirector executables in experimental free-threaded installs.
gh-126074: Removed unnecessary DLLs from Windows embeddable package
gh-125315: Avoid crashing in
platformdue to slow WMI calls on some Windows machines.gh-126084: Fix venvwlauncher to launch pythonw instead of python so no extra console window is created.
gh-125842: Fix a
SystemErrorwhensys.exit()is called with0xffffffffon Windows.gh-125550: Enable the Python install manager to detect Python 3.14 installs from the Windows Store.
gh-123803: All Windows code pages are now supported as “cpXXX” codecs on Windows.
Tools/Demos¶
Tests¶
Security¶
gh-126623: Upgrade libexpat to 2.6.4
Library¶
gh-85957: Add missing MIME types for images with RFCs: emf, fits, g3fax, jp2, jpm, jpx, t38, tiff-fx and wmf. Patch by Hugo van Kemenade.
gh-126920: Fix the
prefixandexec_prefixkeys fromsysconfig.get_config_vars()incorrectly having the same value assys.base_prefixandsys.base_exec_prefix, respectively, inside virtual environments. They now accurately reflectsys.prefixandsys.exec_prefix.gh-67877: Fix memory leaks when
regular expressionmatching terminates abruptly, either because of a signal or because memory allocation fails.gh-125063:
marshalnow supportssliceobjects. The marshal format version was increased to 5.gh-126789: Fixed the values of
sysconfig.get_config_vars(),sysconfig.get_paths(), and their siblings when thesiteinitialization happens aftersysconfighas built a cache forsysconfig.get_config_vars().gh-126188: Update bundled pip to 24.3.1
gh-126766: Fix issue where
urllib.request.url2pathname()failed to discard two leading slashes introducing an empty authority section.gh-126705: Allow
os.PathLiketo be a base for Protocols.gh-126699: Allow
collections.abc.AsyncIteratorto be a base for Protocols.gh-126654: Fix crash when non-dict was passed to several functions in
_interpretersmodule.gh-104745: Limit starting a patcher (from
unittest.mock.patch()orunittest.mock.patch.object()) more than once without stopping itgh-126595: Fix a crash when instantiating
itertools.countwith an initial count ofsys.maxsizeon debug builds. Patch by Bénédikt Tran.gh-120423: Fix issue where
urllib.request.pathname2url()mishandled Windows paths with embedded forward slashes.gh-126565: Improve performances of
zipfile.Path.open()for non-reading modes.gh-126505: Fix bugs in compiling case-insensitive
regular expressionswith character classes containing non-BMP characters: upper-case non-BMP character did was ignored and the ASCII flag was ignored when matching a character range whose upper bound is beyond the BMP region.gh-117378: Fixed the
multiprocessing"forkserver"start method forkserver process to correctly inherit the parent’ssys.pathduring the importing ofmultiprocessing.set_forkserver_preload()modules in the same manner assys.pathis configured in workers before executing work items.This bug caused some forkserver module preloading to silently fail to preload. This manifested as a performance degradation in child processes when the
sys.pathwas required due to additional repeated work in every worker.It could also have a side effect of
""remaining insys.pathduring forkserver preload imports instead of the absolute path fromos.getcwd()at multiprocessing import time used in the workersys.path.The
sys.pathdifferences between phases in the child process could potentially have caused preload to import incorrect things from the wrong location. We are unaware of that actually having happened in practice.gh-125679: The
multiprocessing.Lockandmultiprocessing.RLockreprvalues no longer say “unknown” on macOS.gh-126476: Raise
calendar.IllegalMonthError(now a subclass ofIndexError) forcalendar.month()when the input month is not correct.gh-126489: The Python implementation of
pickleno longer callspickle.Pickler.persistent_id()for the result ofpersistent_id().gh-126451: Register the
contextvars.Contexttype tocollections.abc.Mapping.gh-126175: Add
msg,doc,pos,linenoandcolnoattributes totomllib.TOMLDecodeError. Deprecate instantiating with free-form arguments.gh-89416: Add RFC 9559 MIME types for Matroska audiovisual container formats. Patch by Hugo van Kemenade.
gh-126417: Register the
multiprocessing.managers.DictProxyandmultiprocessing.managers.ListProxytypes inmultiprocessing.managerstocollections.abc.MutableMappingandcollections.abc.MutableSequence, respectively.gh-126390: Add support for returning intermixed options and non-option arguments in order in
getopt.gnu_getopt().gh-126374: Add support for options with optional arguments in the
getoptmodule.gh-126363: Speed up pattern parsing in
pathlib.Path.glob()by skipping creation of apathlib.Pathobject for the pattern.gh-126353:
asyncio.get_event_loop()now does not implicitly creates an event loop. It now raises aRuntimeErrorif there is no set event loop. Patch by Kumar Aditya.gh-126313: Fix an issue in
curses.napms()whencurses.initscr()has not yet been called. Patch by Bénédikt Tran.gh-126303: Fix pickling and copying of
os.sched_paramobjects.gh-126138: Fix a use-after-free crash on
asyncio.Taskobjects whose underlying coroutine yields an object that implements an evil__getattribute__(). Patch by Nico Posada.gh-120057: Replace the
os.environ.refresh()method with a newos.reload_environ()function. Patch by Victor Stinner.gh-126220: Fix crash in
cProfile.Profileand_lsprof.Profilerwhen their callbacks were directly called with 0 arguments.gh-126212: Fix issue where
urllib.request.pathname2url()andurl2pathname()removed slashes from Windows DOS drive paths and URLs.gh-126223: Raise a
UnicodeEncodeErrorinstead of aSystemErrorupon calling_interpreters.create()with an invalid Unicode character.gh-126205: Fix issue where
urllib.request.pathname2url()generated URLs beginning with four slashes (rather than two) when given a Windows UNC path.gh-126156: Improved performances of creating
Morselobjects by a factor of 3.8x.gh-126105: Fix a crash in
astwhen theast.AST._fieldsattribute is deleted.gh-126106: Fixes a possible
NULLpointer dereference inssl.gh-126080: Fix a use-after-free crash on
asyncio.Taskobjects for which the underlying event loop implements an evil__getattribute__(). Reported by Nico-Posada. Patch by Bénédikt Tran.gh-125322: Correct detection of complex numbers support in libffi.
gh-126083: Fixed a reference leak in
asyncio.Taskobjects when reinitializing the same object with a non-Nonecontext. Patch by Nico Posada.gh-126068: Fix exceptions in the
argparsemodule so that only error messages for ArgumentError and ArgumentTypeError are now translated. ArgumentError is now only used for command line errors, not for logical errors in the program. TypeError is now raised instead of ValueError for some logical errors.gh-125413: Add
pathlib.Path.scandir()method to efficiently fetch directory children and their file attributes. This is a trivial wrapper ofos.scandir().gh-125984: Fix use-after-free crashes on
asyncio.Futureobjects for which the underlying event loop implements an evil__getattribute__(). Reported by Nico-Posada. Patch by Bénédikt Tran.gh-125926: Fix
urllib.parse.urljoin()for base URI with undefined authority. Although RFC 3986 only specify reference resolution for absolute base URI,urljoin()should continue to return sensible result for relative base URI.gh-125969: Fix an out-of-bounds crash when an evil
asyncio.loop.call_soon()mutates the length of the internal callbacks list. Patch by Bénédikt Tran.gh-125966: Fix a use-after-free crash in
asyncio.Future.remove_done_callback(). Patch by Bénédikt Tran.gh-125789: Fix possible crash when mutating list of callbacks returned by
asyncio.Future._callbacks. It now always returns a new copy in C implementation_asyncio. Patch by Kumar Aditya.gh-126916: Allow the initial parameter of
functools.reduce()to be passed as a keyword argument. Patch by Sayandip Dutta.gh-124452: Fix an issue in
email.policy.EmailPolicy.header_source_parse()andemail.policy.Compat32.header_source_parse()that introduced spurious leading whitespaces into header values when the header includes a newline character after the header name delimiter (:) and before the value.gh-117941:
argparse.BooleanOptionalActionnow rejects option names starting with--no-.gh-125884: Fixed the bug for
pdbwhere it can’t set breakpoints on functions with certain annotations.gh-125355: Fix several bugs in
argparse.ArgumentParser.parse_intermixed_args().The parser no longer changes temporarily during parsing.
Default values are not processed twice.
Required mutually exclusive groups containing positional arguments are now supported.
The missing arguments report now includes the names of all required optional and positional arguments.
Unknown options can be intermixed with positional arguments in parse_known_intermixed_args().
gh-125767:
superobjects are nowpickleableandcopyable.gh-124969:
locale.nl_langinfo(locale.ALT_DIGITS)now returns a string again. The returned value consists of up to 100 semicolon-separated symbols.gh-84850: Remove
URLopenerandFancyURLopenerclasses fromurllib.request. They had previously raisedDeprecationWarningsince Python 3.3.gh-125666: Avoid the exiting the interpreter if a null byte is given as input in the new REPL.
gh-125710: [Enum] fix hashable<->nonhashable comparisons for member values
gh-125631: Restore ability to set
persistent_idandpersistent_loadattributes of instances of thePicklerandUnpicklerclasses in thepicklemodule.gh-125378: Fixed the bug in
pdbwhere after a multi-line command, an empty line repeats the first line of the multi-line command, instead of the full command.gh-125682: Reject non-ASCII digits in the Python implementation of
json.loads()conforming to the JSON specification.gh-125660: Reject invalid unicode escapes for Python implementation of
json.loads().gh-52551: Use
wcsftime()to implementtime.strftime()on Windows.gh-125259: Fix the notes removal logic for errors thrown in enum initialization.
gh-125633: Add function
inspect.ispackage()to determine whether an object is a package or not.gh-125614: In the
FORWARDREFformat ofannotationlib, fix bug where nested expressions were not returned asannotationlib.ForwardRefformat.gh-125590: Allow
FrameLocalsProxyto delete and pop if the key is not a fast variable.gh-125600: Only show stale code warning in
pdbwhen we display source code.gh-125542: Deprecate passing keyword-only prefix_chars argument to
argparse.ArgumentParser.add_argument_group().gh-125541: Pressing Ctrl-C while blocked in
threading.Lock.acquire(),threading.RLock.acquire(), andthreading.Thread.join()now interrupts the function call and raises aKeyboardInterruptexception on Windows, similar to how those functions behave on macOS and Linux.gh-125519: Improve traceback if
importlib.reload()is called with an object that is not a module. Patch by Alex Waygood.gh-125451: Fix deadlock when
concurrent.futures.ProcessPoolExecutorshuts down concurrently with an error when feeding a job to a worker process.gh-125115: Fixed a bug in
pdbwhere arguments starting with-can’t be passed to the debugged script.gh-125398: Fix the conversion of the
VIRTUAL_ENVpath in the activate script invenvwhen running in Git Bash for Windows.gh-125245: Fix race condition when importing
collections.abc, which could incorrectly return an empty module.gh-52551: Fix encoding issues in
time.strftime(), thestrftime()method of thedatetimeclassesdatetime,dateandtimeand formatting of these classes. Characters not encodable in the current locale are now acceptable in the format string. Surrogate pairs and sequence of surrogatescape-encoded bytes are no longer recombinated. Embedded null character no longer terminates the format string.gh-124984: Fixed thread safety in
sslin the free-threaded build. OpenSSL operations are now protected by a per-object lock.gh-124651: Properly quote template strings in
venvactivation scripts.gh-124694: We’ve added
concurrent.futures.InterpreterPoolExecutor, which allows you to run code in multiple isolated interpreters. This allows you to circumvent the limitations of CPU-bound threads (due to the GIL). Patch by Eric Snow.This addition is unrelated to PEP 734.
gh-58032: Deprecate the
argparse.FileTypetype converter.gh-99749: Adds a feature to optionally enable suggestions for argument choices and subparser names if mistyped by the user.
gh-58956: Fixed a bug in
pdbwhere sometimes the breakpoint won’t trigger if it was set on a function which is already in the call stack.gh-124111: The tkinter module can now be built to use either the new version 9.0.0 of Tcl/Tk or the latest release 8.6.15 of Tcl/Tk 8. Tcl/Tk 9 includes many improvements, both to the Tcl language and to the appearance and utility of the graphical user interface provided by Tk.
gh-80958: unittest discovery supports PEP 420 namespace packages as start directory again.
gh-123370: Fix the canvas not clearing after running turtledemo clock.
gh-89083: Add
uuid.uuid8()for generating UUIDv8 objects as specified in RFC 9562. Patch by Bénédikt Trangh-122549: Add
platform.invalidate_caches()to invalidate cached results.gh-120754: Update unbounded
readcalls inzipfileto specify an explicitsizeputting a limit on how much data they may read. This also updates handling around ZIP max comment size to match the standard instead of reading comments that are one byte too long.gh-121267: Improve the performance of
tarfilewhen writing files, by caching user names and group names.gh-70764: Fixed an issue where
inspect.getclosurevars()would incorrectly classify an attribute name as a global variable when the name exists both as an attribute name and a global variable.gh-118289:
posixpath.realpath()now raisesNotADirectoryErrorwhen strict mode is enabled and a non-directory path with a trailing slash is supplied.gh-119826: Always return an absolute path for
os.path.abspath()on Windows.gh-97850: Remove deprecated
pkgutil.get_loader()andpkgutil.find_loader().gh-118986: Add
socket.IPV6_RECVERRconstant (available since Linux 2.2).gh-116897: Accepting objects with false values (like
0and[]) except empty strings, byte-like objects andNoneinurllib.parsefunctionsparse_qsl()andparse_qs()is now deprecated.gh-101955: Fix SystemError when match regular expression pattern containing some combination of possessive quantifier, alternative and capture group.
gh-71936: Fix a race condition in
multiprocessing.pool.Pool.bpo-46128: Strip
unittest.IsolatedAsyncioTestCasestack frames from reported stacktraces.gh-84852: Add MIME types for MS Embedded OpenType, OpenType Layout, TrueType, WOFF 1.0 and 2.0 fonts. Patch by Sahil Prajapati and Hugo van Kemenade.
Documentation¶
gh-126622: Added stub pages for removed modules explaining their removal, where to find replacements, and linking to the last Python version that supported them. Contributed by Ned Batchelder.
gh-125277: Require Sphinx 7.2.6 or later to build the Python documentation. Patch by Adam Turner.
gh-60712: Include the
objecttype in the lists of documented types. Change by Furkan Onder and Martin Panter.
Core and Builtins¶
gh-126795: Increase the threshold for JIT code warmup. Depending on platform and workload, this can result in performance gains of 1-9% and memory savings of 3-5%.
gh-126341: Now
ValueErroris raised instead ofSystemErrorwhen trying to iterate over a releasedmemoryviewobject.gh-126688: Fix a crash when calling
os.fork()on some operating systems, including SerenityOS.
Library¶
Core and Builtins¶
Library¶
gh-126209: Fix an issue with
skip_file_prefixesparameter which resulted in an inconsistent behaviour between the C and Python implementations ofwarnings.warn(). Patch by Daehee Kim.
Core and Builtins¶
gh-126312: Fix crash during garbage collection on an object frozen by
gc.freeze()on the free-threaded build.gh-103951: Relax optimization requirements to allow fast attribute access to module subclasses.
gh-126072: Following gh-126101, for Code Objects like lambda, annotation and type alias, we no longer add
Noneto itsco_consts.gh-126195: Improve JIT performance by 1.4% on macOS Apple Silicon by using platform-specific memory protection APIs. Patch by Diego Russo.
gh-126139: Provide better error location when attempting to use a future statement with an unknown future feature.
gh-126072: Add a new attribute in
co_flagsto indicate whether the first item inco_constsis the docstring. If a code object has no docstring,Nonewill NOT be inserted.gh-126076: Relocated objects such as
tuple,bytesandstrobjects are properly tracked bytracemallocand its associated hooks. Patch by Pablo Galindo.gh-90370: Avoid temporary tuple creation for vararg in argument passing with Argument Clinic generated code (if arguments either vararg or positional-only).
gh-126018: Fix a crash in
sys.audit()when passing a non-string as first argument and Python was compiled in debug mode.gh-126012: The
memoryviewtype now supports subscription, making it a generic type.gh-125837: Adds
LOAD_SMALL_INTandLOAD_CONST_IMMORTALinstructions.LOAD_SMALL_INTpushes a small integer equal to theopargto the stack.LOAD_CONST_IMMORTALdoes the same asLOAD_CONSTbut is more efficient for immortal objects. RemovesRETURN_CONSTinstruction.gh-125942: On Android, the
errorssetting ofsys.stdoutwas changed fromsurrogateescapetobackslashreplace.gh-125859: Fix a crash in the free threading build when
gc.get_objects()orgc.get_referrers()is called during an in-progress garbage collection.gh-125868: It was possible in 3.14.0a1 only for attribute lookup to give the wrong value. This was due to an incorrect specialization in very specific circumstances. This is fixed in 3.14.0a2.
gh-125498: The JIT has been updated to leverage Clang 19’s new
preserve_noneattribute, which supports more platforms and is more useful than LLVM’s existingghccccalling convention. This also removes the need to manually patch the calling convention in LLVM IR, simplifying the JIT compilation process.gh-125703: Correctly honour
tracemallochooks in specializedPy_DECREFpaths. Patch by Pablo Galindogh-125593: Use color to highlight error locations in traceback from exception group
gh-125017: Fix crash on certain accesses to the
__annotations__ofstaticmethodandclassmethodobjects.gh-125588: The Python PEG generator can now use f-strings in the grammar actions. Patch by Pablo Galindo
gh-125444: Fix illegal instruction for older Arm architectures. Patch by Diego Russo, testing by Ross Burton.
gh-118423: Add a new
INSTRUCTION_SIZEmacro to the cases generator which returns the current instruction size.gh-125038: Fix crash when iterating over a generator expression after direct changes on
gi_frame.f_locals. Patch by Mikhail Efimov.gh-124855: Don’t allow the JIT and perf support to be active at the same time. Patch by Pablo Galindo
gh-123714: Update JIT compilation to use LLVM 19
gh-123930: Improve the error message when a script shadowing a module from the standard library causes
ImportErrorto be raised during a “from” import. Similarly, improve the error message when a script shadowing a third party module attempts to “from” import an attribute from that third party module while still initialising.gh-119793: The
map()built-in now has an optional keyword-only strict flag likezip()to check that all the iterables are of equal length. Patch by Wannes Boeykens.
Library¶
C API¶
gh-126554: Fix error handling in
ctypes.CDLLobjects which could result in a crash in rare situations.gh-126061: Add
PyLong_IsPositive(),PyLong_IsNegative()andPyLong_IsZero()for checking if aPyLongObjectis positive, negative, or zero, respectively.gh-125608: Fix a bug where dictionary watchers (e.g.,
PyDict_Watch()) on an object’s attribute dictionary (__dict__) were not triggered when the object’s attributes were modified.gh-123619: Added the
PyUnstable_Object_EnableDeferredRefcount()function for enabling PEP 703 deferred reference counting.gh-121654: Add
PyType_Freeze()function to make a type immutable. Patch by Victor Stinner.gh-120026: The
Py_HUGE_VALmacro is soft deprecated.
Build¶
gh-126691: Removed the
--with-emscripten-targetconfigure flag. We unified thenodeandbrowseroptions and the same build can now be used, independent of target runtime.gh-123877: Use
wasm32-wasip1as the target triple for WASI instead ofwasm32-wasi. The latter will eventually be reclaimed for WASI 1.0 while CPython currently only supports WASI preview1.gh-126458: Disable SIMD support for HACL under WASI.
gh-89640: Hard-code float word ordering as little endian on WASM.
gh-126206:
make clinicnow runs Argument Clinic using the--forceoption, thus forcefully regenerating generated code.gh-126187: Introduced
Tools/wasm/emscripten.pyto simplify doing Emscripten builds.gh-124932: For cross builds, there is now support for having a different install
prefixthan thehost_prefixused bygetpath.py. This is set to/by default for Emscripten, on other platforms the default behavior is the same as before.gh-125946: The minimum supported Android version is now 7.0 (API level 24).
gh-125940: The Android build now supports 16 KB page sizes.
gh-89640: Improve detection of float word ordering on Linux when link-time optimizations are enabled.
gh-124928: Emscripten builds now require node >= 18.
gh-115382: Fix cross compile failures when the host and target SOABIs match.
Python 3.14.0 alpha 1¶
Release date: 2024-10-15
macOS¶
Windows¶
gh-124487: Increases Windows required OS and API level to Windows 10.
gh-124609: Fix
_Py_ThreadIdfor Windows builds using MinGW. Patch by Tony Roberts.gh-124448: Updated bundled Tcl/Tk to 8.6.15.
gh-124254: Ensures experimental free-threaded binaries remain installed when updating.
gh-123915: Ensure that
Tools\msi\buildrelease.batuses different directories for AMD64 and ARM64 builds.gh-123418: Updated Windows build to use OpenSSL 3.0.15.
gh-123476: Add support for
socket.TCP_QUICKACKon Windows platforms.gh-122573: The Windows build of CPython now requires 3.10 or newer.
gh-100256:
mimetypesno longer fails when it encounters an inaccessible registry key.gh-119679: Ensures correct import libraries are included in Windows installs.
gh-119690: Adds Unicode support and fixes audit events for
_winapi.CreateNamedPipe.gh-111201: Add support for new pyrepl on Windows
gh-119070: Fixes
py.exehandling of shebangs like/usr/bin/env python3.12, which were previously interpreted aspython3.exeinstead ofpython3.12.exe.gh-117505: Fixes an issue with the Windows installer not running ensurepip in a fully isolated environment. This could cause unexpected interactions with the user site-packages.
gh-118209: Avoid crashing in
mmapon Windows when the mapped memory is inaccessible due to file system errors or access violations.gh-79846: Makes
ssl.create_default_context()ignore invalid certificates in the Windows certificate store
Tools/Demos¶
gh-123418: Update GitHub CI workflows to use OpenSSL 3.0.15 and multissltests to use 3.0.15, 3.1.7, and 3.2.3.
Tests¶
gh-125041: Re-enable skipped tests for
zlibon the s390x architecture: only skip checks of the compressed bytes, which can be different between zlib’s software implementation and the hardware-accelerated implementation.gh-124378: Updated
test_ttkto pass with Tcl/Tk 8.6.15.gh-124213: Detect whether the test suite is running inside a systemd-nspawn container with
--suppress-sync=trueoption, and skip thetest_osandtest_mmaptests that are failing in this scenario.gh-124190: Add capability to ignore entire files or directories in check warning CI tool
gh-121921: Update
Lib/test/crashers/bogus_code_obj.pyso that it crashes properly again.gh-112301: Add tooling to check for changes in compiler warnings. Patch by Nate Ohlson.
gh-59022: Add tests for
pkgutil.extend_path(). Patch by Andreas Stocker.gh-99242:
os.getloadavg()may throwOSErrorwhen running regression tests under certain conditions (e.g. chroot). This error is now caught and ignored, since reporting load average is optional.gh-121084: Fix test_typing random leaks. Clear typing ABC caches when running tests for refleaks (
-Roption): call_abc_caches_clear()on typing abstract classes and their subclasses. Patch by Victor Stinner.gh-121160: Add a test for
readline.set_history_length(). Note that this test may fail on readline libraries.gh-121200: Fix
test_expanduser_pwd2()oftest_posixpath. Callgetpwnam()to getpw_dir, since it can be different thangetpwall()pw_dir. Patch by Victor Stinner.gh-121188: When creating the JUnit XML file, regrtest now escapes characters which are invalid in XML, such as the chr(27) control character used in ANSI escape sequences. Patch by Victor Stinner.
gh-120801: Cleaned up fixtures for importlib.metadata tests and consolidated behavior with ‘test.support.os_helper’.
gh-119727: Add
--single-processcommand line option to Python test runner (regrtest). Patch by Victor Stinner.gh-119273: Python test runner no longer runs tests using TTY (ex: test_ioctl) in a process group (using
setsid()). Previously, tests using TTY were skipped. Patch by Victor Stinner.gh-119050: regrtest test runner: Add XML support to the refleak checker (-R option). Patch by Victor Stinner.
gh-101525: Skip
test_gdbif the binary is relocated by BOLT. Patch by Donghee Na.gh-107562: Test certificates have been updated to expire far in the future. This allows testing Y2038 with system time set to after that, so that actual Y2038 issues can be exposed, and not masked by expired certificate errors.
Security¶
gh-125140: Remove the current directory from
sys.pathwhen using PyREPL.gh-123678: Upgrade libexpat to 2.6.3
gh-112301: Enable compiler options that warn of potential security vulnerabilities.
gh-122792: Changed IPv4-mapped
ipaddress.IPv6Addressto consistently use the mapped IPv4 address value for deciding properties. Properties which have their behavior fixed areis_multicast,is_reserved,is_link_local,is_global, andis_unspecified.gh-112301: Add ability to ignore warnings per file with warning count in warning checking tooling. Patch by Nate Ohlson.
gh-112301: Add macOS warning tracking to warning check tooling. Patch by Nate Ohlson.
gh-122133: Authenticate the socket connection for the
socket.socketpair()fallback on platforms whereAF_UNIXis not available like Windows.Patch by Gregory P. Smith <greg@krypto.org> and Seth Larson <seth@python.org>. Reported by Ellie <el@horse64.org>
gh-121957: Fixed missing audit events around interactive use of Python, now also properly firing for
python -i, as well as forpython -m asyncio. The events in question arecpython.run_stdinandcpython.run_startup.gh-112301: Enable runtime protections for glibc to abort execution when unsafe behavior is encountered, for all platforms except Windows.
gh-121285: Remove backtracking from tarfile header parsing for
hdrcharset, PAX, and GNU sparse headers.gh-112301: Add default compiler options to improve security. Enable -Wimplicit-fallthrough, -fstack-protector-strong, -Wtrampolines.
gh-118773: Fixes creation of ACLs in
os.mkdir()on Windows to work correctly on non-English machines.gh-118486:
os.mkdir()on Windows now accepts mode of0o700to restrict the new directory to the current user. This fixes CVE 2024-4030 affectingtempfile.mkdtemp()in scenarios where the base temporary directory is more permissive than the default.
Library¶
gh-125422: Fixed the bug where
pdbandbdbcan step into the bottom caller frame.gh-100141: Fixed the bug where
pdbwill be stuck in an infinite loop when debugging an empty file.gh-53203: Fix
time.strptime()for%c,%xand%Xformats in many locales that use non-ASCII digits, like Persian, Burmese, Odia and Shan.gh-125206: Workaround for old libffi versions is added. Module ctypes supports double complex only with libffi >= 3.3.0. Patch by Mikhail Efimov.
gh-89967: Make
WeakKeyDictionaryandWeakValueDictionarysafe against concurrent mutations from other threads. Patch by Kumar Aditya.gh-125260: The
gzip.compress()mtime parameter now defaults to 0 for reproducible output. Patch by Bernhard M. Wiedemann and Adam Turner.gh-125243: Fix data race when creating
zoneinfo.ZoneInfoobjects in the free threading build.gh-125254: Fix a bug where ArgumentError includes the incorrect ambiguous option in
argparse.gh-125235: Keep
tkinterTCL paths in venv pointing to base installation on Windows.gh-61011: Fix inheritance of nested mutually exclusive groups from parent parser in
argparse.ArgumentParser. Previously, all nested mutually exclusive groups lost their connection to the group containing them and were displayed as belonging directly to the parser.gh-125118: Don’t copy arbitrary values to _Bool in the
structmodule.gh-125069: Fix an issue where providing a
pathlib.PurePathobject as an initializer argument to a secondPurePathobject with a differentparserresulted in arguments to the former object’s initializer being joined by the latter object’s parser.gh-125096: If the
PYTHON_BASIC_REPLenvironment variable is set, thesitemodule no longer imports the_pyreplmodule. Moreover, thesitemodule now respects-Eand-Icommand line options: ignorePYTHON_BASIC_REPLin this case. Patch by Victor Stinner.gh-124969: Fix
locale.nl_langinfo(locale.ALT_DIGITS). Now it returns a tuple of up to 100 strings (an empty tuple on most locales). Previously it returned the first item of that tuple or an empty string.gh-124960: Fix support for the
barry_as_FLUFLfuture flag in the new REPL.gh-69998: Fix
locale.nl_langinfo()in case when different categories have different locales. The function now sets temporarily theLC_CTYPElocale in some cases. This temporary change affects other threads.gh-124958: Fix refcycles in exceptions raised from
asyncio.TaskGroupand the python implementation ofasyncio.Futuregh-53203: Fix
time.strptime()for%cand%xformats in many locales: Arabic, Bislama, Breton, Bodo, Kashubian, Chuvash, Estonian, French, Irish, Ge’ez, Gurajati, Manx Gaelic, Hebrew, Hindi, Chhattisgarhi, Haitian Kreyol, Japanese, Kannada, Korean, Marathi, Malay, Norwegian, Nynorsk, Punjabi, Rajasthani, Tok Pisin, Yoruba, Yue Chinese, Yau/Nungon and Chinese.gh-123961: Convert
cursesto multi-phase initialization (PEP 489), thereby fixing reference leaks at interpreter shutdown. Patch by Bénédikt Tran.gh-117151: The default buffer size used by
shutil.copyfileobj()has been increased from 64k to 256k on non-Windows platforms. It was already larger on Windows.gh-90102: Skip the
isattysystem call during open() when the file is known to not be a character device. This provides a slight performance improvement when reading whole files.gh-124917: Allow calling
os.path.exists()andos.path.lexists()with keyword arguments on Windows. Fixes a regression in 3.13.0.gh-65865:
argparsenow raises early error for invalidhelparguments toadd_argument(),add_subparsers()andadd_parser().gh-124653: Fix detection of the minimal Queue API needed by the
loggingmodule. Patch by Bénédikt Tran.gh-91818: The CLI of many modules (
ast,ensurepip,json,pdb,sqlite3,tokenize,venv) now uses the actual executable name instead of simply “python” to display in the usage message.gh-124858: Fix reference cycles left in tracebacks in
asyncio.open_connection()when used withhappy_eyeballs_delaygh-124390: Fixed
AssertionErrorwhen usingasyncio.staggered.staggered_race()withasyncio.eager_task_factory.gh-85935:
argparse.ArgumentParser.add_argument()now raises an exception if an action that does not consume arguments (like ‘store_const’ or ‘store_true’) or explicitnargs=0are specified for positional arguments.gh-124835: Make
tomllib.loads()raiseTypeErrornotAttributeErroron bad input types that do not have thereplaceattribute. Improve error message whenbytesis received.gh-124693: Fix a bug where
argparsedoesn’t recognize negative complex numbers or negative numbers using scientific notation.gh-124787: Fix
typing.TypeAliasTypewith incorrecttype_paramsargument. Now it raises aTypeErrorwhen a type parameter without a default follows one with a default, and when an entry in thetype_paramstuple is not a type parameter object.gh-66436: Improved prog default value for
argparse.ArgumentParser. It will now include the name of the Python executable along with the module or package name, or the path to a directory, ZIP file, or directory within a ZIP file if the code was run that way.gh-116850: Fix
argparsefor namespaces with not directly writable dict (e.g. classes).gh-101552: Add an annoation_format parameter to
inspect.signature(). Add an quote_annotation_strings parameter toinspect.Signature.format(). Use the new functionality to improve the display of annotations in signatures inpydoc. Patch by Jelle Zijlstra.gh-58573: Fix conflicts between abbreviated long options in the parent parser and subparsers in
argparse.gh-124594: All
asyncioREPL prompts run in the samecontext. Contributed by Bartosz Sławecki.gh-61181: Fix support of choices with string value in
argparse. Substrings of the specified string no longer considered valid values.gh-116750: Provide
sys.monitoring.clear_tool_id()to unregister all events and callbacks set by the tool.gh-124552: Improve the accuracy of
bdb’s check for the possibility of breakpoint in a frame. This makes it possible to disable unnecessary events in functions.gh-124538: Fixed crash when using
gc.get_referents()on a capsule object.gh-80259: Fix
argparsesupport of positional arguments withnargs='?',default=argparse.SUPPRESSand specifiedtype.gh-120378: Fix a crash related to an integer overflow in
curses.resizeterm()andcurses.resize_term().gh-124498: Fix
typing.TypeAliasTypenot to be generic, whentype_paramsis an empty tuple.gh-53834: Fix support of arguments with choices in
argparse. Positional arguments with nargs equal to'?'or'*'no longer check default againstchoices. Optional arguments withnargsequal to'?'no longer check const againstchoices.gh-123884: Fixed bug in itertools.tee() handling of other tee inputs (a tee in a tee). The output now has the promised n independent new iterators. Formerly, the first iterator was identical (not independent) to the input iterator. This would sometimes give surprising results.
gh-123017: Due to unreliable results on some devices,
time.strftime()no longer accepts negative years on Android.gh-123014:
os.pidfd_open()andsignal.pidfd_send_signal()are now unavailable when building against Android API levels older than 31, since the underlying system calls may cause a crash.gh-124176: Add support for
dataclasses.dataclass()inunittest.mock.create_autospec(). Nowcreate_autospecwill check for potential dataclasses and usedataclasses.fields()function to retrieve the spec information.gh-124345:
argparsesupports abbreviated single-dash long options separated by=from its value.gh-124400: Fixed a
pdbbug whereuntilhas no effect when it appears in acommandssequence. Also avoid printing the frame information at a breakpoint that has a command list containing a command that resumes execution.gh-90562: Modify dataclasses to support zero-argument super() when
slots=Trueis specified. This works by modifying all references to__class__to point to the newly created class.gh-104860: Fix disallowing abbreviation of single-dash long options in
argparsewithallow_abbrev=False.gh-63143: Fix parsing mutually exclusive arguments in
argparse. Arguments with the value identical to the default value (e.g. booleans, small integers, empty or 1-character strings) are no longer considered “not present”.gh-72795: Positional arguments with nargs equal to
'*'orargparse.REMAINDERare no longer required. This allows to use positional argument withnargs='*'and withoutdefaultin mutually exclusive group and improves error message about required arguments.gh-59317: Fix parsing positional argument with nargs equal to
'?'or'*'if it is preceded by an option and another positional argument.gh-100980: The
_fields_attribute ofctypes.StructureandUnionis no longer set if the setattr operation raises an error.gh-53780:
argparsenow ignores the first"--"(double dash) between an option and command.gh-124217: Add RFC 9637 reserved IPv6 block
3fff::/20inipaddressmodule.gh-111513: Improve the error message that may be raised by
datetime.date.fromtimestamp().gh-124248: Fixed potential crash when using
structto process zero-width ‘Pascal string’ fields (0p).gh-81691: Fix handling of multiple
"--"(double dashes) inargparse. Only the first one has now been removed, all subsequent ones are now taken literally.gh-87041: Fix a bug in
argparsewhere lengthy subparser argument help is incorrectly indented.gh-84559: The default
multiprocessingstart method on Linux and other POSIX systems has been changed away from often unsafe"fork"to"forkserver"(when the platform supports sending file handles over pipes as most do) or"spawn". Mac and Windows are unchanged as they already default to"spawn".gh-124212: Fix invalid variable in
venvhandling of failed symlink on Windowsgh-124171: Add workaround for broken
fmod()implementations on Windows, that loose zero sign (e.g.fmod(-10, 1)returns0.0). Patch by Sergey B Kirpichev.gh-123978: Remove broken
time.thread_time()andtime.thread_time_ns()on NetBSD.gh-123934: Fix
unittest.mock.MagicMockresetting magic methods return values after.reset_mock(return_value=True)was called.gh-124016: Update
unicodedatadatabase to Unicode 16.0.0.gh-123968: Fix the command-line interface for the
randommodule to select floats between 0 and N, not 1 and N.gh-123945: Fix a bug where
argparsedoesn’t recognize negative numbers with underscoresgh-123935: Fix parent slots detection for dataclasses that inherit from classes with
__dictoffset__.gh-123892: Add
"_wmi"tosys.stdlib_module_names. Patch by Victor Stinner.gh-84808: Fix error handling in
socketmethodconnect_ex()on platforms whereerrnocan be negative.gh-123756: Added a new argument
modetopdb.Pdb. Only allowpdbfrom command line to userestartcommand.gh-122765: Fix unbalanced quote errors occurring when activate.csh in
venvwas sourced with a custom prompt containing unpaired quotes or newlines.gh-123657: Fix crash and memory leak in
decimal.getcontext(). It crashed when using a thread-local context by--with-decimal-contextvar=no.gh-123339: Fix
inspect.getsource()for classes incollections.abcanddecimal(for pure Python implementation) modules.inspect.getcomments()now raises OSError instead of IndexError if the__firstlineno__value for a class is out of bound.gh-123374: Remove check for redefined memo entry in
pickletools.dis().gh-123504: Fixed reference leak in the finalization of
tkinter.gh-123430: Pages generated by the
http.servermodule allow the browser to apply its default dark mode.gh-123446: Fix empty function name in
TypeErrorwhencsv.reader(),csv.writer(), orcsv.register_dialect()are used without the required args.gh-123448: Fixed memory leak of
typing.NoDefaultby moving it to the static types array.gh-123409: Fix
ipaddress.IPv6Address.reverse_pointeroutput according to RFC 3596, §2.5. Patch by Bénédikt Tran.gh-123089: Make
weakref.WeakSetsafe against concurrent mutations while it is being iterated. Patch by Kumar Aditya.gh-123363: Show string value of
CONTAINS_OPoparg indisoutput. Patch by Alexandr153.gh-123341: Add
__class_getitem__()totkinter.Eventfor type subscript support at runtime. Patch by Adonis Rakateli.gh-119518: Speed up normalization of
pathlib.PurePathandPathobjects by not interning string parts.gh-123270: Applied a more surgical fix for malformed payloads in
zipfile.Pathcausing infinite loops (gh-122905) without breaking contents using legitimate characters.gh-73991: Add
pathlib.Path.copy_into()andmove_into(), which copy and move files and directories into existing directories.gh-123228: Fix return type for
_pyrepl.readline._ReadlineWrapper.get_line_buffer()to bestr(). Patch by Sergey B Kirpichev.gh-123240: Raise audit events for the
input()in the new REPL.gh-76960: Fix
urllib.parse.urljoin()andurllib.parse.urldefrag()for URIs containing empty components. For example,urljoin()with relative reference “?” now sets empty query and removes fragment. Preserve empty components (authority, params, query, fragment) inurljoin(). Preserve empty components (authority, params, query) inurldefrag().gh-116810: Resolve a memory leak introduced in CPython 3.10’s
sslwhen thessl.SSLSocket.sessionproperty was accessed. Speeds up read and write access to said property by no longer unnecessarily cloning session objects via serialization.gh-123243: Fix memory leak in
_decimal.gh-122546: Consistently use same file name for different exceptions in the new repl. Patch by Sergey B Kirpichev.
gh-123213:
xml.etree.ElementTree.Element.extend()andElementassignment no longer hide the internal exception if an erroneous generator is passed. Patch by Bar Harel.gh-85110: Preserve relative path in URL without netloc in
urllib.parse.urlunsplit()andurllib.parse.urlunparse().gh-122909: In urllib.request when URLError is raised opening an ftp URL, the exception argument is now consistently a string. Earlier versions passed either a string or an ftplib exception instance as the argument to URLError.
gh-123084: Deprecate
shutil.ExecError, which hasn’t been raised by anyshutilfunction since Python 3.4. It’s now an alias forRuntimeError.gh-123085: In a bare call to
importlib.resources.files(), ensure the caller’s frame is properly detected whenimportlib.resourcesis itself available as a compiled module only (no source).gh-123067: Fix quadratic complexity in parsing
"-quoted cookie values with backslashes byhttp.cookies.gh-123049: Add support for
UNNAMED_SECTIONinconfigparser.ConfigParser.add_section().gh-121735: When working with zip archives, importlib.resources now properly honors module-adjacent references (e.g.
files(pkg.mod)and not justfiles(pkg)).gh-122981: Fix
inspect.getsource()for generated classes with Python base classes (e.g. enums).gh-122903:
zipfile.Path.globnow correctly matches directories instead of silently omitting them.gh-122905:
zipfile.Pathobjects now sanitize names from the zipfile.gh-122873: Enable
jsonmodule to work as a script using the-mswitch:python -m json. See the JSON command-line interface documentation. Patch by Trey Hunner.gh-122858: Deprecate
asyncio.iscoroutinefunction()in favor ofinspect.iscoroutinefunction().gh-116263:
logging.handlers.RotatingFileHandlerno longer rolls over empty log files.gh-105376: Restore the deprecated
loggingwarn()method. It was removed in Python 3.13 alpha 1. Keep the deprecatedwarn()method in Python 3.13. Patch by Victor Stinner.gh-122311: Improve errors in the
picklemodule.PicklingErroris now raised more often instead ofUnicodeEncodeError,ValueErrorandAttributeError, and the original exception is chained to it. Improve and unify error messages in Python and C implementations.gh-122744: Bump the version of pip bundled in ensurepip to version 24.2.
gh-118761: Improve import time of
pprintby around seven times. Patch by Hugo van Kemenade.gh-118974: Add
decoratorparameter todataclasses.make_dataclass()to customize the functional creation of dataclasses.gh-118814: Fix the
typing.TypeVarconstructor when name is passed by keyword.gh-122637: Adjust
cmath.tanh(nanj)andcmath.tanh(infj)for recent C standards.gh-122478: Remove internal frames from tracebacks shown in
code.InteractiveInterpreterwith non-defaultsys.excepthook(). Save correct tracebacks insys.last_tracebackand update__traceback__attribute ofsys.last_valueandsys.last_exc.gh-116622: On Android, the
FICLONEandFICLONERANGEconstants are no longer exposed byfcntl, as these ioctls are blocked by SELinux.gh-82378: Make sure that the new REPL interprets
sys.tracebacklimitin the same way that the classic REPL did.gh-122334: Fix crash when importing
sslafter the main interpreter restarts.gh-122459: Optimize
picklingby name objects without the__module__attribute.gh-87320: In
code.InteractiveInterpreter, handle exceptions caused by calling a non-defaultsys.excepthook(). Before, the exception bubbled up to the caller, ending the REPL.gh-122272: On some platforms such as Linux, year with century was not 0-padded when formatted by
strftime()with C99-specific specifiers'%C'or'%F'. The 0-padding behavior is now guaranteed when the format specifiers'%C'and'%F'are supported by the C library. Patch by Ben Hsinggh-122400: Handle
ValueErrors raised byos.stat()infilecmp.dircmpandfilecmp.cmpfiles(). Patch by Bénédikt Tran.gh-121650:
emailheaders with embedded newlines are now quoted on output. Thegeneratorwill now refuse to serialize (write) headers that are unsafely folded or delimited; seeverify_generated_headers. (Contributed by Bas Bloemsaat and Petr Viktorin in gh-121650.)gh-122332: Fixed segfault with
asyncio.Task.get_coro()when using an eager task factory.gh-105733:
ctypes.ARRAY()is now soft deprecated: it no longer emits deprecation warnings and is not scheduled for removal.gh-122213: Add notes for pickle serialization errors that allow to identify the source of the error.
gh-119180: As part of PEP 749, add the following attributes for customizing evaluation of annotation scopes:
evaluate_valueontyping.TypeAliasTypeevaluate_bound,evaluate_constraints, andevaluate_defaultontyping.TypeVarevaluate_defaultontyping.ParamSpecevaluate_defaultontyping.TypeVarTuple
gh-119180: Fix handling of classes with custom metaclasses in
annotationlib.get_annotations.gh-122170: Handle
ValueErrors raised byos.stat()inlinecache. Patch by Bénédikt Tran.gh-122163: Add notes for JSON serialization errors that allow to identify the source of the error.
gh-122129: Improve support of method descriptors and wrappers in the help title.
gh-122145: Fix an issue when reporting tracebacks corresponding to Python code emitting an empty AST body. Patch by Nikita Sobolev and Bénédikt Tran.
gh-121723: Make
logging.config.dictConfig()accept any object implementing the Queue public API. See the queue configuration section for details. Patch by Bénédikt Tran.gh-82951: Serializing objects with complex
__qualname__(such as unbound methods and nested classes) by name no longer involves serializing parent objects by value in pickle protocols < 4.gh-120754:
Pathlib.read_bytesno longer opens the file in Python’s buffered I/O mode. This reduces overheads as the code reads a file in whole leading to a modest speedup.gh-113785:
csvnow correctly parses numeric fields (when used withcsv.QUOTE_NONNUMERICorcsv.QUOTE_STRINGS) which start with an escape character.gh-122088:
@warnings.deprecatednow copies the coroutine status of functions and methods so thatinspect.iscoroutinefunction()returns the correct result.gh-122081: Fix a crash in the
decimal.IEEEContext()optional function available via theEXTRA_FUNCTIONALITYconfiguration flag.gh-73991: Add
pathlib.Path.move(), which moves a file or directory tree.gh-121268: Remove workarounds for non-IEEE 754 systems in
cmath.gh-119698: Due to the lack of interest for
symtable.Class.get_methods(), the method is marked as deprecated and will be removed in Python 3.16. Patch by Bénédikt Tran.gh-121889: Adjusts
cmath.acosh(complex('0+nanj'))for recent C standards.gh-121804: Correctly show error locations, when
SyntaxErrorraised in new repl. Patch by Sergey B Kirpichev.gh-121797: Add alternative
FractionconstructorFraction.from_number().gh-121798: Add alternative
DecimalconstructorDecimal.from_number().gh-120930: Fixed a bug introduced by gh-92081 that added an incorrect extra blank to encoded words occurring in wrapped headers.
gh-57141: The shallow argument to
filecmp.dircmp(new in Python 3.13) is now keyword-only.gh-121245: Simplify handling of the history file in
site.register_readline()helper. TheCAN_USE_PYREPLvariable now will be initialized, when imported. Patch by Sergey B Kirpichev.gh-121249: Support the float complex and double complex C types in the
structmodule if the compiler has C11 complex arithmetic. Patch by Sergey B Kirpichev.gh-121486:
mathfunctionsisqrt(),log(),log2()andlog10()now support integers larger than2**2**32on 32-bit platforms.gh-121474: Fix missing sanity check for
partiesarg inthreading.Barrierconstructor. Patch by Clinton Christian (pygeek).gh-121450: Hard-coded breakpoints (
breakpoint()andpdb.set_trace()) now reuse the most recentPdbinstance that callsPdb.set_trace(), instead of creating a new one each time. As a result, all the instance specific data likedisplayandcommandsare preserved across Hard-coded breakpoints.gh-119169: Slightly speed up
os.walk()by simplifying exception handling.gh-121423: Improve import time of
socketby lazy importing modules and writingsocket.errorTabas a constant.gh-59110:
zipimportsupports now namespace packages when no directory entry exists.gh-119004: Fix a crash in OrderedDict.__eq__ when operands are mutated during the check. Patch by Bénédikt Tran.
gh-121313: Limit the reading size in the
multiprocessing.connection.Connectionclass to 64 KiB to prevent memory overallocation and unnecessary memory management system calls.gh-121332: Fix constructor of
astnodes with custom_attributes. Previously, passing custom attributes would raise aDeprecationWarning. Passing arguments to the constructor that are not in_fieldsor_attributesremains deprecated. Patch by Jelle Zijlstra.gh-121245: Fix a bug in the handling of the command history of the new REPL that caused the history file to be wiped at REPL exit.
gh-121210: Handle AST nodes with missing runtime fields or attributes in
ast.compare(). Patch by Bénédikt Tran.gh-121163: Add support for
allas an validactionforwarnings.simplefilter()andwarnings.filterwarnings().gh-121151: Fix wrapping of long usage text of arguments inside a mutually exclusive group in
argparse.gh-121141: Add support for
copy.replace()to AST nodes. Patch by Bénédikt Tran.gh-87744: Fix waitpid race while calling
send_signal()in asyncio. Patch by Kumar Aditya.gh-121027: Add a future warning in
functools.partial.__get__(). In future Python versionsfunctools.partialwill be a method descriptor.gh-121027: Make the
functools.partialobject a method descriptor.gh-117784: CPython now detects whether its linked TLS library supports TLSv1.3 post-handshake authentication and disables that feature if support is lacking.
gh-121025: Improve the
__repr__()offunctools.partialmethod. Patch by Bénédikt Tran.gh-121018: Fixed issues where
argparse.ArgumentParser.parse_args()did not honorexit_on_error=False. Based on patch by Ben Hsing.gh-119614: Fix truncation of strings with embedded null characters in some internal operations in
tkinter.gh-120910: When reading installed files from an egg, use
relative_to(walk_up=True)to honor files installed outside of the installation root.gh-61103: Support float complex, double complex and long double complex C types in
ctypesasc_float_complex,c_double_complexandc_longdouble_complexif the compiler has C11 complex arithmetic. Patch by Sergey B Kirpichev.gh-120888: Upgrade pip wheel bundled with ensurepip (pip 24.1.1)
gh-101830: Accessing the
tkinterobject’s string representation no longer converts the underlying Tcl object to a string on Windows.gh-120678: Fix regression in the new REPL that meant that globals from files passed using the
-iargument would not be included in the REPL’s global namespace. Patch by Alex Waygood.gh-120811: Fix possible memory leak in
contextvars.Context.run().gh-120782: Fix wrong references of the
datetimetypes after reloading the module.gh-120713:
datetime.datetime.strftime()now 0-pads years with less than four digits for the format specifiers%Yand%Gon Linux. Patch by Ben Hsinggh-120769: Make empty line in
pdbrepeats the last command even when the command is fromcmdqueue.gh-120780: Show string value of LOAD_SPECIAL oparg in
disoutput.gh-41431: Add
datetime.time.strptime()anddatetime.date.strptime(). Contributed by Wannes Boeykens.gh-120743: Soft deprecate
os.popen()andos.spawn*functions. They should no longer be used to write new code. Thesubprocessmodule is recommended instead. Patch by Victor Stinner.gh-120732: Fix
namepassing tounittest.mock.Mockobject when usingunittest.mock.create_autospec().gh-111259:
renow handles patterns like"[\s\S]"or"\s|\S"which match any character as effectively as a dot with theDOTALLmodifier ("(?s:.)").gh-120683: Fix an error in
logging.LogRecord, when the integer part of the timestamp is rounded up, while the millisecond calculation truncates, causing the log timestamp to be wrong by up to 999 ms (affected roughly 1 in 8 million timestamps).gh-118710:
ipaddress.IPv4Addressandipaddress.IPv6Addressattributesversionandmax_prefixlenare now available on the class.gh-120633: Move scrollbar and remove tear-off menus in turtledemo.
gh-120606: Allow users to use EOF to exit
commandsdefinition inpdbgh-120284: Allow
asyncio.Runner.run()to accept awaitable objects instead of simply coroutines.gh-120541: Improve the prompt in the “less” pager when
help()is called with non-string argument.gh-120495: Fix incorrect exception handling in Tab Nanny. Patch by Wulian233.
gh-120388: Improve a warning message when a test method in
unittestreturns something other thanNone. Now we show the returned object type and optional asyncio-related tip.gh-120381: Correct
inspect.ismethoddescriptor()to check also for the lack of__delete__(). Patch by Jan Kaliszewski.gh-90425: The OS byte in gzip headers is now always set to 255 when using
gzip.compress().gh-120343: Fix column offset reporting for tokens that come after multiline f-strings in the
tokenizemodule.gh-119180: As part of implementing PEP 649 and PEP 749, add a new module
annotationlib. Add support for unresolved forward references in annotations todataclasses,typing.TypedDict, andtyping.NamedTuple.gh-119600: Fix
unittest.mock.patch()to not read attributes of the target whennew_callableis set. Patch by Robert Collins.gh-120289: Fixed the use-after-free issue in
cProfileby disallowingdisable()andclear()in external timers.gh-82017: Added support for converting any objects that have the
as_integer_ratio()method to aFraction.gh-114053: Fix edge-case bug where
typing.get_type_hints()would produce incorrect results if type parameters in a class scope were overridden by assignments in a class scope andfrom __future__ import annotationssemantics were enabled. Patch by Alex Waygood.gh-114053: Fix erroneous
NameErrorwhen callinginspect.get_annotations()witheval_str=True`on a class that made use of PEP 695 type parameters in a module that hadfrom __future__ import annotationsat the top of the file. Patch by Alex Waygood.gh-120268: Prohibit passing
Noneto pure-Pythondatetime.date.fromtimestamp()to achieve consistency with C-extension implementation.gh-120244: Fix memory leak in
re.sub()when the replacement string contains backreferences.gh-120254: Added
commandsargument topdb.set_trace()which allows users to send debugger commands from the source file.gh-120211: Fix
tkinter.ttkwith Tcl/Tk 9.0.gh-71587: Fix crash in C version of
datetime.datetime.strptime()when called again on the restarted interpreter.gh-117983: Defer the
threadingimport inimportlib.utiluntil lazy loading is used.gh-120157: Remove unused constant
concurrent.futures._base._FUTURE_STATESinconcurrent.futures. Patch by Clinton Christian (pygeek).gh-120161:
datetimeno longer crashes in certain complex reference cycle situations.gh-119698: Fix
symtable.Class.get_methods()and document its behaviour. Patch by Bénédikt Tran.gh-120121: Add
concurrent.futures.InvalidStateErrorto module’s__all__.gh-119933: Add the
symtable.SymbolTableTypeenumeration to represent the possible outputs of thesymtable.SymbolTable.get_typemethod. Patch by Bénédikt Tran.gh-120029: Expose
symtable.Symbolmethodsis_free_class(),is_comp_iter()andis_comp_cell(). Patch by Bénédikt Tran.gh-120108: Fix calling
copy.deepcopy()onasttrees that have been modified to have references to parent nodes. Patch by Jelle Zijlstra.gh-120056: Add
socket.IP_RECVERRandsocket.IP_RECVTTLconstants (both available since Linux 2.2). Andsocket.IP_RECVORIGDSTADDRconstant (available since Linux 2.6.29).gh-120057: Added the
os.environ.refresh()method to updateos.environwith changes to the environment made byos.putenv(), byos.unsetenv(), or made outside Python in the same process. Patch by Victor Stinner.gh-120029: Expose
symtable.Symbol.is_type_parameter()in thesymtablemodule. Patch by Bénédikt Tran.gh-119819: Fix regression to allow logging configuration with multiprocessing queue types.
gh-65454:
unittest.mock.Mock.attach_mock()no longer triggers a call to aPropertyMockbeing attached.gh-117142: The
ctypesmodule may now be imported in all subinterpreters, including those that have their own GIL.gh-118835: Fix _pyrepl crash when using custom prompt with ANSI escape codes.
gh-81936:
help()andshowtopic()methods now respect a configured output argument topydoc.Helperand not use the pager in such cases. Patch by Enrico Tröger.gh-117398: The
_datetimemodule (C implementation fordatetime) now supports being imported in multiple interpreters.gh-119824: Print stack entry in
pdbwhen and only when user input is needed.gh-119838: In mixed arithmetic operations with
Fractionand complex, the fraction is now converted tofloatinstead ofcomplex.gh-119770: Make
termiosioctl()constants positive. Patch by Victor Stinner.gh-89727: Fix issue with
shutil.rmtree()where aRecursionErroris raised on deep directory trees.gh-119577: The
DeprecationWarningemitted when testing the truth value of anxml.etree.ElementTree.Elementnow describes unconditionally returningTruein a future version rather than raising an exception in Python 3.14.gh-89727: Partially fix issue with
shutil.rmtree()where aRecursionErroris raised on deep directory trees. A recursion error is no longer raised whenrmtree.avoids_symlink_attacksis false.gh-93963: Remove deprecated names from
importlib.abcas found inimportlib.resources.abc.gh-119118: Fix performance regression in the
tokenizemodule by caching thelinetoken attribute and calculating the column offset more efficiently.gh-89727: Fix issue with
os.fwalk()where aRecursionErrorwas raised on deep directory trees by adjusting the implementation to be iterative instead of recursive.gh-119594: If one calls pow(fractions.Fraction, x, module) with modulo not None, the error message now says that the types are incompatible rather than saying pow only takes 2 arguments. Patch by Wim Jeantine-Glenn and Mark Dickinson.
gh-119588:
zipfile.Path.is_symlinknow assesses if the given path is a symlink.gh-119562: Remove
ast.Num,ast.Str,ast.Bytes,ast.NameConstantandast.Ellipsis. They had all emitted deprecation warnings since Python 3.12. Patch by Alex Waygood.gh-119555: Catch
SyntaxErrorfromcompile()in the runsource() method of the InteractiveColoredConsole. Patch by Sergey B Kirpichev.gh-118908: Limit exposed globals from internal imports and definitions on new REPL startup. Patch by Eugene Triguba and Pablo Galindo.
gh-117865: Improve the import time of the
astmodule by deferring the import ofre. Patch by Jelle Zijlstra.gh-119127: Positional arguments of
functools.partial()objects now support placeholders viafunctools.Placeholder.gh-113892: Now, the method
sock_connectofasyncio.ProactorEventLoopraises aValueErrorif given socket is not in non-blocking mode, as well as in other loop implementations.gh-119506: Fix
io.TextIOWrapper.write()method breaks internal buffer when the method is called again during flushing internal buffer.gh-69214: Fix
fcntl.ioctl()request parameter: use anunsigned longinstead of anunsigned intfor the request parameter offcntl.ioctl()to support requests larger thanUINT_MAX. Patch by Victor Stinner.gh-119105:
difflib’sDIffer.compare()(and so alsondiff) can no longer be provoked into cubic-time behavior, or into unbounded recursion, and should generally be faster in ordinary cases too. Results may change in some cases, although that should be rare. Correctness of diffs is not affected. Some similar lines far apart may be reported as deleting one and adding the other, where before they were displayed on adjacent output lines with markup showing the intraline differences.gh-119443: The interactive REPL no longer runs with
from __future__ import annotationsenabled. Patch by Jelle Zijlstra.gh-119461: Add
socket.VMADDR_CID_LOCALconstant. Patch by Victor Stinner.gh-117398: Objects in the datetime C-API are now all statically allocated, which means better memory safety, especially when the module is reloaded. This should be transparent to users.
gh-118894:
asyncioREPL now has the same capabilities as PyREPL.gh-118911: In PyREPL, updated
maybe-accept’s logic so that if the user hits Enter twice, they are able to terminate the block even if there’s trailing whitespace. Also, now when the user hits arrow up, the cursor is on the last functional line. This matches IPython’s behavior. Patch by Aya Elsayed.gh-115225: Raise error on certain technically valid but pathological ISO 8601 strings passed to
datetime.time.fromisoformat()that were previously parsed incorrectly.gh-111201: Remove dependency to
readlinefrom the new Python REPL.gh-119189: When using the
**operator orpow()withFractionas the base and an exponent that is not rational, a float, or a complex, the fraction is no longer converted to a float.gh-119174: Fix high DPI causes turtledemo(turtle-graphics examples) windows blurry Patch by Wulian233 and Terry Jan Reedy
gh-119121: Fix a NameError happening in
asyncio.staggered.staggered_race. This function is now tested.gh-119105:
difflib.Differis much faster for some cases of diffs where many pairs of lines are equally similar.gh-119113: Fix issue where
pathlib.PurePath.with_suffix()didn’t raiseTypeErrorwhen givenNoneas a suffix.gh-118643: Fix an AttributeError in the
emailmodule when re-fold a long address list. Also fix more cases of incorrect encoding of the address separator in the address list.gh-73991: Add
pathlib.Path.copy(), which copies a file or directory to another.gh-58933: Make
pdbreturn to caller frame correctly whenf_traceof the caller frame is not setgh-82805: Support single-dot file extensions in
pathlib.PurePath.suffixand related attributes and methods. For example, thesuffixesofPurePath('foo.bar.')are now['.bar', '.']rather than[]. This brings file extension splitting in line withos.path.splitext().gh-118924: Remove
versionandversion_infofromsqlite3. Patch by Hugo van Kemenade.gh-118928: Disallow using a sequence of parameters with named placeholders in
sqlite3queries. Patch by Erlend E. Aasland.gh-118895: Setting attributes on
typing.NoDefaultnow raisesAttributeErrorinstead ofTypeError.gh-118868: Fixed issue where kwargs were no longer passed to the logging handler QueueHandler
gh-118827: Remove deprecated
Quoterclass fromurllib.parse. It had previously raised aDeprecationWarningsince Python 3.11. Patch by Nikita Sobolev.gh-118824: Remove deprecated
pty.master_open()andpty.slave_open(). Usepty.openpty()instead. Patch by Nikita Sobolev.gh-118851:
ctxarguments to the constructors ofastnode classes now default toast.Load(). Patch by Jelle Zijlstra.gh-101588: Remove copy, deepcopy, and pickle from itertools. These had previously raised a DeprecationWarning since Python 3.12.
gh-118805: Remove type, choices, and metavar parameters of
argparse.BooleanOptionalAction. They were deprecated since Python 3.12.gh-118803:
typing.ByteStringandcollections.abc.ByteStringare removed. They had previously raised aDeprecationWarningsince Python 3.12.gh-118798: The isdst parameter has been removed from
email.utils.localtime(). Patch by Hugo van Kemenade.gh-118760: Restore the default value of
tkiter.wantobjectsto1.gh-118760: Fix errors in calling Tkinter bindings on Windows.
gh-74033: Drop support for passing keyword arguments to
pathlib.Path.gh-101357: Suppress all
OSErrorexceptions frompathlib.Path.exists()andis_*()methods, rather than a selection of more common errors. The new behaviour is consistent withos.path.exists(),os.path.isdir(), etc. Usepathlib.Path.stat()to retrieve the file status without suppressing exceptions.gh-78707: Drop support for passing additional positional arguments to
pathlib.PurePath.relative_to()andis_relative_to().gh-118507: Fix
os.path.isfile()on Windows for pipes. Speedupos.path.isjunction()andos.path.lexists()on Windows with a native implementation.gh-118772: Allow
typing.TypeVarinstances without a default to follow instances without a default in some cases. Patch by Jelle Zijlstra.gh-118714: Allow
restartin post-mortem debugging ofpdb. Removed restart message when the user quits pdb from post-mortem mode.gh-118673: Removed executable bits and shebang from stdlib modules.
gh-110863:
os.path.realpath()now suppresses anyOSErrorfromos.readlink()when strict mode is disabled (the default).gh-118263: Speed up
os.path.splitroot()&os.path.normpath()with a direct C call.gh-110190: Fix ctypes structs with array on SPARC by setting
MAX_STRUCT_SIZEto 32 in stgdict. Patch by Jakub Kulikgh-118033: Fix
dataclasses.dataclass()not creating a__weakref__slot when subclassingtyping.Generic.gh-106531: In
importlib.resources, sync with importlib_resources 6.3.2, including:MultiplexedPathnow expectsTraversablepaths, deprecating string arguments toMultiplexedPath; Enabled support for resources in namespace packages in zip files; FixedNotADirectoryErrorwhen calling files on a subdirectory of a namespace package.gh-115937: Removed extra preprocessing for the
__signature__attribute: the code just check if it’s ainspect.Signatureinstance. Patch by Sergey B Kirpichev.gh-115808: Add
operator.is_none()andoperator.is_not_none()functions.gh-114264: Improve performance of
copy.deepcopy()by adding a fast path for atomic types.gh-113878: Add doc parameter to
dataclasses.field(), so it can be stored and shown as a documentation / metadata. If@dataclass(slots=True)is used, then the supplied string is available in the__slots__dict. Otherwise, the supplied string is only available in the correspondingdataclasses.Fieldobject.In order to support this feature we are changing the
__slots__format in dataclasses fromtupletodictwhen documentation / metadata is present.gh-113978: Ignore warnings on text completion inside REPL.
gh-113008: Correct argparse usage output for required, mutually exclusive groups containing a positional argument
gh-108172:
webbrowserhonors OS preferred browser on Linux when its desktop entry name contains the text of a known browser name.gh-109109: You can now get the raw TLS certificate chains from TLS connections via
ssl.SSLSocket.get_verified_chain()andssl.SSLSocket.get_unverified_chain()methods.Contributed by Mateusz Nowak.
gh-105623: Fix performance degradation in
logging.handlers.RotatingFileHandler. Patch by Craig Robson.gh-102450: Add missing ISO-8601 24:00 alternative to midnight of next day to
datetime.datetime.fromisoformat()anddatetime.time.fromisoformat(). Patch by Izan “TizzySaurus” Robinson (tizzysaurus@gmail.com)gh-103956: Fix lack of newline characters in
tracemodule output when line tracing is enabled but source code line for current frame is not available.gh-92081: Fix missing spaces in email headers when the spaces are mixed with encoded 8-bit characters.
gh-103194: Prepare Tkinter for C API changes in Tcl 8.7/9.0 to avoid
_tkinter.Tcl_Objbeing unexpectedly returned instead ofbool,str,bytearray, orint.gh-87106: Fixed handling in
inspect.Signature.bind()of keyword arguments having the same name as positional-only arguments when a variadic keyword argument (e.g.**kwargs) is present.gh-103134: Add additional methods to proxy objects in the
multiprocessingmodule:clear()andcopy()for proxies oflistfromkeys(),reversed(d),d | {},{} | d,d |= {'b': 2}for proxies ofdict
bpo-45767: Fix integer conversion in
os.major(),os.minor(), andos.makedev(). Support device numbers larger than2**63-1. Support non-existent device number (NODEV).bpo-44864: Do not translate user-provided strings in
argparse.ArgumentParser.bpo-41843: Solaris now uses
os.sendfile()fast-copy syscall for more efficientshutilfile copy related functions.bpo-15987: Implemented
ast.compare()for comparing two ASTs. Patch by Batuhan Taskaya with some help from Jeremy Hylton.gh-67693: Fix
urllib.parse.urlunparse()andurllib.parse.urlunsplit()for URIs with path starting with multiple slashes and no authority. Based on patch by Ashwin Ramaswami.bpo-14074: Fix
argparsemetavar processing to allow positional arguments to have a tuple metavar.
IDLE¶
gh-122392: Increase currently inadequate vertical spacing for the IDLE browsers (path, module, and stack) on high-resolution monitors.
gh-112938: Fix uninteruptable hang when Shell gets rapid continuous output.
gh-122482: Change About IDLE to direct users to discuss.python.org instead of the now unused idle-dev email and mailing list.
gh-78889: Stop Shell freezes by blocking user access to non-method sys.stdout.shell attributes, which are all private.
gh-120083: Add explicit black IDLE Hovertip foreground color needed for recent macOS. Fixes Sonoma showing unreadable white on pale yellow. Patch by John Riggles.
gh-120104: Fix padding in config and search dialog windows in IDLE.
Documentation¶
gh-124872: Added definitions for context, current context, and context management protocol, updated related definitions to be consistent, and expanded the documentation for
contextvars.Context.gh-125018: The
importlib.metadatadocumentation now includes semantic cross-reference targets for the significant documented APIs. This means intersphinx references likeimportlib.metadata.version()will now work as expected.gh-124720: Update “Using Python on a Mac” section of the “Python Setup and Usage” document and include information on installing free-threading support.
gh-124457: Remove coverity scan from the CPython repo. It has not been used since 2020 and is currently unmaintained.
gh-116622: Add an Android platform guide, and flag modules not available on Android.
gh-123976: Refresh docs around custom providers.
gh-70870: Clarified the dual usage of the term “free variable” (both the formal meaning of any reference to names defined outside the local scope, and the narrower pragmatic meaning of nonlocal variables named in
co_freevars).gh-121277: Writers of CPython’s documentation can now use
nextas the version for theversionchanged,versionadded,deprecateddirectives.gh-117765: Improved documentation for
unittest.mock.patch.dict()gh-121749: Fix documentation for
PyModule_AddObjectRef().gh-120012: Clarify the behaviours of
multiprocessing.Queue.empty()andmultiprocessing.SimpleQueue.empty()on closed queues. Patch by Bénédikt Tran.gh-119574: Added some missing environment variables to the output of
--help-env.bpo-34008: The
Py_Main()documentation moved from the “Very High Level API” section to the “Initialization and Finalization” section.Also make it explicit that we expect
Py_Mainto typically be called instead ofPy_Initializerather than after it (sincePy_Mainmakes its own call toPy_Initialize). Document that calling both is supported but is version dependent on which settings will be applied correctly.
Core and Builtins¶
gh-124375: Fix a crash in the free threading build when the GC runs concurrently with a new thread starting.
gh-125221: Fix possible race condition when calling
__reduce_ex__()for the first time in the free threading build.gh-125174: Make the handling of reference counts of immortal objects more robust. Immortal objects with reference counts that deviate from their original reference count by up to a billion (half a billion on 32 bit builds) are still counted as immortal.
gh-125039: Make
this_instrandprev_instrconst in cases generator.
Library¶
gh-125008: Fix
tokenize.untokenize()producing invalid syntax for double braces preceded by certain escape characters.
Core and Builtins¶
gh-124871: Fix compiler bug (in some versions of 3.13) where an assertion fails during reachability analysis.
gh-123378: Fix a crash in the
__str__()method ofUnicodeErrorobjects when theUnicodeError.startandUnicodeError.endvalues are invalid or out-of-range. Patch by Bénédikt Tran.gh-118093: Improve the experimental JIT compiler’s ability to stay “on trace” when encountering highly-biased branches.
gh-124642: Fixed scalability issue in free-threaded builds for lock-free reads from dictionaries in multi-threaded scenarios
gh-116510: Fix a crash caused by immortal interned strings being shared between sub-interpreters that use basic single-phase init. In that case, the string can be used by an interpreter that outlives the interpreter that created and interned it. For interpreters that share obmalloc state, also share the interned dict with the main interpreter.
gh-116510: Fix a bug that can cause a crash when sub-interpreters use “basic” single-phase extension modules. Shared objects could refer to PyGC_Head nodes that had been freed as part of interpreter cleanup.
gh-119180: The
__main__module no longer always contains an__annotations__dictionary in its global namespace.gh-124547: When deallocating an object with inline values whose
__dict__is still live: if memory allocation for the inline values fails, clear the dictionary. Prevents an interpreter crash.gh-124513: Fix a crash in FrameLocalsProxy constructor: check the number of arguments. Patch by Victor Stinner.
gh-124442: Fix nondeterminism in compilation by sorting the value of
__static_attributes__. Patch by kp2pml30.gh-124285: Fix bug where
bool(a)can be invoked more than once during the evaluation of a compound boolean expression.gh-123856: Fix PyREPL failure when a keyboard interrupt is triggered after using a history search
gh-65961: Deprecate the setting and using
__package__and__cached__.gh-119726: The JIT now generates more efficient code for calls to C functions resulting in up to 0.8% memory savings and 1.5% speed improvement on AArch64. Patch by Diego Russo.
gh-122878: Use the
pagerbinary, if available (e.g. on Debian and derivatives), to display REPLhelp().gh-124188: Fix reading and decoding a line from the source file with non-UTF-8 encoding for syntax errors raised in the compiler.
gh-124027: Support
<page up>,<page down>, and<delete>keys in the Python REPL when$TERMis set tovt100.gh-124022: Fix bug where docstring is removed from classes in interactive mode.
gh-123958: docstrings are now removed from the optimized AST in optimization level 2.
gh-123923: The
f_executablefield in the internal_PyInterpreterFramestruct now uses a tagged pointer. Profilers and debuggers that uses this field should clear the least significant bit to recover the PyObject* pointer.gh-77894: Fix possible crash in the garbage collector when it tries to break a reference loop containing a
memoryviewobject. Now amemoryviewobject can only be cleared if there are no buffers that refer it.gh-120221: asyncio REPL is now again properly recognizing KeyboardInterrupts. Display of exceptions raised in secondary threads is fixed.
gh-119310: Allow the new interactive shell to read history files written with the editline library that use unicode-escaped entries. Patch by aorcajo and Łukasz Langa.
gh-123572: Fix key mappings for various F-keys in Windows for the new REPL. Patch by devdanzin
Library¶
gh-123614: Add
turtle.save()to easily save Turtle drawings as PostScript files. Patch by Marie Roald and Yngve Mardal Moe.
Core and Builtins¶
gh-123339: Setting the
__module__attribute for a class now removes the__firstlineno__item from the type’s dict, so they will no longer be inconsistent.gh-119034: Change
<page up>and<page down>keys of the Python REPL to history search forward/backward. Patch by Victor Stinner.gh-123562: Improve
SyntaxErrormessage for usingcase ... as ...with not a name.gh-123545: Fix a double decref in rare cases on experimental JIT builds.
gh-123484: Fix
_Py_DebugOffsetsfor long objects to be relative to the start of the object rather than the start of a subobject.gh-123446: Fix empty function name in
TypeErrorwhen builtin magic methods are used without the required args.gh-123440: Improve
SyntaxErrormessage for usingexcept aswith not a name.gh-116017: Improved JIT memory consumption by periodically freeing memory used by infrequently-executed code. This change is especially likely to improve the memory footprint of long-running programs.
gh-123344: Add AST optimizations for type parameter defaults.
gh-123321: Prevent Parser/myreadline race condition from segfaulting on multi-threaded use. Patch by Bar Harel and Amit Wienner.
gh-123177: Fix a bug causing stray prompts to appear in the middle of wrapped lines in the new REPL.
gh-122982: Extend the deprecation period for bool inversion (
~) by two years.gh-123271: Make concurrent iterations over the same
zip()iterator safe under free-threading.gh-123275: Support
-X gil=1andPYTHON_GIL=1on non-free-threaded builds.gh-123177: Deactivate line wrap in the Apple Terminal via a ANSI escape code. Patch by Pablo Galindo
gh-123229: Fix valgrind warning by initializing the f-string buffers to 0 in the tokenizer. Patch by Pablo Galindo
gh-122298: Restore printout of GC stats when
gc.set_debug(gc.DEBUG_STATS)is called. This feature was accidentally removed when implementing incremental GC.gh-121804: Correctly show error locations when a
SyntaxErroris raised in the basic REPL. Patch by Sergey B Kirpichev.gh-115776: Enables inline values (Python’s equivalent of hidden classes) on any class who’s instances are of a fixed size.
gh-123142: Fix too-wide source location in exception tracebacks coming from broken iterables in comprehensions.
gh-123048: Fix a bug where pattern matching code could emit a
JUMP_FORWARDwith no source location.gh-118093: Break up
CALL_ALLOC_AND_ENTER_INITinto micro-ops and relax requirement for exact args, in order to increase the amount of code supported by tier 2.gh-123123: Fix displaying
SyntaxErrorexceptions covering multiple lines. Patch by Pablo Galindogh-123083: Fix a potential use-after-free in
STORE_ATTR_WITH_HINT.gh-123022: Fix crash in free-threaded build when calling
Py_Initialize()from a non-main thread.gh-118093: Add three specializations for
CALL_KW:CALL_KW_PYfor calls to Python functionsCALL_KW_BOUND_METHODfor calls to bound methodsCALL_KW_NON_PYfor all other calls
gh-122821: Make sure that branches in
whilestatements have consistent offsets forsys.monitoring.whilestatements are now compiled with a simple jump at the end of the body, instead of duplicating the test.gh-122907: Building with
HAVE_DYNAMIC_LOADINGnow works as well as it did in 3.12. Existing deficiences will be addressed separately. (See https://github.com/python/cpython/issues/122950.)gh-122888: Fix crash on certain calls to
str()with positional arguments of the wrong type. Patch by Jelle Zijlstra.gh-118093: Improve the experimental JIT’s handling of polymorphic code.
gh-122697: Fixed memory leaks at interpreter shutdown in the free-threaded build, and also reporting of leaked memory blocks via
-X showrefcount.gh-116622: Fix Android stdout and stderr messages being truncated or lost.
gh-122527: Fix a crash that occurred when a
PyStructSequencewas deallocated after its type’s dictionary was cleared by the GC. The type’stp_basicsizenow accounts for non-sequence fields that aren’t included in thePy_SIZEof the sequence.gh-122445: Add only fields which are modified via self.* to
__static_attributes__.gh-122417: In the free-threaded build, the reference counts for heap type objects are now partially stored in a distributed manner in per-thread arrays. This reduces contention on the heap type’s reference count fields when creating or destroying instances of the same type from multiple threads concurrently.
gh-116090: Fix an issue in JIT builds that prevented some
forloops from correctly firingRAISEmonitoring events.gh-122300: Preserve AST nodes for f-string with single-element format specifiers. Patch by Pablo Galindo
gh-120906:
frame.f_localsnow supports arbitrary hashable objects as keys.gh-122239: When a
list,tupleordictwith too many elements is unpacked, show the actual length in the error message.gh-122245: Detection of writes to
__debug__is moved from the compiler’s codegen stage to the symtable. This means that these errors are now detected even in code that is optimized away before codegen (such as assertions with the-Ocommand line option).gh-122234: Specializations for sums with float and complex inputs in
sum()now always use compensated summation. Also, for integer items in above specializations:PyLong_AsDouble()is used, instead ofPyLong_AsLongAndOverflow(). Patch by Sergey B Kirpichev.gh-122208: Dictionary watchers now only deliver the PyDict_EVENT_ADDED event when the insertion is in a known good state to succeed.
gh-122160: Remove the
BUILD_CONST_KEY_MAPopcode. UseBUILD_MAPinstead.gh-122029: Emit
c_callevents insys.setprofile()when aPyMethodObjectpointing to aPyCFunctionis called.gh-122026: Fix a bug that caused the tokenizer to not correctly identify mismatched parentheses inside f-strings in some situations. Patch by Pablo Galindo
gh-99108: Python’s hashlib now unconditionally uses the vendored HACL* library for Blake2. Python no longer accepts libb2 as an optional dependency for Blake2.
We refreshed HACL* to the latest version, and now vendor HACL*’s 128-bit and 256-bit wide vector implementations for Blake2, which are used on x86/x64 toolchains when the required CPU features are available at runtime.
HACL*’s 128-bit wide vector implementation of Blake2 can also run on ARM NEON and Power8, but lacking evidence of a performance gain, these are not enabled (yet).
Library¶
Core and Builtins¶
gh-121860: Fix crash when rematerializing a managed dictionary after it was deleted.
gh-121795: Improve performance of set membership testing,
set.remove()andset.discard()when the argument is a set.gh-121814: Fixed the SegFault when
PyEval_SetTrace()is used with no Python frame on stack.gh-121295: Fix PyREPL console getting into a blocked state after interrupting a long paste
gh-121794: Fix bug in free-threaded Python where a resurrected object could lead to a negative ref count assertion failure.
gh-121657: Improve the
SyntaxErrormessage if the user tries to useyield fromoutside a function.gh-121609: Fix pasting of characters containing unicode character joiners in the new REPL. Patch by Marta Gomez Macias
gh-121297: Previously, incorrect usage of
awaitor asynchronous comprehensions in code removed by the-Ooption was not flagged by the Python compiler. Now, such code raisesSyntaxError. Patch by Jelle Zijlstra.gh-117482: Unexpected slot wrappers are no longer created for builtin static types in subinterpreters.
gh-121562: Optimized performance of hex_from_char by replacing switch-case with a lookup table
gh-121499: Fix a bug affecting how multi-line history was being rendered in the new REPL after interacting with the new screen cache. Patch by Pablo Galindo
gh-121497: Fix a bug that was preventing the REPL to correctly respect the history when an input hook was set. Patch by Pablo Galindo
gh-121012: Tier 2 execution now ensures that list iterators remain exhausted, once they become exhausted.
gh-121439: Allow tuples of length 20 in the freelist to be reused.
gh-121288:
ValueErrormessages forlist.index(),range.index(),deque.index(),deque.remove()andShareableList.index()no longer contain the repr of the searched value (which can be arbitrary large) and are consistent with error messages for otherindex()andremove()methods.gh-121368: Fix race condition in
_PyType_Lookupin the free-threaded build due to a missing memory fence. This could lead to_PyType_Lookupreturning incorrect results on arm64.gh-121149: Added specialization for summation of complexes, this also improves accuracy of builtin
sum()for such inputs. Patch by Sergey B Kirpichev.gh-121130: Fix f-strings with debug expressions in format specifiers. Patch by Pablo Galindo
Library¶
gh-121381: Remove
subprocess._USE_VFORKescape hatch code and documentation. It was added just in case, and doesn’t have any known cases that require it.
Core and Builtins¶
gh-119726: Optimize code layout for calls to C functions from the JIT on AArch64. Patch by Diego Russo.
gh-121115:
PyLong_AsNativeBytes()no longer uses__index__()methods by default. ThePy_ASNATIVEBYTES_ALLOW_INDEXflag has been added to allow it.gh-120838:
Py_Finalize()andPy_FinalizeEx()now always run with the main interpreter active.gh-113433: Subinterpreters now get cleaned up automatically during runtime finalization.
gh-119726: Improve the speed and memory use of C function calls from JIT code on AArch64. Patch by Diego Russo
gh-116017: Simplify the warmup mechanism used for “side exits” in JIT code, resulting in slightly better performance and slightly lower memory usage for most platforms.
gh-98442: Fix too wide source locations of the cleanup instructions of a with statement.
gh-120754: Reduce the number of system calls invoked when reading a whole file (ex.
open('a.txt').read()). For a sample program that reads the contents of the 400+.rstfiles in the cpython repositoryDocfolder, there is an over 10% reduction in system call count.gh-119462: Make sure that invariants of type versioning are maintained: * Superclasses always have their version number assigned before subclasses * The version tag is always zero if the tag is not valid. * The version tag is always non-if the tag is valid.
gh-120437: Fix
_CHECK_STACK_SPACEoptimization problems introduced in gh-118322.gh-120722: Correctly set the bytecode position on return instructions within lambdas. Patch by Jelle Zijlstra.
gh-120367: Fix bug where compiler creates a redundant jump during pseudo-op replacement. Can only happen with a synthetic AST that has a try on the same line as the instruction following the exception handler.
gh-120507: Remove the
BEFORE_WITHandBEFORE_ASYNC_WITHinstructions. Add the newLOAD_SPECIALinstruction. Generate code forwithandasync withstatements using the new instruction.gh-113993: Strings interned with
sys.intern()are again garbage-collected when no longer used, as per the documentation. Strings interned with the C functionPyUnicode_InternInPlace()are still immortal. Internals of the string interning mechanism have been changed. This may affect performance and identities ofstrobjects.
Library¶
gh-120485: Add an override of
allow_reuse_porton classes subclassingsocketserver.TCPServerwhereallow_reuse_addressis also overridden.
Core and Builtins¶
gh-120384: Fix an array out of bounds crash in
list_ass_subscript, which could be invoked via some specifically tailored input: including concurrent modification of a list object, where one thread assigns a slice and another clears it.gh-120367: Fix crash in compiler on code with redundant NOPs and JUMPs which show up after exception handlers are moved to the end of the code.
Library¶
gh-120380: Fix Python implementation of
pickle.Picklerforbytesandbytearrayobjects when using protocol version 5. Patch by Bénédikt Tran.
Core and Builtins¶
gh-120397: Improve the throughput by up to two times for the
str.count(),bytes.count()andbytearray.count()methods for counting single characters.gh-120221: Deliver real signals on Ctrl-C and Ctrl-Z in the new REPL. Patch by Pablo Galindo
gh-120346: Respect
PYTHON_BASIC_REPLwhen running in interactive inspect mode (python -i). Patch by Pablo Galindogh-93691: Fix source locations of instructions generated for the iterator of a for statement.
gh-120198: Fix a crash when multiple threads read and write to the same
__class__of an object concurrently.gh-120298: Fix use-after free in
list_richcompare_implwhich can be invoked via some specifically tailored evil input.gh-119666: Fix a compiler crash in the case where two comprehensions in class scope both reference
__class__.gh-119726: JIT: Re-use trampolines on AArch64 when creating stencils. Patch by Diego Russo
gh-120225: Fix crash in compiler on empty block at end of exception handler.
gh-93691: Fix source locations of instructions generated for with statements.
gh-120097:
FrameLocalsProxynow subclassescollections.abc.Mappingand can be matched as a mapping inmatchstatementsgh-120080: Direct call to the
int.__round__()now acceptsNoneas a valid argument.gh-119933: Improve
SyntaxErrormessages for invalid expressions in a type parameters bound, a type parameter constraint tuple or a default type parameter. Patch by Bénédikt Tran.gh-119724: Reverted improvements to error messages for
elif/elsestatements not matching any valid statements, which made in hard to locate the syntax errors inside thoseelif/elseblocks.gh-119879: String search is now slightly faster for certain cases. It now utilizes last character gap (good suffix rule) for two-way periodic needles.
gh-119842: Honor
PyOS_InputHook()in the new REPL. Patch by Pablo Galindogh-119180:
classmethod()andstaticmethod()now wrap the__annotations__and__annotate__attributes of their underlying callable lazily. See PEP 649. Patch by Jelle Zijlstra.gh-119821: Fix execution of annotation scopes within classes when
globalsis set to a non-dict. Patch by Jelle Zijlstra.gh-118934: Make
PyEval_GetLocalsreturn borrowed referencegh-119740: Remove the previously-deprecated delegation of
int()to__trunc__().gh-119689: Generate stack effect metadata for pseudo instructions from bytecodes.c.
gh-109218:
complex()accepts now a string only as a positional argument. Passing a complex number as the “real” or “imag” argument is deprecated; it should only be passed as a single positional argument.gh-119548: Add a
clearcommand to the REPL. Patch by Pablo Galindogh-111999: Fix the signature of
str.format_map().gh-119560: An invalid assert in beta 1 has been removed. The assert would fail if
PyState_FindModule()was used in an extension module’s init function before the module def had been initialized.gh-119369: Fix deadlock during thread deletion in free-threaded build, which could occur when the GIL was enabled at runtime.
gh-119525: Fix deadlock involving
_PyType_Lookup()cache in the free-threaded build when the GIL is dynamically enabled at runtime.gh-119258: Eliminate type version guards in the tier two interpreter.
Note that setting the
tp_version_tagmanually (which has never been supported) may result in crashes.gh-119311: Fix bug where names are unexpectedly mangled in the bases of generic classes.
gh-119395: Fix bug where names appearing after a generic class are mangled as if they are in the generic class.
gh-119372: Correct invalid corner cases in complex division (resulted in
(nan+nanj)output), e.g.1/complex('(inf+infj)'). Patch by Sergey B Kirpichev.gh-119180: Evaluation of annotations is now deferred. See PEP 649 for details.
gh-119180: Replace
LOAD_ASSERTION_ERRORopcode withLOAD_COMMON_CONSTANTand add support forNotImplementedError.gh-119213: Non-builtin modules built with argument clinic were crashing if used in a subinterpreter before the main interpreter. The objects that were causing the problem by leaking between interpreters carelessly have been fixed.
gh-119011: Fixes
type.__type_params__to return an empty tuple instead of a descriptor.gh-118692: Avoid creating unnecessary
StopIterationinstances for monitoring.gh-119180: Add an
__annotate__attribute to functions, classes, and modules as part of PEP 649. Patch by Jelle Zijlstra.gh-119049: Fix displaying the source line for warnings created by the C API if the
warningsmodule had not yet been imported.gh-119057: Improve
ZeroDivisionErrorerror message. Now, all error messages are harmonized: all/,//, and%operations just use “division by zero” message. And0 ** -1operation uses “zero to a negative power”.gh-118844: Fix build failures when configuring with both
--disable-giland--enable-experimental-jit.gh-118921: Add
copy()method forFrameLocalsProxywhich returns a snapshotdictfor local variables.gh-117657: Fix data races on the field that stores a pointer to the interpreter’s main thread that occur in free-threaded builds.
gh-118750: If the C version of the
decimalmodule is available,int(str)now uses it to supply an asymptotically much faster conversion. However, this only applies if the string contains over about 2 million digits.gh-118767: Using
NotImplementedin a boolean context now raisesTypeError. Contributed by Jelle Zijlstra.gh-118561: Fix race condition in free-threaded build where
list.extend()could expose uninitialised memory to concurrent readers.gh-117139: Convert the Python evaluation stack to use internal stack references. The purpose is to support tagged pointers. In PEP 703, this will allow for its form of deferred reference counting. For both the default and free-threaded builds, this sets up the infrastructure for unboxed integers in the future.
Library¶
gh-115801: Raise
TypeErrorwhen passing a string todifflib.unified_diff()anddifflib.context_diff().
Core and Builtins¶
gh-117558: Improve error messages when a string, bytes or bytearray object of length 1 is expected.
gh-117195: Avoid assertion failure for debug builds when calling
object.__sizeof__(1)gh-116022: Improve the
__repr__()output ofASTnodes.gh-114091: Changed the error message for awaiting something that can’t be awaited from “object <type> can’t be used in an await expression” to “’<type>’ object can’t be awaited”.
gh-113190:
Py_Finalize()now deletes all interned strings.gh-84978: Add class methods
float.from_number()andcomplex.from_number().gh-95144: Improve the error message from
a in bwhenbis not a container to mention the term “container”.bpo-24766: Fix handling of
docargument to subclasses ofproperty.
C API¶
gh-123961: Convert the curses.window static type exposed by the
PyCursesWindow_Typemacro inInclude/py_curses.hto a heap type. Patch by Bénédikt Tran.gh-124502: Add
PyUnicode_Equal()function to the limited C API: test if two strings are equal. Patch by Victor Stinner.gh-124296:
PyDictObjectno longer maintains a private version tag fieldma_version_tagper PEP 699. This field was originally added in Python 3.6 (PEP 509) and deprecated in Python 3.12.gh-124160: Fix crash when importing modules containing state and single-phase initialization in a subinterpreter.
gh-124153: Add
PyType_GetBaseByToken()andPy_tp_tokenslot for easier type checking, related to PEP 489 and PEP 630.gh-124127: In the limited C API 3.14 and newer,
Py_REFCNT()is now implemented as an opaque function call to hide implementation details. Patch by Victor Stinner.gh-123880: Fixed a bug that prevented circular imports of extension modules that use single-phase initialization.
gh-123909:
PyType_FromSpec(),PyType_FromSpecWithBases()andPyType_FromModuleAndSpec()will now fail if the metaclass of the new type has customtp_new.gh-107954: Add functions to configure the Python initialization (PEP 741):
Patch by Victor Stinner.
gh-107954: Add functions to get and set the current runtime Python configuration:
Patch by Victor Stinner.
gh-123465:
Py_RELATIVE_OFFSETis now allowed inPyMemberDeffor the special offset member"__vectorcalloffset__", as well as the discouraged special offset members"__dictoffset__"and"__weaklistoffset__"gh-100554: Added a slot
Py_tp_vectorcallto settp_vectorcallvia thePyType_FromSpec()function family. Limited API extensions can use this feature to provide more efficient vector call-based implementation of__new__and__init__.gh-122854: Add
Py_HashBuffer()to compute and return the hash value of a buffer. Patch by Antoine Pitrou and Victor Stinner.gh-122728: Fix
PyEval_GetLocals()to avoidSystemError(“bad argument to internal function”). Patch by Victor Stinner.gh-116622: Make
PyObject_Printwork around a bug in Android and OpenBSD which prevented it from throwing an exception when trying to write to a read-only stream.gh-105201: Add
PyIter_NextItem()to replacePyIter_Next(), which has an ambiguous return value. Patch by Irit Katriel and Erlend Aasland.gh-121489: Export private
_PyBytes_Join()again.gh-121645: Add
PyBytes_Join(sep, iterable)function, similar tosep.join(iterable)in Python. Patch by Victor Stinner.gh-89364: Export the
PySignal_SetWakeupFd()function. Previously, the function was documented but it couldn’t be used in 3rd party code. Patch by Victor Stinner.gh-113993:
PyUnicode_InternInPlace()no longer prevents its argument from being garbage collected.Several functions that take
char *are now documented as possibly preventing string objects from being garbage collected; refer to their documentation for details:PyUnicode_InternFromString(),PyDict_SetItemString(),PyObject_SetAttrString(),PyObject_DelAttrString(),PyUnicode_InternFromString(), andPyModule_Add*convenience functions.gh-113601: Removed debug build assertions related to interning strings, which were falsely triggered by stable ABI extensions.
gh-112136: Restore the private
_PyArg_Parserstructure and the private_PyArg_ParseTupleAndKeywordsFast()function, previously removed in Python 3.13 alpha 1. Patch by Victor Stinner.gh-120642: Remove the private
_Py_CODEUNITtype from the public C API. The internalpycore_code.hheader should now be used to get this internal type. Patch by Victor Stinner.gh-120858:
PyDict_Next()no longer locks the dictionary in the free-threaded build. The locking needs to be done by the caller around the entire iteration loop.gh-120642: Remove the following unstable functions:
PyUnstable_Replace_Executor()PyUnstable_SetOptimizer()PyUnstable_GetOptimizer()PyUnstable_GetExecutor()PyUnstable_Optimizer_NewCounter()PyUnstable_Optimizer_NewUOpOptimizer()
Patch by Victor Stinner.
gh-120389: Add new functions to convert C
<stdint.h>numbers from/to Pythonint:Patch by Victor Stinner.
gh-120600: In the limited C API 3.14 and newer,
Py_TYPE()is now implemented as an opaque function call to hide implementation details. Patch by Victor Stinner.gh-70278:
PyUnicode_FromFormat()no longer produces the ending\ufffdcharacter for truncated C string when use precision with%sand%V. It now truncates the string before the start of truncated multibyte sequences.gh-119771: Set
errnoin_Py_c_pow()on overflows. Patch by Sergey B Kirpichev.gh-119182: Add a new
PyUnicodeWriterAPI to create a Pythonstrobject:Patch by Victor Stinner.
gh-119613: Soft deprecate the
Py_MEMCPYmacro: use directlymemcpy()instead. Patch by Victor Stinner.gh-119775: Creating
immutable typeswith mutable bases was deprecated since 3.12 and now raises aTypeError.gh-119585: Fix crash when a thread state that was created by
PyGILState_Ensure()calls a destructor that duringPyThreadState_Clear()that calls back intoPyGILState_Ensure()andPyGILState_Release(). This might occur when in the free-threaded build or when using thread-local variables whose destructors callPyGILState_Ensure().gh-119613: Macros
Py_IS_NAN,Py_IS_INFINITYandPy_IS_FINITEare soft deprecated.gh-119336: Restore the removed
_PyLong_NumBits()function. It is used by the pywin32 project. Patch by Ethan Smithgh-119344: The critical section API is now public as part of the non-limited C API.
gh-119333: Add
PyContext_AddWatcher()andPyContext_ClearWatcher()APIs to register callbacks to receive notification on enter and exit of context objects.gh-119247: Added
Py_BEGIN_CRITICAL_SECTION_SEQUENCE_FASTandPy_END_CRITICAL_SECTION_SEQUENCE_FASTmacros to make it possible to use PySequence_Fast APIs safely when free-threaded, and update str.join to work without the GIL using them.gh-111389: Add
PyHASH_MULTIPLIERconstant: prime multiplier used in string and various other hashes. Patch by Victor Stinner.gh-118771: Several C declarations with names that didn’t start with the
Pyor_Pyprefixes, which were added by mistake in 3.13 alpha and beta releases, were moved to internal headers.gh-116984: Make mimalloc includes relative to the current file to avoid embedders or extensions needing to include
Internal/mimallocif they are already including internal CPython headers.gh-118789: Add
PyUnstable_Object_ClearWeakRefsNoCallbacks(), which clears weakrefs without calling their callbacks.gh-118789: Restore
_PyWeakref_ClearRefthat was previously removed in Python 3.13 alpha 1.gh-117511: Make the
PyMutexpublic in the non-limited C API.gh-116560: Add
PyLong_GetSign()function. Patch by Sergey B Kirpichev.gh-97588: Fix creating bitfields in
ctypesstructures and unions. Fields no longer overlap.gh-87135: Attempting to acquire the GIL after runtime finalization has begun in a different thread now causes the thread to hang rather than terminate, which avoids potential crashes or memory corruption caused by attempting to terminate a thread that is running code not specifically designed to support termination. In most cases this hanging is harmless since the process will soon exit anyway.
The
PyThread_exit_threadfunction is now deprecated. Its behavior is inconsistent across platforms, and it can only be used safely in the unlikely case that every function in the entire call stack has been designed to support the platform-dependent termination mechanism. It is recommended that users of this function change their design to not require thread termination. In the unlikely case that thread termination is needed and can be done safely, users may migrate to calling platform-specific APIs such aspthread_exit(POSIX) or_endthreadex(Windows) directly.bpo-34008: Added
Py_IsInitializedto the list of APIs that are safe to call before the interpreter is initialized, and updated the embedding tests to cover it.
Build¶
gh-125269: Fix detection of whether
-latomicis needed when cross-compiling CPython using the configure script.gh-123990: Remove
WITH_FREELISTSmacro and--without-freelistsbuild configurationgh-124102: Update internal documentation under PCbuild, so it now correctly states that Windows requires VS2017 or later and Python 3.10 or later
gh-124043: Building using
--with-trace-refsis (temporarily) disallowed when the GIL is disabled.gh-123418: Updated Android build to use OpenSSL 3.0.15.
gh-123297: Propagate the value of
LDFLAGStoLDCXXSHAREDinsysconfig. Patch by Pablo Galindogh-121634: Allow for specifying the target compile triple for WASI.
gh-122578: Use WASI SDK 24 for testing.
gh-116622: Rename build variable
MODULE_LDFLAGSback toLIBPYTHON, as it’s used by package build systems (e.g. Meson).gh-118943: Fix an issue where the experimental JIT could be built several times by the
make regen-alltarget, leading to possible race conditions on heavily parallelized builds.gh-121996: Introduce ./configure –disable-safety and –enable-slower-safety options. Patch by Donghee Na.
gh-120522: Added a
--with-app-store-complianceoption to patch out known issues with macOS/iOS App Store review processes.gh-120371: Support WASI SDK 22 by explicitly skipping functions that are just stubs in wasi-libc.
gh-121731: Fix mimalloc compile error on GNU/Hurd
gh-121487: Fix deprecation warning for ATOMIC_VAR_INIT in mimalloc.
gh-121467: Fix a Makefile bug that prevented mimalloc header files from being installed.
gh-121103: On POSIX systems, excluding macOS framework installs, the lib directory for the free-threaded build now includes a “t” suffix to avoid conflicts with a co-located default build installation.
gh-120831: The default minimum iOS version was increased to 13.0.
gh-121082: Fix build failure when the developer use
--enable-pystatsarguments in configuration command after #118450.gh-120671: Fix failing configure tests due to a missing space when appending to CFLAGS.
gh-120602: Correctly handle LLVM installs with
LLVM_VERSION_SUFFIXwhen building with--enable-experimental-jit.gh-120688: On WASI in debug mode, Python is now built with compiler flag
-O3instead of-Og, to support more recursive calls. Patch by Victor Stinner.gh-118943: Fix a possible race condition affecting parallel builds configured with
--enable-experimental-jit, in whichFileNotFoundErrorcould be caused by another process already movingjit_stencils.h.newtojit_stencils.h.gh-120326: On Windows, fix build error when
--disable-giland--experimental-jitoptions are combined.gh-120291: Make the
python-configshell script compatible with non-bash shells.gh-113565: Improve
cursesandcurses.paneldependency checks in configure.gh-119729: On POSIX systems, the pkg-config (
.pc) filenames now include the ABI flags, which may include debug (“d”) and free-threaded (“t”). For example: *python-3.14.pc(default, non-debug build) *python-3.14d.pc(default, debug build) *python-3.14t.pc(free-threaded build)gh-119400:
make_ssl_certs, the script that prepares certificate data for the test suite, now allows specifying expiration dates.gh-115119: Fall back to the bundled libmpdec if a system version cannot be found.
gh-119132: Update
sys.versionto identify whether the build is default build or free-threading build. Patch By Donghee Na.gh-118836: Fix an
AssertionErrorwhen building with--enable-experimental-jitand the compiler emits aSHT_NOTEsection.gh-118943: Fix a possible race condition affecting parallel builds configured with
--enable-experimental-jit, in which compilation errors could be caused by an incompletely-generated header file.
Python 3.13.0 beta 1¶
Release date: 2024-05-08
Security¶
Core and Builtins¶
gh-118414: Add instrumented opcodes to YIELD_VALUE assertion for tracing cases.
gh-117953: When a builtin or extension module is imported for the first time, while a subinterpreter is active, the module’s init function is now run by the main interpreter first before import continues in the subinterpreter. Consequently, single-phase init modules now fail in an isolated subinterpreter without the init function running under that interpreter, whereas before it would run under the subinterpreter before failing, potentially leaving behind global state and callbacks and otherwise leaving the module in an inconsistent state.
gh-117549: Don’t use designated initializer syntax in inline functions in internal headers. They cause problems for C++ or MSVC users who aren’t yet using the latest C++ standard (C++20). While internal, pycore_backoff.h, is included (indirectly, via pycore_code.h) by some key 3rd party software that does so for speed.
gh-95382: Improve performance of
json.dumps()andjson.dump()when using the argument indent. Depending on the data the encoding usingjson.dumps()with indent can be up to 2 to 3 times faster.gh-116322: In
--disable-gilbuilds, the GIL will be enabled while loading C extension modules. If the module indicates that it supports running without the GIL, the GIL will be disabled once loading is complete. Otherwise, the GIL will remain enabled for the remainder of the interpreter’s lifetime. This behavior does not apply if the GIL has been explicitly enabled or disabled withPYTHON_GILor-Xgil.gh-118513: Fix incorrect
UnboundLocalErrorwhen two comprehensions in the same function both reference the same name, and in one comprehension the name is bound while in the other it’s an implicit global.gh-118518: Allow the Linux perf support to work without frame pointers using perf’s advanced JIT support. The feature is activated when using the
PYTHON_PERF_JIT_SUPPORTenvironment variable or when running Python with-Xperf_jit. Patch by Pablo Galindo.gh-117514: Add
sys._is_gil_enabled()function that returns whether the GIL is currently enabled. In the default build it always returnsTruebecause the GIL is always enabled. In the free-threaded build, it may returnTrueorFalse.gh-118164: Break a loop between the Python implementation of the
decimalmodule and the Python code for integer to string conversion. Also optimize integer to string conversion for values in the range from 9_000 to 135_000 decimal digits.gh-118473: Fix
sys.set_asyncgen_hooks()not to be partially set when raisingTypeError.gh-118465: Compiler populates the new
__firstlineno__field on a class with the line number of the first line of the class definition.gh-118492: Fix an issue where the type cache can expose a previously accessed attribute when a finalizer is run.
gh-117714: update
async_generator.athrow().close()andasync_generator.asend().close()to close their section of the underlying async generatorgh-111201: The interactive interpreter is now implemented in Python, which allows for a number of new features like colors, multiline input, history viewing, and paste mode. Contributed by Pablo Galindo, Łukasz Langa and Lysandros Nikolaou based on code from the PyPy project.
gh-74929: Implement PEP 667: converted
FrameType.f_localsandPyFrame_GetLocals()to return a write-through proxy object when the frame refers to a function or comprehension.gh-116767: Fix crash in compiler on ‘async with’ that has many context managers.
gh-118335: Change how to use the tier 2 interpreter. Instead of running Python with
-X uopsor setting the environment variablePYTHON_UOPS=1, this choice is now made at build time by configuring with--enable-experimental-jit=interpreter.Beware! This changes the environment variable to enable or disable micro-ops to
PYTHON_JIT. The oldPYTHON_UOPSis no longer used.gh-118306: Update JIT compilation to use LLVM 18
gh-118160: Annotation scopes within classes can now contain comprehensions. However, such comprehensions are not inlined into their parent scope at runtime. Patch by Jelle Zijlstra.
gh-118272: Fix bug where
generator.closedoes not free the generator frame’s locals.gh-118216: Don’t consider
__future__imports with dots before the module name.gh-118074: Make sure that the Executor objects in the COLD_EXITS array aren’t assumed to be GC-able (which would access bytes outside the object).
gh-107674: Lazy load frame line number to improve performance of tracing
gh-118082: Improve
SyntaxErrormessage for imports without names, like infrom x importandimportcases. It now points out to users thatimportexpects at least one name after it.gh-118090: Improve
SyntaxErrormessage for empty type param brackets.gh-117958: Added a
get_jit_code()method to access JIT compiled machine code from the UOp Executor when the experimental JIT is enabled. Patch by Anthony Shaw.gh-117901: Add option for compiler’s codegen to save nested instruction sequences for introspection.
gh-116622: Redirect stdout and stderr to system log when embedded in an Android app.
gh-109118: annotation scope within class scopes can now contain lambdas.
gh-117894: Prevent
agen.aclose()objects being re-used after.throw().gh-117881: prevent concurrent access to an async generator via athrow().throw() or asend().throw()
gh-117536: Fix a
RuntimeWarningwhen callingagen.aclose().throw(Exception).gh-117755: Fix mimalloc allocator for huge memory allocation (around 8,589,934,592 GiB) on s390x. Patch by Victor Stinner.
gh-117750: Fix issue where an object’s dict would get out of sync with the object’s internal values when being cleared.
obj.__dict__.clear()now clears the internal values, but leaves the dict attached to the object.gh-117431: Improve the performance of the following
bytesandbytearraymethods by adapting them to theMETH_FASTCALLcalling convention:count()find()index()rfind()rindex()
gh-117709: Speed up calls to
str()with positional-only argument, by using the PEP 590vectorcallcalling convention. Patch by Erlend Aasland.gh-117680: Give
_PyInstructionSequencea Python interface and use it in tests.gh-115776: Statically allocated objects are, by definition, immortal so must be marked as such regardless of whether they are in extension modules or not.
gh-117385: Remove unhandled
PY_MONITORING_EVENT_BRANCHandPY_MONITORING_EVENT_EXCEPTION_HANDLEDevents fromsys.settrace().gh-116322: Extension modules may indicate to the runtime that they can run without the GIL. Multi-phase init modules do so by calling providing
Py_MOD_GIL_NOT_USEDfor thePy_mod_gilslot, while single-phase init modules callPyUnstable_Module_SetGIL(mod, Py_MOD_GIL_NOT_USED)from their init function.gh-116129: Implement PEP 696, adding support for defaults on type parameters. Patch by Jelle Zijlstra.
gh-93502: Add two new functions to the C-API,
PyRefTracer_SetTracer()andPyRefTracer_GetTracer(), that allows to track object creation and destruction the same way thetracemallocmodule does. Patch by Pablo Galindogh-107674: Improved the performance of
sys.settrace()significantlygh-95754: Improve the error message when a script shadowing a module from the standard library causes
AttributeErrorto be raised. Similarly, improve the error message when a script shadowing a third party module attempts to access an attribute from that third party module while still initialising.gh-99180: Elide uninformative traceback indicators in
returnand simpleassignmentstatements. Patch by Pablo Galindo.gh-105879: Allow the globals and locals arguments to
exec()andeval()to be passed as keywords.
Library¶
gh-118418: A
DeprecationWarningis now emitted if you fail to pass a value to the new type_params parameter oftyping._eval_type()ortyping.ForwardRef._evaluate(). (Using either of these private and undocumented functions is discouraged to begin with, but failing to pass a value to thetype_paramsparameter may lead to incorrect behaviour on Python 3.12 or newer.)gh-118660: Add an optional second type parameter to
typing.ContextManagerandtyping.AsyncContextManager, representing the return types of__exit__()and__aexit__()respectively. This parameter defaults tobool | None.gh-118650: The
enummodule allows method named_repr_*to be defined onEnumtypes.gh-118648: Add type parameter defaults to
typing.Generatorandtyping.AsyncGenerator.gh-101137: Mime type
text/x-rstis now supported bymimetypes.gh-118164: The Python implementation of the
decimalmodule could appear to hang in relatively small power cases (like2**117) if context precision was set to a very high value. A different method to check for exactly representable results is used now that doesn’t rely on computing10**precision(which could be effectively too large to compute).gh-111744:
breakpoint()andpdb.set_trace()now enter the debugger immediately after the call rather than before the next line is executed.gh-118406: Add signature for
sqlite3.Connectionobjects.gh-101732: Use a Y2038 compatible openssl time function when available.
gh-118404: Fix
inspect.signature()for non-comparable callables.gh-118402: Fix
inspect.signature()for the result of thefunctools.cmp_to_key()call.gh-116622: On Android,
sysconfig.get_platformnow returns the format specified by PEP 738.gh-118285: Allow to specify the signature of custom callable instances of extension type by the
__text_signature__attribute. Specify signatures ofoperator.attrgetter,operator.itemgetter, andoperator.methodcallerinstances.gh-118314: Fix an edge case in
binascii.a2b_base64()strict mode, where excessive padding is not detected when no padding is necessary.gh-118271: Add the
PhotoImagemethodsread()to read an image from a file anddata()to get the image data. Add background and grayscale parameters toPhotoImagemethodwrite().gh-118225: Add the
PhotoImagemethodcopy_replace()to copy a region from one image to other image, possibly with pixel zooming and/or subsampling. Add from_coords parameter toPhotoImagemethodscopy(),zoom()andsubsample(). Add zoom and subsample parameters toPhotoImagemethodcopy().gh-118221: Fix a bug where
sqlite3.Connection.iterdump()could fail if a customrow factorywas used. Patch by Erlend Aasland.gh-118013: Fix regression introduced in gh-103193 that meant that calling
inspect.getattr_static()on an instance would cause a strong reference to that instance’s class to persist in an internal cache in theinspectmodule. This caused unexpected memory consumption if the class was dynamically created, the class held strong references to other objects which took up a significant amount of memory, and the cache contained the sole strong reference to the class. The fix for the regression leads to a slowdown ingetattr_static(), but the function should still be significantly faster than it was in Python 3.11. Patch by Alex Waygood.gh-118218: Speed up
itertools.pairwise()in the common case by up to 1.8x.gh-117486: Improve the behavior of user-defined subclasses of
ast.AST. Such classes will now require no changes in the usual case to conform with the behavior changes of theastmodule in Python 3.13. Patch by Jelle Zijlstra.gh-90848: Fixed
unittest.mock.create_autospec()to configure parent mock with keyword arguments.gh-118168: Fix incorrect argument substitution when
typing.Unpackis used with the builtintuple.typing.Unpacknow raisesTypeErrorwhen used with certain invalid types. Patch by Jelle Zijlstra.gh-118131: Add command-line interface for the
randommodule. Patch by Hugo van Kemenade.gh-118107: Fix
zipimportreading of ZIP64 files with file entries that are too big or offset too far.gh-102511: Fix
os.path.normpath()for UNC paths on Windows. Speed upos.path.splitroot()with a native implementation.gh-117535: Change the unknown filename of
warningsfromsysto<sys>to clarify that it’s not a real filename.gh-114053: Fix erroneous
NameErrorwhen callingtyping.get_type_hints()on a class that made use of PEP 695 type parameters in a module that hadfrom __future__ import annotationsat the top of the file. Patch by Alex Waygood.gh-116931: Add parameter fileobj check for
tarfile.TarFile.addfile()gh-117995: Don’t raise
DeprecationWarningwhen a sequence of parameters is used to bind indexed, nameless placeholders. See also gh-100668.gh-80361: Fix TypeError in
email.message.Message.get_payload()when the charset is RFC 2231 encoded.gh-86650: Fix IndexError when parse some emails with invalid Message-ID (including one-off addresses generated by Microsoft Outlook).
gh-117691: Improve the error messages emitted by
tarfiledeprecation warnings relating to PEP 706. If afilterargument is not provided toextract()orextractall, the deprecation warning now points to the line in the user’s code where the relevant function was called. Patch by Alex Waygood.gh-115874: Fixed a possible segfault during garbage collection of
_asyncio.FutureIterobjects. Patch by Savannah Ostrowski.gh-115060: Speed up
pathlib.Path.glob()by omitting an initialis_dir()call. As a result of this change,glob()can no longer raiseOSError.gh-77102:
sitemodule now parses.pthfile with UTF-8 first, and locale encoding ifUnicodeDecodeErrorhappened. It supported only locale encoding before.gh-76785: We’ve exposed the low-level
_interpretersmodule for the sake of the PyPI implementation of PEP 734. It was sometimes available as the_xxsubinterpretersmodule and was formerly used only for testing. For the most part, it should be considered an internal module, like_threadand_imp. See https://discuss.python.org/t/pep-734-multiple-interpreters-in-the-stdlib/41147/26.gh-115060: Speed up
pathlib.Path.glob()by not scanning directories for non-wildcard pattern segments.gh-117727: Speed up
pathlib.Path.iterdir()by usingos.scandir()internally.gh-117586: Speed up
pathlib.Path.walk()by working with strings internally.gh-117722: Change the new multi-separator support in
asyncio.StreamReader.readuntil()to only accept tuples of separators rather than arbitrary iterables.gh-117692: Fixes a bug when
doctest.DocTestFinderwas failing on wrappedbuiltin_function_or_method.gh-117348: Largely restored import time performance of configparser by avoiding dataclasses.
gh-117641: Speedup
os.path.commonpath()on Unix.gh-117663: Fix
_simple_enumto detect aliases when multiple arguments are present but only one is the member value.gh-117636: Speedup
os.path.join().gh-117618: Support
package.moduleasfilenameforbreakcommand ofpdbgh-102247: the status codes enum with constants in http.HTTPStatus are updated to include the names from RFC9110. This RFC includes some HTTP statuses previously only used for WEBDAV and assigns more generic names to them.
The old constants are preserved for backwards compatibility.
gh-117607: Speedup
os.path.relpath().gh-117586: Speed up
pathlib.Path.glob()by working with strings internally.gh-117225: Add colour to doctest output. Patch by Hugo van Kemenade.
gh-117566:
ipaddress.IPv6Address.is_loopback()will now returnTruefor IPv4-mapped loopback addresses, i.e. addresses in the::ffff:127.0.0.0/104address space.gh-117546: Fix issue where
os.path.realpath()stopped resolving symlinks after encountering a symlink loop on POSIX.gh-116720: Improved behavior of
asyncio.TaskGroupwhen an external cancellation collides with an internal cancellation. For example, when two task groups are nested and both experience an exception in a child task simultaneously, it was possible that the outer task group would misbehave, because its internal cancellation was swallowed by the inner task group.In the case where a task group is cancelled externally and also must raise an
ExceptionGroup, it will now call the parent task’scancel()method. This ensures that aasyncio.CancelledErrorwill be raised at the nextawait, so the cancellation is not lost.An added benefit of these changes is that task groups now preserve the cancellation count (
asyncio.Task.cancelling()).In order to handle some corner cases,
asyncio.Task.uncancel()may now reset the undocumented_must_cancelflag when the cancellation count reaches zero.gh-117516: Add
typing.TypeIs, implementing PEP 742. Patch by Jelle Zijlstra.gh-117503: Fix support of non-ASCII user names in bytes paths in
os.path.expanduser()on Posix.gh-117394:
os.path.ismount()is now 2-3 times faster if the user has permissions.gh-117313: Only treat
'\n','\r'and'\r\n'as line separators in re-folding theemailmessages. Preserve control characters'\v','\f','\x1c','\x1d'and'\x1e'and Unicode line separators'\x85','\u2028'and'\u2029'as is.gh-117142: Convert
_ctypesto multi-phase initialisation (PEP 489).gh-66543: Add the
mimetypes.guess_file_type()function which works with file path. Passing file path instead of URL inguess_type()is soft deprecated.gh-68583: webbrowser CLI: replace getopt with argparse, add long options. Patch by Hugo van Kemenade.
gh-116871: Name suggestions for
AttributeErrorandImportErrornow only include underscored names if the original name was underscored.gh-116023: Don’t show empty fields (value
Noneor[]) inast.dump()by default. Addshow_empty=Falseparameter to optionally show them.gh-115961: Added
nameandmodeattributes for compressed and archived file-like objects in modulesbz2,lzma,tarfileandzipfile. The value of themodeattribute ofgzip.GzipFilewas changed from integer (1or2) to string ('rb'or'wb'). The value of themodeattribute of the readable file-like object returned byzipfile.ZipFile.open()was changed from'r'to'rb'.gh-82062: Fix
inspect.signature()to correctly handle parameter defaults on methods in extension modules that use names defined in the module namespace.gh-83856: Honor
atexitfor allmultiprocessingstart methodsgh-113081: Print colorized exception just like built-in traceback in
pdbgh-112855: Speed up pickling of
pathlib.PurePathobjects. Patch by Barney Gale.gh-109617:
ncurses: fixed a crash that could occur on macOS 13 or earlier when Python was built with Apple Xcode 15’s SDK.gh-83151: Enabled arbitrary statements and evaluations in
pdbshell to access the local variables of the current frame, which made it possible for multi-scope code like generators or nested function to work.gh-110209: Add
__class_getitem__()totypes.GeneratorTypeandtypes.CoroutineTypefor type hinting purposes. Patch by James Hilton-Balfe.gh-108191: The
types.SimpleNamespacenow accepts an optional positional argument which specifies initial values of attributes as a dict or an iterable of key-value pairs.gh-62090: Fix assertion errors caused by whitespace in metavars or
SUPPRESS-ed groups inargparseby simplifying usage formatting. Patch by Ali Hamdan.gh-102402: Adjust
logging.LogRecordto usetime.time_ns()and fix minor bug related to floating-point math.gh-100242: Bring pure Python implementation
functools.partial.__new__more in line with the C-implementation by not just always checking for the presence of the attribute'func'on the first argument ofpartial. Instead, both the Python version and the C version perform anisinstance(func, partial)check on the first argument ofpartial.gh-99730: HEAD requests are no longer upgraded to GET request during redirects in urllib.
gh-66410: Setting the
tkintermodule globalwantobjectsto2before creating theTkobject or call thewantobjects()method of theTkobject with argument2makes now arguments to callbacks registered in thetkintermodule to be passed as various Python objects (int,float,bytes,tuple), depending on their internal representation in Tcl, instead of alwaysstr.tkinter.wantobjectsis now set to2by default.bpo-40943: Fix several IndexError when parse emails with truncated Message-ID, address, routes, etc, e.g.
example@.bpo-39324: Add mime type mapping for .md <-> text/markdown
bpo-18108:
shutil.chown()now supports dir_fd and follow_symlinks keyword arguments.bpo-30988: Fix parsing of emails with invalid address headers having a leading or trailing dot. Patch by tsufeki.
bpo-32839: Add the
after_info()method for Tkinter widgets.
Documentation¶
gh-117928: The minimum Sphinx version required for the documentation is now 6.2.1.
Build¶
gh-118734: Fixes Windows build when invoked directly (not through the
build.batscript) without specifying a value forUseTIER2.gh-115119: The
configureoption--with-system-libmpdecnow defaults toyes. The bundled copy oflibmpdecimalwill be removed in Python 3.15.gh-117845: Fix building against recent libedit versions by detecting readline hook signatures in configure.
gh-116622: A testbed project was added to run the test suite on Android.
gh-117645: Increase WASI stack size from 512 KiB to 8 MiB and the initial memory from 10 MiB to 20 MiB. Patch by Victor Stinner.
gh-115119: configure now uses pkg-config to detect
decimaldependencies if the--with-system-libmpdecoption is given.
Windows¶
gh-115119: Update Windows installer to use libmpdecimal 4.0.0.
gh-118486:
os.mkdir()now accepts mode of0o700to restrict the new directory to the current user.gh-118347: Fixes launcher updates not being installed.
gh-118293: The
multiprocessingmodule now passes theSTARTF_FORCEOFFFEEDBACKflag when spawning processes to tell Windows not to change the mouse cursor.gh-115009: Update Windows installer to use SQLite 3.45.3.
gh-90329: Suppress the warning displayed on virtual environment creation when the requested and created paths differ only by a short (8.3 style) name. Warnings will continue to be shown if a junction or symlink in the path caused the venv to be created in a different location than originally requested.
gh-117786: Fixes virtual environments not correctly launching when created from a Store install.
macOS¶
gh-115119: Update macOS installer to use libmpdecimal 4.0.0.
gh-114099: iOS preprocessor symbol usage was made compatible with older macOS SDKs.
gh-115009: Update macOS installer to use SQLite 3.45.3.
gh-91629: Use
~/.config/fish/conf.dconfigs and fish_add_path to setPATHwhen installing for the Fish shell.
IDLE¶
bpo-34774: Use user-selected color theme for Help => IDLE Doc.
C API¶
gh-118124: Fix
Py_BUILD_ASSERTandPy_BUILD_ASSERT_EXPRfor non-constant expressions: usestatic_assert()on C11 and newer. Patch by Victor Stinner.gh-110850: Add “Raw” variant of PyTime functions
Patch by Victor Stinner.
gh-117987: Restore functions removed in Python 3.13 alpha 1:
Patch by Victor Stinner.
gh-117929: Restore removed
PyEval_InitThreads()function. Patch by Victor Stinner.gh-117534: Improve validation logic in the C implementation of
datetime.datetime.fromisoformat()to better handle invalid years. Patch by Vlad Efanov.gh-68114: Fixed skipitem()’s handling of the old ‘w’ and ‘w#’ formatters. These are no longer supported and now raise an exception if used.
gh-111997: Add a C-API for firing monitoring events.
Python 3.13.0 alpha 6¶
Release date: 2024-04-09
Core and Builtins¶
gh-117494: Refactored the instruction sequence data structure out of compile.c into instruction_sequence.c.
gh-116968: Introduce a unified 16-bit backoff counter type (
_Py_BackoffCounter), shared between the Tier 1 adaptive specializer and the Tier 2 optimizer. The API used for adaptive specialization counters is changed but the behavior is (supposed to be) identical.The behavior of the Tier 2 counters is changed:
There are no longer dynamic thresholds (we never varied these).
All counters now use the same exponential backoff.
The counter for
JUMP_BACKWARDstarts counting down from 16.The
temperaturein side exits starts counting down from 64.
gh-117431: Improve the performance of the following
bytesandbytearraymethods by adapting them to theMETH_FASTCALLcalling convention:endswith()startswith()
gh-117431: Improve the performance of the following
strmethods by adapting them to theMETH_FASTCALLcalling convention:gh-117411: Move
PyFutureFeaturesto an internal header and make it private.gh-109120: Added handle of incorrect star expressions, e.g
f(3, *). Patch by Grigoryev Semyongh-117266: Fix crashes for certain user-created subclasses of
ast.AST. Such classes are now expected to set the_field_typesattribute.gh-99108: Updated the
hashlibbuilt-in HACL* project C code from upstream that we use for many implementations when they are not present via OpenSSL in a given build. This also avoids the rare potential for a C symbol name one definition rule linking issue.gh-117108: Change the old space bit of objects in the young generation from 0 to gcstate->visited, so that any objects created during GC will have the old bit set correctly if they get moved into the old generation.
gh-117108: The cycle GC now chooses the size of increments based on the total heap size, instead of the rate of object creation. This ensures that it can keep up with growing heaps.
gh-116735: For
INSTRUMENTED_CALL_FUNCTION_EX, setarg0tosys.monitoring.MISSINGinstead ofNoneforCALLevent.gh-113964: Starting new threads and process creation through
os.fork()are now only prevented once all non-daemon threads exit.gh-116626: Ensure
INSTRUMENTED_CALL_FUNCTION_EXalways emitsCALLgh-116554:
list.sort()now exploits more cases of partial ordering, particularly those with long descending runs with sub-runs of equal values. Those are recognized as single runs now (previously, each block of repeated values caused a new run to be created).gh-114099: Added a Loader that can discover extension modules in an iOS-style Frameworks folder.
gh-115775: Compiler populates the new
__static_attributes__field on a class with the names of attributes of this class which are accessed through self.X from any function in its body.gh-115776: The array of values, the
PyDictValuesstruct is now embedded in the object during allocation. This provides better performance in the common case, and does not degrade as much when the object’s__dict__is materialized.gh-108362: Implement an incremental cyclic garbage collector. By collecting the old generation in increments, there is no need for a full heap scan. This can hugely reduce maximum pause time for programs with large heaps.
Reduce the number of generations from three to two. The old generation is split into two spaces, “visited” and “pending”.
Collection happens in two steps:: * An increment is formed from the young generation and a small part of the pending space. * This increment is scanned and the survivors moved to the end of the visited space.
When the collecting space becomes empty, the two spaces are swapped.
gh-109870: Dataclasses now calls
exec()once per dataclass, instead of once per method being added. This can speed up dataclass creation by up to 20%.bpo-24612: Improve the
SyntaxErrorthat happens when ‘not’ appears after an operator. Patch by Pablo Galindo
Library¶
gh-117648: Improve performance of
os.path.join()andos.path.expanduser().gh-117584: Raise
TypeErrorfor non-paths inposixpath.relpath.gh-117467: Preserve mailbox ownership when rewriting in
mailbox.mbox.flush. Patch by Tony Mountifield.gh-114848: Raise
FileNotFoundErrorwhengetcwd()returns ‘(unreachable)’, which can happen on Linux >= 2.6.36 with glibc < 2.27.gh-117459:
asyncio.asyncio.run_coroutine_threadsafe()now keeps the traceback ofCancelledError,TimeoutErrorandInvalidStateErrorwhich are raised in the coroutine.gh-117381: Fix error message for
ntpath.commonpath().gh-117337: Deprecate undocumented
glob.glob0()andglob.glob1()functions. Useglob.glob()and pass a directory to its root_dir argument instead.gh-117348: Refactored
configparser.RawConfigParser._read()to reduce cyclometric complexity and improve comprehensibility.gh-117335: Raise TypeError for non-sequences for
ntpath.commonpath().gh-66449:
configparser.ConfigParsernow accepts unnamed sections before named ones, if configured to do so.gh-88014: In documentation of
gzip.GzipFilein module gzip, explain data type of optional constructor argument mtime, and recommendmtime = 0for generating deterministic streams.gh-117310: Fixed an unlikely early & extra
Py_DECREFtriggered crash insslwhen creating a new_ssl._SSLContextif CPython was built implausibly such that the default cipher list is empty or the SSL library it was linked against reports a failure from its CSSL_CTX_set_cipher_list()API.gh-117294: A
DocTestCasenow reports as skipped if all examples in the doctest are skipped.gh-98966: In
subprocess, raise a more informative message whenstdout=STDOUT.gh-117225: doctest: only print “and X failed” when non-zero, don’t pluralise “1 items”. Patch by Hugo van Kemenade.
gh-117205: Speed up
compileall.compile_dir()by 20% when using multiprocessing by increasingchunksize.gh-117178: Fix regression in lazy loading of self-referential modules, introduced in gh-114781.
gh-112383: Fix
dismodule’s handling ofENTER_EXECUTORinstructions.gh-117182: Lazy-loading of modules that modify their own
__class__no longer reverts the__class__totypes.ModuleType.gh-117084: Fix
zipfileextraction for directory entries with the name containing backslashes on Windows.gh-117114: Make
os.path.isdevdrive()available on all platforms. For those that do not offer Dev Drives, it will always returnFalse.gh-117110: Fix a bug that prevents subclasses of
typing.Anyto be instantiated with arguments. Patch by Chris Fu.gh-109653: Deferred select imports in importlib.metadata and importlib.resources for a 14% speedup.
gh-70647: Start the deprecation period for the current behavior of
datetime.datetime.strptime()andtime.strptime()which always fails to parse a date string with aValueErrorinvolving a day of month such asstrptime("02-29", "%m-%d")when a year is not specified and the date happen to be February 29th. This should help avoid users finding new bugs every four years due to a natural mistaken assumption about the API when parsing partial date values.gh-116987: Fixed
inspect.findsource()for class code objects.gh-114099: Modify standard library to allow for iOS platform differences.
gh-90872: On Windows,
subprocess.Popen.wait()no longer callsWaitForSingleObject()with a negative timeout: pass0ms if the timeout is negative. Patch by Victor Stinner.gh-116957: configparser: Don’t leave ConfigParser values in an invalid state (stored as a list instead of a str) after an earlier read raised DuplicateSectionError or DuplicateOptionError.
gh-115538:
_io.WindowsConsoleIOnow emit a warning if a boolean value is passed as a filedescriptor argument.gh-90095: Ignore empty lines and comments in
.pdbrcgh-106531: Refreshed zipfile._path from zipp 3.18, providing better compatibility for PyPy, better glob performance for deeply nested zipfiles, and providing internal access to
CompleteDirs.injectfor use in other tests (like importlib.resources).gh-63207: On Windows,
time.time()now uses theGetSystemTimePreciseAsFileTime()clock to have a resolution better than 1 us, instead of theGetSystemTimeAsFileTime()clock which has a resolution of 15.6 ms. Patch by Victor Stinner.gh-116764: Restore support of
Noneand other false values inurllib.parsefunctionsparse_qs()andparse_qsl(). Also, they now raise a TypeError for non-zero integers and non-empty sequences.gh-116811: In
PathFinder.invalidate_caches, delegate toMetadataPathFinder.invalidate_caches.gh-116647: Fix recursive child in dataclasses
gh-113171: Fixed various false positives and false negatives in
ipaddress.IPv4Address.is_private(see these docs for details)
Also in the corresponding
ipaddress.IPv4Networkandipaddress.IPv6Networkattributes.gh-63283: In
encodings.idna, any capitalization of the ACE prefix (xn--) is now acceptable. Patch by Pepijn de Vos and Zackery Spytz.gh-71042: Add
platform.android_ver(), which provides device and OS information on Android.gh-73468: Added new
math.fma()function, wrapping C99’sfma()operation: fused multiply-add function. Patch by Mark Dickinson and Victor Stinner.gh-116608: The
importlib.resourcesfunctionsis_resource(),open_binary(),open_text(),path(),read_binary(), andread_text()are un-deprecated, and support subdirectories via multiple positional arguments. Thecontents()function also allows subdirectories, but remains deprecated.gh-116484: Change automatically generated
tkinter.Checkbuttonwidget names to avoid collisions with automatically generatedtkinter.ttk.Checkbuttonwidget names within the same parent widget.gh-114314: In
ctypes, ctype data is now stored in type objects directly rather than in a dict subclass. This is an internal change that should not affect usage.gh-116401: Fix blocking
os.fwalk()andshutil.rmtree()on opening named pipe.gh-71052: Implement
ctypes.util.find_library()on Android.gh-90535: Fix support of interval values > 1 in
logging.TimedRotatingFileHandlerforwhen='MIDNIGHT'andwhen='Wx'.gh-113308: Remove some internal protected parts from
uuid:_has_uuid_generate_time_safe,_netbios_getnode,_ipconfig_getnode, and_load_system_functions. They were unused.gh-115627: Fix the
sslmodule error handling of connection terminate by peer. It now throws an OSError with the appropriate error code instead of an EOFError.gh-114847: Speed up
os.path.realpath()on non-Windows platforms.gh-114271: Fix a race in
threading.Thread.join().threading._MainThreadnow always represents the main thread of the main interpreter.PyThreadState.on_deleteandPyThreadState.on_delete_datahave been removed.gh-113538: Add
asyncio.Server.close_clients()andasyncio.Server.abort_clients()methods which allow to more forcefully close an asyncio server.gh-85287: Changes Unicode codecs to return UnicodeEncodeError or UnicodeDecodeError, rather than just UnicodeError.
gh-105866: Fixed
_get_slotsbug which caused error when defining dataclasses with slots and a weakref_slot.gh-96471: Add
asyncio.Queuetermination withshutdown()method.bpo-33533:
asyncio.as_completed()now returns an object that is both an asynchronous iterator and plain iterator. The new asynchronous iteration pattern allows for easier correlation between prior tasks and their completed results. This is a closer match toconcurrent.futures.as_completed()’s iteration pattern. Patch by Justin Arthur.bpo-27578:
inspect.getsource()(and related functions) work with empty module files, returning'\n'(or reasonable equivalent) instead of raisingOSError. Patch by Kernc.bpo-37141: Accept an iterable of separators in
asyncio.StreamReader.readuntil(), stopping when one of them is encountered.gh-66543: Make
mimetypes.guess_type()properly parsing of URLs with only a host name, URLs containing fragment or query, and filenames with only a UNC sharepoint on Windows. Based on patch by Dong-hee Na.bpo-15010:
unittest.TestLoader.discover()now saves the original value ofunittest.TestLoader._top_level_dirand restores it at the end of the call.
Documentation¶
Tests¶
gh-83434: Disable JUnit XML output (
--junit-xml=FILEcommand line option) in regrtest when hunting for reference leaks (-Roption). Patch by Victor Stinner.gh-117187: Fix XML tests for vanilla Expat <2.6.0.
gh-116333: Tests of TLS related things (error codes, etc) were updated to be more lenient about specific error message strings and behaviors as seen in the BoringSSL and AWS-LC forks of OpenSSL.
gh-117089: Consolidated tests for importlib.metadata in their own
metadatapackage.gh-115979: Update test_importlib so that it passes under WASI SDK 21.
gh-112536: Add –tsan to test.regrtest for running TSAN tests in reasonable execution times. Patch by Donghee Na.
gh-116307: Added import helper
isolated_modulesasCleanImportdoes not remove modules imported during the context. Use it in importlib.resources tests to avoid leavingmodaround to impede importlib.metadata tests.
Build¶
Windows¶
gh-117267: Ensure
DirEntry.stat().st_ctimebehaves consistently withos.stat()during the deprecation period ofst_ctimeby containing the same value asst_birthtime. After the deprecation period,st_ctimewill be the metadata change time (or unavailable throughDirEntry), and onlyst_birthtimewill contain the creation time.gh-116195: Improves performance of
os.getppid()by using an alternate system API when available. Contributed by vxiiduu.gh-88494: On Windows,
time.monotonic()now uses theQueryPerformanceCounter()clock to have a resolution better than 1 us, instead of theGetTickCount64()clock which has a resolution of 15.6 ms. Patch by Victor Stinner.gh-116773: Fix instances of
<_overlapped.Overlapped object at 0xXXX> still has pending operation at deallocation, the process may crash.gh-91227: Fix the asyncio ProactorEventLoop implementation so that sending a datagram to an address that is not listening does not prevent receiving any more datagrams.
gh-115119: Switched from vendored
libmpdecimalcode to a separately-hosted external package in thecpython-source-depsrepository when building the_decimalmodule.
C API¶
gh-87193:
_PyBytes_Resize()can now be called for bytes objects with reference count > 1, including 1-byte bytes objects. It creates a new bytes object and destroys the old one if it has reference count > 1.gh-117021: Fix integer overflow in
PyLong_AsPid()on non-Windows 64-bit platforms.gh-115756:
PyCode_GetFirstFree()is an ustable API now and has been renamed toPyUnstable_Code_GetFirstFree(). (Contributed by Bogdan Romanyuk in gh-115781)gh-116869: Add
test_cexttest: build a C extension to check if the Python C API emits C compiler warnings. Patch by Victor Stinner.gh-116869: Make the C API compatible with
-Werror=declaration-after-statementcompiler flag again. Patch by Victor Stinner.gh-116936: Add
PyType_GetModuleByDef()to the limited C API. Patch by Victor Stinner.gh-116809: Restore removed private
_PyErr_ChainExceptions1()function. Patch by Victor Stinner.gh-115754: In the limited C API version 3.13, getting
Py_None,Py_False,Py_True,Py_EllipsisandPy_NotImplementedsingletons is now implemented as function calls at the stable ABI level to hide implementation details. Getting these constants still return borrowed references. Patch by Victor Stinner.gh-115754: Add
Py_GetConstant()andPy_GetConstantBorrowed()functions to get constants. For example,Py_GetConstant(Py_CONSTANT_ZERO)returns a strong reference to the constant zero. Patch by Victor Stinner.gh-111696: Add support for
%T,%T#,%Nand%N#formats toPyUnicode_FromFormat(): format the fully qualified name of an object type and of a type: callPyType_GetModuleName(). See PEP 737 for more information. Patch by Victor Stinner.gh-111696: Add
PyType_GetModuleName()function to get the type’s module name. Equivalent to getting thetype.__module__attribute. Patch by Eric Snow and Victor Stinner.gh-111696: Add
PyType_GetFullyQualifiedName()function to get the type’s fully qualified name. Equivalent tof"{type.__module__}.{type.__qualname__}", ortype.__qualname__iftype.__module__is not a string or is equal to"builtins". Patch by Victor Stinner.gh-85283: The
fcntl,grp,pwd,termios,_statisticsand_testconsoleC extensions are now built with the limited C API. Patch by Victor Stinner.gh-111140: Add additional flags to
PyLong_AsNativeBytes()andPyLong_FromNativeBytes()to allow the caller to determine how to handle edge cases around values that fill the entire buffer.gh-113024: Add
PyObject_GenericHash()function.
Python 3.13.0 alpha 5¶
Release date: 2024-03-12
Security¶
gh-115398: Allow controlling Expat >=2.6.0 reparse deferral (CVE 2023-52425) by adding five new methods:
gh-114572:
ssl.SSLContext.cert_store_stats()andssl.SSLContext.get_ca_certs()now correctly lock access to the certificate store, when thessl.SSLContextis shared across multiple threads.
Core and Builtins¶
gh-116604: Respect the status of the garbage collector when indirect calls are made via
PyErr_CheckSignals()and the evaluation breaker. Patch by Pablo Galindogh-112087:
listis now compatible with the implementation of PEP 703.gh-116381: Add specialization for
CONTAINS_OP.gh-116296: Fix possible refleak in
object.__reduce__()internal error handling.gh-115823: Properly calculate error ranges in the parser when raising
SyntaxErrorexceptions caused by invalid byte sequences. Patch by Pablo Galindogh-115778: Add
tierNannotation for instruction definition in interpreter DSL.gh-115733: Fix crash when calling
next()on exhausted list iterators.gh-115700: The regen-cases build stage now works on Windows.
gh-115347: Fix bug where docstring was replaced by a redundant NOP when Python is run with
-OO.gh-115323: Make error message more meaningful for when
bytearray.extend()is called with astrobject.gh-112175: Every
PyThreadStatenow has its owneval_breaker, allowing specific threads to be interrupted.gh-115154: Fix a bug that was causing the
tokenize.untokenize()function to handle unicode named literals incorrectly. Patch by Pablo Galindogh-112433: Add ability to force alignment of
ctypes.Structureby way of the new_align_attribute on the class.gh-104090: The multiprocessing resource tracker now exits with non-zero status code if a resource leak was detected. It still exits with status code 0 otherwise.
gh-105858: Improve the constructors for
astnodes. Arguments of list types now default to an empty list if omitted, and optional fields default toNone. AST nodes now have an__annotations__attribute with the expected types of their attributes. Passing unrecognized extra arguments to AST nodes is deprecated and will become an error in Python 3.15. Omitting a required argument to an AST node is deprecated and will become an error in Python 3.15. Patch by Jelle Zijlstra.gh-101860: Expose
__name__attribute on property.gh-96497: Fix incorrect resolution of mangled class variables used in assignment expressions in comprehensions.
Library¶
gh-116349:
platform.java_ver()is deprecated and will be removed in 3.15. It was largely untested, had a confusing API, and was only useful for Jython support.gh-116143: Fix a race in pydoc
_start_server, eliminating a window in which_start_servercan return a thread that is “serving” but without adocserverset.gh-116127:
typing: implement PEP 705 which addstyping.ReadOnlysupport totyping.TypedDict.gh-116325:
typing: raiseSyntaxErrorinstead ofAttributeErroron forward references as empty strings.gh-115957: When
asyncio.TaskGroup.create_taskis called on an inactiveasyncio.TaskGroup, the given coroutine will be closed (which prevents aRuntimeWarning).gh-115978: Disable preadv(), readv(), pwritev(), and writev() on WASI.
Under wasmtime for WASI 0.2, these functions don’t pass test_posix (https://github.com/bytecodealliance/wasmtime/issues/7830).
gh-88352: Fix the computation of the next rollover time in the
logging.TimedRotatingFileHandlerhandler.computeRollover()now always returns a timestamp larger than the specified time and works correctly during the DST change.doRollover()no longer overwrite the already rolled over file, saving from data loss when run at midnight or during repeated time at the DST change.gh-87115: Set
__main__.__spec__toNonewhen running a script withpdbgh-76511: Fix UnicodeEncodeError in
email.Message.as_string()that results when a message that claims to be in the ascii character set actually has non-ascii characters. Non-ascii characters are now replaced with the U+FFFD replacement character, like in thereplaceerror handler.gh-89547: Add support for nested typing special forms like Final[ClassVar[int]].
gh-116040: [Enum] fix by-value calls when second value is falsey; e.g. Cardinal(1, 0)
gh-115821: [Enum] Improve error message when calling super().__new__() in custom __new__.
gh-85644: Use the
XDG_CURRENT_DESKTOPenvironment variable inwebbrowserto check desktop. Prefer it to the deprecatedGNOME_DESKTOP_SESSION_IDfor GNOME detection.gh-75988: Fixed
unittest.mock.create_autospec()to pass the call through to the wrapped object to return the real result.gh-115881: Fix issue where
ast.parse()would incorrectly flag conditional context managers (such aswith (x() if y else z()): ...) as invalid syntax iffeature_version=(3, 8)was passed. This reverts changes to the grammar made as part of gh-94949.gh-115886: Fix silent truncation of the name with an embedded null character in
multiprocessing.shared_memory.SharedMemory.gh-115532: Add kernel density estimation to the statistics module.
gh-115714: On WASI, the
timemodule no longer get process time usingtimes()orCLOCK_PROCESS_CPUTIME_ID, system API is that is unreliable and is likely to be removed from WASI. The affected clock functions fall back to callingclock().gh-115809: Improve algorithm for computing which rolled-over log files to delete in
logging.TimedRotatingFileHandler. It is now reliable for handlers withoutnamerand with arbitrary deterministicnamerthat leaves the datetime part in the file name unmodified.gh-74668:
urllib.parsefunctionsparse_qs()andparse_qsl()now support bytes arguments containing raw and percent-encoded non-ASCII data.gh-67044:
csv.writer()now always quotes or escapes'\r'and'\n', regardless of lineterminator value.gh-115712: Restore support of space delimiter with
skipinitialspace=Trueincsv.csv.writer()now quotes empty fields if delimiter is a space and skipinitialspace is true and raises exception if quoting is not possible.gh-112364: Fixed
ast.unparse()to handle format_spec with",'or\\. Patched by Frank Hoffmann.gh-112997: Stop logging potentially sensitive callback arguments in
asynciounless debug mode is active.gh-114914: Fix an issue where an abandoned
StreamWriterwould not be garbage collected.gh-111358: Fix a bug in
asyncio.BaseEventLoop.shutdown_default_executor()to ensure the timeout passed to the coroutine behaves as expected.gh-115618: Fix improper decreasing the reference count for
Noneargument inpropertymethodsgetter(),setter()anddeleter().gh-112720: Refactor
dis.ArgResolverto make it possible to subclass and change the way jump args are interpreted.gh-112006: Fix
inspect.unwrap()for types with the__wrapper__data descriptor. Fixinspect.Signature.from_callable()for builtinsclassmethod()andstaticmethod().gh-101293: Support callables with the
__call__()method and types with__new__()and__init__()methods set to class methods, static methods, bound methods, partial functions, and other types of methods and descriptors ininspect.Signature.from_callable().gh-113942:
pydocno longer skips global functions implemented as builtin methods, such asMethodDescriptorTypeandWrapperDescriptorType.gh-115256: Added DeprecationWarning when accessing the tarfile attribute of TarInfo objects. The attribute is never used internally and is only attached to TarInfos when the tarfile is opened in write-mode, not read-mode. The attribute creates an unnecessary reference cycle which may cause corruption when not closing the handle after writing a tarfile.
gh-115197:
urllib.requestno longer resolves the hostname before checking it against the system’s proxy bypass list on macOS and Windows.gh-113812:
DatagramTransport.sendto()will now send zero-length datagrams if called with an empty bytes object. The transport flow control also now accounts for the datagram header when calculating the buffer size.gh-114763: Protect modules loaded with
importlib.util.LazyLoaderfrom race conditions when multiple threads try to access attributes before the loading is complete.gh-114709:
posixpath.commonpath()now raises aValueErrorexception when passed an empty iterable. Previously,IndexErrorwas raised.posixpath.commonpath()now raises aTypeErrorexception when passedNone. Previously,ValueErrorwas raised.gh-114610: Fix bug where
pathlib.PurePath.with_stem()converted a non-empty path suffix to a stem when given an empty stem argument. It now raisesValueError, just likepathlib.PurePath.with_suffix()does when called on a path with an empty stem, given a non-empty suffix argument.gh-107361: Add
ssl.VERIFY_X509_PARTIAL_CHAINandVERIFY_X509_STRICTto the default SSL context created withssl.create_default_context().gh-112281: Allow creating union of types for
typing.Annotatedwith unhashable metadata.gh-111775: Fix
importlib.resources.simple.ResourceHandle.open()for text mode, added missedstreamargument.gh-90095: Make .pdbrc and -c work with any valid pdb commands.
gh-107625: Raise
configparser.ParsingErrorfromread()andread_file()methods ofconfigparser.ConfigParserif a key without a corresponding value is continued (that is, followed by an indented line).gh-107155: Fix incorrect output of
help(x)wherexis alambdafunction, which has an__annotations__dictionary attribute with a"return"key.gh-57141: Add option for non-shallow comparisons to
filecmp.dircmplikefilecmp.cmp(). Original patch by Steven Ward. Enhanced by Tobias Rautenkranzgh-69990:
Profile.print_stats()has been improved to accept multiple sort arguments. Patched by Chiu-Hsiang Hsu and Furkan Onder.gh-104061: Add
socket.SO_BINDTOIFINDEXconstant.gh-60346: Fix ArgumentParser inconsistent with parse_known_args.
gh-102389: Add
windows_31jto aliases forcp932codecgh-72249: Always include the module name in the
repr()offunctools.partial()objects. Patch by Furkan Onder and Anilyka Barry.gh-100985: Update HTTPSConnection to consistently wrap IPv6 Addresses when using a proxy.
gh-100884: email: fix misfolding of comma in address-lists over multiple lines in combination with unicode encoding.
gh-95782: Fix
io.BufferedReader.tell(),io.BufferedReader.seek(),_pyio.BufferedReader.tell(),io.BufferedRandom.tell(),io.BufferedRandom.seek()and_pyio.BufferedRandom.tell()being able to return negative offsets.gh-96310: Fix a traceback in
argparsewhen all options in a mutually exclusive group are suppressed.gh-93205: Fixed a bug in
logging.handlers.TimedRotatingFileHandlerwhere multiple rotating handler instances pointing to files with the same name but different extensions would conflict and not delete the correct files.bpo-31116: Add Z85 encoding to
base64.bpo-44865: Add missing call to localization function in
argparse.bpo-43952: Fix
multiprocessing.connection.Listener.accept()to accept empty bytes as authkey. Not accepting empty bytes as key causes it to hang indefinitely.bpo-42125: linecache: get module name from
__spec__if available. This allows getting source code for the__main__module when a custom loader is used.bpo-41122: Failing to pass arguments properly to
functools.singledispatchmethod()now throws a TypeError instead of hitting an index out of bounds internally.bpo-40818: The asyncio REPL now runs
sys.__interactivehook__on startup. The default implementation ofsys.__interactivehook__provides auto-completion to the asyncio REPL. Patch contributed by Rémi Lapeyre.bpo-33775: Add ‘default’ and ‘version’ help text for localization in argparse.
Documentation¶
gh-115399: Document CVE 2023-52425 of Expat <2.6.0 under “XML vulnerabilities”.
Tests¶
gh-71052: Add test exclusions to support running the test suite on Android.
gh-71052: Enable
test_concurrent_futureson platforms that support threading but not multiprocessing.gh-115796: Make ‘_testinternalcapi.assemble_code_object’ construct the exception table for the code object.
gh-115720: Leak tests (
-R,--huntrleaks) now show a summary of the number of leaks found in each iteration.gh-115122: Add
--bisectoption to regrtest test runner: run failed tests withtest.bisect_cmdto identify failing tests. Patch by Victor Stinner.gh-115596: Fix
ProgramPriorityTestsintest_ospermanently changing the process priority.gh-115556: On Windows, commas passed in arguments to
Tools\buildbot\test.batandPCbuild\\rt.batare now properly handled.gh-115420: Fix translation of exception handler targets by
_testinternalcapi.optimize_cfg.gh-115376: Fix segfault in
_testinternalcapi.compiler_codegenon bad input.
Build¶
gh-116313: Get WASI builds to work under wasmtime 18 w/ WASI 0.2/preview2 primitives.
gh-71052: Change Android’s
sys.platformfrom"linux"to"android".gh-116117: Backport
libb2’s PR #42 to fix compiling CPython on 32-bit Windows withclang-cl.gh-71052: Fix several Android build issues
gh-114099: A testbed project was added to run the test suite on iOS.
gh-115350: Fix building ctypes module with -DWIN32_LEAN_AND_MEAN defined
gh-111225: Link extension modules against libpython on Android.
gh-115737: The install name for libPython is now correctly set for non-framework macOS builds.
gh-114099: Makefile targets were added to support compiling an iOS-compatible framework build.
Windows¶
gh-116012: Ensure the value of
GetLastError()is preserved across GIL operations.gh-115582: Building extensions intended for free-threaded builds of CPython now require compiling with
/DPy_GIL_DISABLEDmanually when using a regular install. This is expected to change in future releases.gh-115554: The installer now has more strict rules about updating the Python install manager. In general, most users only have a single launcher installed and will see no difference. When multiple launchers have been installed, the option to install the launcher is disabled until all but one have been removed. Downgrading the launcher (which was never allowed) is now more obviously blocked.
gh-115543: Python install manager can now detect Python 3.13 when installed from the Microsoft Store, and will install Python 3.12 by default when
PYLAUNCHER_ALLOW_INSTALLis set.
macOS¶
gh-116145: Update macOS installer to Tcl/Tk 8.6.14.
IDLE¶
gh-88516: On macOS show a proxy icon in the title bar of editor windows to match platform behaviour.
Tools/Demos¶
C API¶
gh-114626: Add again
_PyCFunctionFastWithKeywordsname, removed in Python 3.13 alpha 4 by mistake. Keep the old private_PyCFunctionFastWithKeywordsname (Python 3.7) as an alias to the new public namePyCFunctionFastWithKeywords(Python 3.13a4). Patch by Victor Stinner.gh-111418: Add
PyHASH_MODULUS,PyHASH_BITS,PyHASH_INFandPyHASH_IMAGC macros. Patch by Sergey B Kirpichev.
Python 3.13.0 alpha 4¶
Release date: 2024-02-15
Security¶
gh-115399: Update bundled libexpat to 2.6.0
gh-115243: Fix possible crashes in
collections.deque.index()when the deque is concurrently modified.
Core and Builtins¶
gh-112087: For an empty reverse iterator for list will be reduced to
reversed(). Patch by Donghee Nagh-114570: Add
PythonFinalizationErrorexception. This exception derived fromRuntimeErroris raised when an operation is blocked during the Python finalization. Patch by Victor Stinner.gh-114695: Add
sys._clear_internal_caches(), which clears all internal performance-related caches (and deprecate the less-generalsys._clear_type_cache()function).gh-114828: Fix compilation crashes in uncommon code examples using
super()inside a comprehension in a class body.gh-112069: Adapt
setandfrozensetmethods to Argument Clinic.gh-115011: Setters for members with an unsigned integer type now support the same range of valid values for objects that has a
__index__()method as forint.gh-114887: Changed socket type validation in
create_datagram_endpoint()to accept all non-stream sockets. This fixes a regression in compatibility with raw sockets.gh-114944: Fixes a race between
PyParkingLot_Parkand_PyParkingLot_UnparkAll.gh-113462: Limit the number of versions that a single class can use. Prevents a few wayward classes using up all the version numbers.
gh-76763: The
chr()builtin function now always raisesValueErrorfor values outside the valid range. Previously it raisedOverflowErrorfor very large or small values.gh-114806: No longer specialize calls to classes, if those classes have metaclasses. Fixes bug where the
__call__method of the metaclass was not being called.gh-107944: Improve error message for function calls with bad keyword arguments via getargs
gh-112529: The free-threaded build no longer allocates space for the
PyGC_Headstructure in objects that support cyclic garbage collection. A number of other fields and data structures are used as replacements, includingob_gc_bits,ob_tid, and mimalloc internal data structures.gh-114456: Lower the recursion limit under a debug build of WASI.
gh-114083: Compiler applies folding of LOAD_CONST with following instruction in a separate pass before other optimisations. This enables jump threading in certain circumstances.
gh-114388: Fix a
RuntimeWarningemitted when assign an integer-like value that is not an instance ofintto an attribute that corresponds to a C struct member of type T_UINT and T_ULONG. Fix a doubleRuntimeWarningemitted when assign a negative integer value to an attribute that corresponds to a C struct member of type T_UINT.gh-114265: Compiler propagates line numbers before optimization, leading to more optimization opportunities and removing the need for the
guarantee_lineno_for_exitshack.gh-112529: The free-threaded build now has its own thread-safe GC implementation that uses mimalloc to find GC tracked objects. It is non-generational, unlike the existing GC implementation.
gh-114050: Fix segmentation fault caused by an incorrect format string in
TypeErrorexception when more than two arguments are passed toint.gh-112354: The
END_FORinstruction now pops only one value. This is to better support side exits in loops.gh-113884: Make
queue.SimpleQueuethread safe when the GIL is disabled.gh-114058: Implement the foundations of the Tier 2 redundancy eliminator.
gh-113939: frame.clear(): Clear frame.f_locals as well, and not only the fast locals. This is relevant once frame.f_locals was accessed, which would contain also references to all the locals.
gh-112050: Convert
collections.dequeto use Argument Clinic.gh-112050: Make methods on
collections.dequethread-safe when the GIL is disabled.gh-113464: Add an option (
--enable-experimental-jitforconfigure-based builds or--experimental-jitforPCbuild-based ones) to build an experimental just-in-time compiler, based on copy-and-patchgh-113055: Make interp->obmalloc a pointer. For interpreters that share state with the main interpreter, this points to the same static memory structure. For interpreters with their own obmalloc state, it is heap allocated. Add free_obmalloc_arenas() which will free the obmalloc arenas and radix tree structures for interpreters with their own obmalloc state.
gh-55664: Add warning when creating
typeusing a namespace dictionary with non-string keys. Patched by Daniel Urban and Furkan Onder.gh-104530: Use native Win32 condition variables.
Library¶
gh-115392: Fix a bug in
doctestwhere incorrect line numbers would be reported for decorated functions.gh-114563: Fix several
format()bugs when using the C implementation ofDecimal: * memory leak in some rare cases when using thezformat option (coerce negative 0) * incorrect output when applying thezformat option to typeF(fixed-point with capitalNAN/INF) * incorrect output when applying the#format option (alternate form)gh-102840: Fix confused traceback when floordiv, mod, or divmod operations happens between instances of
fractions.Fractionandcomplex.gh-115165: Most exceptions are now ignored when attempting to set the
__orig_class__attribute on objects returned when callingtypinggeneric aliases (including generic aliases created usingtyping.Annotated). Previously onlyAttributeErrorwas ignored. Patch by Dave Shawley.gh-112903: Fix “issubclass() arg 1 must be a class” errors in certain cases of multiple inheritance with generic aliases (regression in early 3.13 alpha releases).
gh-115133: Fix tests for
XMLPullParserwith Expat 2.6.0.gh-115059:
io.BufferedRandom.read1()now flushes the underlying write buffer.gh-79382: Trailing
**no longer allows to match files and non-existing paths in recursiveglob().gh-67837: Avoid race conditions in the creation of directories during concurrent extraction in
tarfileandzipfile.gh-115060: Speed up
pathlib.Path.glob()by removing redundant regex matching.gh-97928: Partially revert the behavior of
tkinter.Text.count(). By default it preserves the behavior of older Python versions, except that settingwantobjectsto 0 no longer has effect. Add a new parameter return_ints: specifyingreturn_ints=TruemakesText.count()always returning the single count as an integer instead of a 1-tuple orNone.gh-114628: When csv.Error is raised when handling TypeError, do not print the TypeError traceback.
gh-85984: Added
_POSIX_VDISABLEfrom C’s<unistd.h>totermios.gh-114965: Update bundled pip to 24.0
gh-114959:
tarfileno longer ignores errors when trying to extract a directory on top of a file.gh-114894: Add
array.array.clear().gh-114071: Support tuple subclasses using auto() for enum member value.
gh-109475: Fix support of explicit option value “–” in
argparse(e.g.--option=--).gh-49766: Fix
date-datetimecomparison. Now the special comparison methods like__eq__and__lt__returnNotImplementedif one of comparands isdateand other isdatetimeinstead of ignoring the time part and the time zone or forcefully return “not equal” or raiseTypeError. It makes comparison ofdateanddatetimesubclasses more symmetric and allows to change the default behavior by overriding the special comparison methods in subclasses.gh-110190: Fix ctypes structs with array on Windows ARM64 platform by setting
MAX_STRUCT_SIZEto 32 in stgdict. Patch by Diego Russogh-114678: Ensure that deprecation warning for ‘N’ specifier in
Decimalformat is not raised for cases where ‘N’ appears in other places in the format specifier. Based on patch by Stefan Krah.gh-70303: Return both files and directories from
pathlib.Path.glob()if a pattern ends with “**”. Previously only directories were returned.gh-109653: Improve import time of
importlib.metadataandemail.utils.gh-113280: Fix a leak of open socket in rare cases when error occurred in
ssl.SSLSocketcreation.gh-77749:
email.policy.EmailPolicy.fold()now always encodes non-ASCII characters in headers ifutf8is false.gh-83383: Synchronization of the
dbm.dumbdatabase is now no-op if there was no modification since opening or last synchronization. The directory file for a newly created emptydbm.dumbdatabase is now created immediately after opening instead of deferring this until synchronizing or closing.gh-91602: Add filter keyword-only parameter to
sqlite3.Connection.iterdump()for filtering database objects to dump. Patch by Mariusz Felisiak.gh-112451: Prohibit subclassing pure-Python
datetime.timezone. This is consistent with C-extension implementation. Patch by Mariusz Felisiak.gh-69893: Add the
close()method for the iterator returned byxml.etree.ElementTree.iterparse().gh-109653: Reduce the import time of
threadingmodule by ~50%. Patch by Daniel Hollas.gh-114492: Make the result of
termios.tcgetattr()reproducible on Alpine Linux. Previously it could leave a random garbage in some fields.gh-114315: Make
threading.Locka real class, not a factory function. Add__new__to_thread.locktype.gh-100414: Add
dbm.sqlite3as a backend todbm, and make it the new defaultdbmbackend. Patch by Raymond Hettinger and Erlend E. Aasland.gh-113267: Revert changes in gh-106584 which made calls of
TestResultmethodsstartTest()andstopTest()unbalanced.gh-75128: Ignore an
OSErrorinasyncio.BaseEventLoop.create_server()when IPv6 is available but the interface cannot actually support it.gh-114423:
_DummyThreadentries inthreading._activeare now automatically removed when the related thread dies.gh-114257: Dismiss the
FileNotFounderror inctypes.util.find_library()and just returnNoneon Linux.gh-114321: Expose more platform specific constants in the
fcntlmodule on Linux, macOS, FreeBSD and NetBSD.gh-114328: The
tty.setcbreak()and newtty.cfmakecbreak()no longer clears the terminal input ICRLF flag. This fixes a regression introduced in 3.12 that no longer matched how OSes define cbreak mode in theirstty(1)manual pages.gh-114281: Remove type hints from
Lib/asyncio/staggered.py. The annotations in the typeshed project should be used instead.gh-101438: Avoid reference cycle in ElementTree.iterparse. The iterator returned by
ElementTree.iterparsemay hold on to a file descriptor. The reference cycle prevented prompt clean-up of the file descriptor if the returned iterator was not exhausted.gh-114198: The signature for the
__replace__method ondataclassesnow has the first argument namedself, rather thanobj.gh-104522:
OSErrorraised when run a subprocess now only has filename attribute set to cwd if the error was caused by a failed attempt to change the current directory.gh-114149: Enum: correctly handle tuple subclasses in custom
__new__.gh-83648: Support deprecation of options, positional arguments and subcommands in
argparse.gh-114087: Speed up
dataclasses.asdictup to 1.35x.gh-109534: Fix a reference leak in
asyncio.selector_events.BaseSelectorEventLoopwhen SSL handshakes fail. Patch contributed by Jamie Phan.gh-79634: Accept path-like objects as patterns in
pathlib.Path.glob()andrglob().gh-112202: Ensure that a
asyncio.Condition.notify()call does not get lost if the awakenedTaskis simultaneously cancelled or encounters any other error.gh-113951: Fix the behavior of
tag_unbind()methods oftkinter.Textandtkinter.Canvasclasses with three arguments. Previously,widget.tag_unbind(tag, sequence, funcid)destroyed the current binding for sequence, leaving sequence unbound, and deleted the funcid command. Now it removes only funcid from the binding for sequence, keeping other commands, and deletes the funcid command. It leaves sequence unbound only if funcid was the last bound command.gh-97959: Fix rendering class methods, bound methods, method and function aliases in
pydoc. Class methods no longer have “method of builtins.type instance” note. Corresponding notes are now added for class and unbound methods. Method and function aliases now have references to the module or the class where the origin was defined if it differs from the current. Bound methods are now listed in the static methods section. Methods of builtin classes are now supported as well as methods of Python classes.gh-113796: Add more validation checks in the
csv.Dialectconstructor.ValueErroris now raised if the same character is used in different roles.gh-113732: Fix support of
QUOTE_NOTNULLandQUOTE_STRINGSincsv.reader().gh-113225: Speed up
pathlib.Path.walk()by usingos.DirEntry.pathwhere possible.gh-89039: When replace() method is called on a subclass of datetime, date or time, properly call derived constructor. Previously, only the base class’s constructor was called.
Also, make sure to pass non-zero fold values when creating subclasses in various methods. Previously, fold was silently ignored.
gh-112919: Speed-up
datetime.datetime.replace(),datetime.date.replace()anddatetime.time.replace().gh-59013: Set breakpoint on the first executable line of the function, instead of the line of function definition when the user do
break funcusingpdbgh-112343: Improve handling of pdb convenience variables to avoid replacing string contents.
gh-112240: Add option to calendar module CLI to specify the weekday to start each week. Patch by Steven Ward.
gh-111741: Recognise
image/webpas a standard format in themimetypesmodule.gh-43457: Fix the
tkinterwidget methodwm_attributes(). It now accepts the attribute name without the minus prefix to get window attributes and allows to specify attributes and values to set as keyword arguments. Add new optional keyword argument return_python_dict: callingw.wm_attributes(return_python_dict=True)returns the attributes as a dict instead of a tuple. Callingw.wm_attributes()now returns a tuple instead of string if wantobjects was set to 0.gh-82626: Many functions now emit a warning if a boolean value is passed as a file descriptor argument.
gh-111051: Added check for file modification during debugging with
pdbgh-110345: Show the Tcl/Tk patchlevel (rather than version) in
tkinter._test().gh-38807: Fix race condition in
trace. Instead of checking if a directory exists and creating it, directly callos.makedirs()with the kwargexist_ok=True.gh-75705: Set unixfrom envelope in
mailbox.mboxandmailbox.MMDF.gh-106233: Fix stacklevel in
InvalidTZPathWarningduringzoneinfomodule import.gh-105102: Allow
ctypes.Unionto be nested inctypes.Structurewhen the system endianness is the opposite of the classes.gh-104282: Fix null pointer dereference in
lzma._decode_filter_properties()due to improper handling of BCJ filters with properties of zero length. Patch by Radislav Chugunov.gh-96471: Add
queue.Queuetermination withshutdown().gh-101599: Changed argparse flag options formatting to remove redundancy.
gh-85984: Add POSIX pseudo-terminal functions
os.posix_openpt(),os.grantpt(),os.unlockpt(), andos.ptsname().gh-102512: When
os.fork()is called from a foreign thread (aka_DummyThread), the type of the thread in a child process is changed to_MainThread. Also changed its name and daemonic status, it can be now joined.gh-88569: Add
os.path.isreserved(), which identifies reserved pathnames such as “NUL”, “AUX” and “CON”. This function is only available on Windows.Deprecate
pathlib.PurePath.is_reserved().bpo-38364: The
inspectfunctionsisgeneratorfunction,iscoroutinefunction,isasyncgenfunctionnow supportfunctools.partialmethodwrapped functions the same way they supportfunctools.partial.
Documentation¶
gh-115233: Fix an example for
LoggerAdapterin the Logging Cookbook.gh-114123: Move the
csvmodule docstring to thecsvmodule instead of reexporting it from the internal_csvmodule, and remove__doc__fromcsv.__all__.Move
csv.__version__to thecsvmodule instead of reexporting it from the internal_csvmodule, and remove__version__fromcsv.__all__.
Tests¶
Build¶
gh-115167: Avoid vendoring
vcruntime140_threads.dllwhen building with Visual Studio 2022 version 17.8.gh-113632: Promote WASI to a tier 2 platform and drop Emscripten from tier 3 in configure.ac.
gh-114099: configure and Makefile were refactored to accommodate framework builds on Apple platforms other than macOS.
gh-114875: Add
getgrent()as a prerequisite for building thegrpmodule.
Windows¶
gh-115049: Fixes
py.exelauncher failing when run as users without user profiles.gh-115009: Update Windows installer to use SQLite 3.45.1.
gh-109991: Update Windows build to use OpenSSL 3.0.13.
gh-111239: Update Windows builds to use zlib v1.3.1.
gh-100107: The
py.exelauncher will no longer attempt to run the Microsoft Store redirector when launching a script containing a/usr/bin/envshebanggh-112984: Adds free-threaded binaries to Windows installer as an optional component.
gh-89240: Allows
multiprocessingto create pools of greater than 62 processes.
macOS¶
gh-115009: Update macOS installer to use SQLite 3.45.1.
gh-109991: Update macOS installer to use OpenSSL 3.0.13.
gh-114490: Add Mach-O linkage support for
platform.architecture().gh-87804: On macOS the result of
os.statvfsandos.fstatvfsnow correctly report the size of very large disks, in previous versions the reported number of blocks was wrong for disks with at least 2**32 blocks.
IDLE¶
Tools/Demos¶
gh-113516: Don’t set
LDSHAREDwhen building for WASI.gh-109991: Update GitHub CI workflows to use OpenSSL 3.0.13 and multissltests to use 1.1.1w, 3.0.13, 3.1.5, and 3.2.1.
gh-115015: Fix a bug in Argument Clinic that generated incorrect code for methods with no parameters that use the METH_METHOD | METH_FASTCALL | METH_KEYWORDS calling convention. Only the positional parameter count was checked; any keyword argument passed would be silently accepted.
C API¶
gh-111140: Adds
PyLong_AsNativeBytes(),PyLong_FromNativeBytes()andPyLong_FromUnsignedNativeBytes()functions.gh-114685:
PyBuffer_FillInfo()now raises aSystemErrorif called withPyBUF_READorPyBUF_WRITEas flags. These flags should only be used with thePyMemoryView_*C API.gh-114685:
PyObject_GetBuffer()now raises aSystemErrorif called withPyBUF_READorPyBUF_WRITEas flags. These flags should only be used with thePyMemoryView_*C API.gh-114626: Add
PyCFunctionFastandPyCFunctionFastWithKeywordstypedefs (identical to the existing_PyCFunctionFastand_PyCFunctionFastWithKeywordstypedefs, just without a leading_prefix).gh-114329: Add
PyList_GetItemRef(), which is similar toPyList_GetItem()but returns a strong reference instead of a borrowed reference.gh-110850: Add PyTime C API:
PyTime_ttype.PyTime_MINandPyTime_MAXconstants.PyTime_AsSecondsDouble(),PyTime_Monotonic(),PyTime_PerfCounter(), andPyTime_Time()functions.
Patch by Victor Stinner.
gh-112066: Add
PyDict_SetDefaultRef(): insert a key and value into a dictionary if the key is not already present. This is similar todict.setdefault(), but returns an integer value indicating if the key was already present. It is also similar toPyDict_SetDefault(), but returns a strong reference instead of a borrowed reference.
Python 3.13.0 alpha 3¶
Release date: 2024-01-17
Security¶
Core and Builtins¶
gh-107901: Compiler duplicates basic blocks that have an eval breaker check, no line number, and multiple predecessors.
gh-107901: A jump leaving an exception handler back to normal code no longer checks the eval breaker.
gh-113655: Set the C recursion limit to 4000 on Windows, and 10000 on Linux/OSX. This seems to be near the sweet spot to maintain safety, but not compromise backwards compatibility.
gh-113710: Add typed stack effects to the interpreter DSL, along with various instruction annotations.
gh-77046: On Windows, file descriptors wrapping Windows handles are now created non inheritable by default (PEP 446). Patch by Zackery Spytz and Victor Stinner.
gh-113853: Guarantee that all executors make progress. This then guarantees that tier 2 execution always makes progress.
gh-113753: Fix an issue where the finalizer of
PyAsyncGenASendobjects might not be called if they were allocated from a free list.gh-107901: Compiler changed so that synthetic jumps which are not at loop end no longer check the eval breaker.
gh-113703: Fix a regression in the
codeopmodule that was causing it to incorrectly identify incomplete f-strings. Patch by Pablo Galindogh-89811: Check for a valid
tp_version_tagbefore performing bytecode specializations that rely on this value being usable.gh-111488: Changed error message in case of no ‘in’ keyword after ‘for’ in list comprehensions
gh-113657: Fix an issue that caused important instruction pointer updates to be optimized out of tier two traces.
gh-113603: Fixed bug where a redundant NOP is not removed, causing an assertion to fail in the compiler in debug mode.
gh-113602: Fix an error that was causing the parser to try to overwrite existing errors and crashing in the process. Patch by Pablo Galindo
gh-113486: No longer issue spurious
PY_UNWINDevents for optimized calls to classes.gh-113297: Fix segfault in the compiler on with statement with 19 context managers.
gh-111375: Only use
NULLin the exception stack to indicate an exception was handled. Patch by Carey Metcalfe.gh-112215: Increase the C recursion limit by a factor of 3 for non-debug builds, except for webassembly and s390 platforms which are unchanged. This mitigates some regressions in 3.12 with deep recursion mixing builtin (C) and Python code.
gh-113054: Fixed bug where a redundant NOP is not removed, causing an assertion to fail in the compiler in debug mode.
gh-106905: Use per AST-parser state rather than global state to track recursion depth within the AST parser to prevent potential race condition due to simultaneous parsing.
The issue primarily showed up in 3.11 by multithreaded users of
ast.parse(). In 3.12 a change to when garbage collection can be triggered prevented the race condition from occurring.gh-108866: Change the API and contract of
_PyExecutorObjectto return the next_instr pointer, instead of the frame, and to always execute at least one instruction.gh-112943: Correctly compute end column offsets for multiline tokens in the
tokenizemodule. Patch by Pablo Galindogh-112125: Fix
None.__ne__(None)returningNotImplementedinstead ofFalse.gh-74616:
input()now raises a ValueError when output on the terminal if the prompt contains embedded null characters instead of silently truncating it.gh-112716: Fix SystemError in the
importstatement and in__reduce__()methods of builtin types when__builtins__is not a dict.gh-112730: Use color to highlight error locations in tracebacks. Patch by Pablo Galindo
gh-112625: Fixes a bug where a bytearray object could be cleared while iterating over an argument in the
bytearray.join()method that could result in reading memory after it was freed.gh-112660: Do not clear unexpected errors during formatting error messages for ImportError and AttributeError for modules.
gh-105967: Workaround a bug in Apple’s macOS platform zlib library where
zlib.crc32()andbinascii.crc32()could produce incorrect results on multi-gigabyte inputs. Including when usingzipfileon zips containing large data.gh-95754: Provide a better error message when accessing invalid attributes on partially initialized modules. The origin of the module being accessed is now included in the message to help with the common issue of shadowing other modules.
gh-112217: Add check for the type of
__cause__returned from calling the typeTinraise from T.gh-111058: Change coro.cr_frame/gen.gi_frame to return
Noneafter the coroutine/generator has been closed. This fixes a bug wheregetcoroutinestate()andgetgeneratorstate()return the wrong state for a closed coroutine/generator.gh-112388: Fix an error that was causing the parser to try to overwrite tokenizer errors. Patch by pablo Galindo
gh-112387: Fix error positions for decoded strings with backwards tokenize errors. Patch by Pablo Galindo
gh-99606: Make code generated for an empty f-string identical to the code of an empty normal string.
gh-112367: Avoid undefined behaviour when using the perf trampolines by not freeing the code arenas until shutdown. Patch by Pablo Galindo
gh-112320: The Tier 2 translator now tracks the confidence level for staying “on trace” (i.e. not exiting back to the Tier 1 interpreter) for branch instructions based on the number of bits set in the branch “counter”. Trace translation ends when the confidence drops below 1/3rd.
gh-109598:
PyComplex_RealAsDouble()/PyComplex_ImagAsDouble()now tries to convert an object to acomplexinstance using its__complex__()method before falling back to the__float__()method. Patch by Sergey B Kirpichev.gh-94606: Fix UnicodeEncodeError when
email.message.get_payload()reads a message with a Unicode surrogate character and the message content is not well-formed for surrogateescape encoding. Patch by Sidney Markowitz.bpo-21861: Use the object’s actual class name in
_io.FileIO.__repr__(),_io._WindowsConsoleIO()and_io.TextIOWrapper.__repr__(), to make these methods subclass friendly.bpo-34392: Added
sys._is_interned().
Library¶
gh-114077: Fix possible
OverflowErrorinsocket.socket.sendfile()when pass count larger than 2 GiB on 32-bit platform.gh-111803:
plistlibnow supports loading more deeply nested lists in binary format.gh-114014: Fixed a bug in
fractions.Fractionwhere an invalid string usingdin the decimals part creates a different error compared to other invalid letters/characters. Patch by Jeremiah Gabriel Pascual.gh-108364:
sqlite3.Connection.iterdump()now ensures that foreign key support is disabled before dumping the database schema, if there is any foreign key violation. Patch by Erlend E. Aasland and Mariusz Felisiak.gh-113971: The
zipfile.ZipInfopreviously protected._compresslevelattribute has been made public as.compress_levelwith the old_compresslevelname remaining available as a property to retain compatibility.gh-113877: Fix
tkintermethodwinfo_pathname()on 64-bit Windows.gh-113868: Added
mmap.MAP_NORESERVE,mmap.MAP_NOEXTEND,mmap.MAP_HASSEMAPHORE,mmap.MAP_NOCACHE,mmap.MAP_JIT,mmap.MAP_RESILIENT_CODESIGN,mmap.MAP_RESILIENT_MEDIA,mmap.MAP_32BIT,mmap.MAP_TRANSLATED_ALLOW_EXECUTE,mmap.MAP_UNIX03andmmap.MAP_TPRO. All of them aremmap(2)flags on macOS.gh-113848:
asyncio.TaskGroup()andasyncio.timeout()context managers now handleCancelledErrorsubclasses as well as exactCancelledError.gh-113661: unittest runner: Don’t exit 5 if tests were skipped. The intention of exiting 5 was to detect issues where the test suite wasn’t discovered at all. If we skipped tests, it was correctly discovered.
gh-96037: Insert
TimeoutErrorin the context of the exception that was raised during exiting an expiredasyncio.timeout()block.gh-113781: Silence unraisable AttributeError when warnings are emitted during Python finalization.
gh-113238: Add
Anchortoimportlib.resources(in order for the code to comply with the documentation)gh-111693:
asyncio.Condition.wait()now re-raises the sameCancelledErrorinstance that may have caused it to be interrupted. Fixed race condition inasyncio.Semaphore.acquire()when interrupted with aCancelledError.gh-113791: Add
CLOCK_MONOTONIC_RAW_APPROXandCLOCK_UPTIME_RAW_APPROXtotimeon macOS. These are clocks available on macOS 10.12 or later.gh-112932: Restore the ability for
zipfiletoextractallfrom zip files with a “/” directory entry in them as is commonly added to zips by some wiki or bug tracker data exporters.gh-113568: Raise deprecation warnings from
pathlib.PurePathand not its private base classPurePathBase.gh-113594: Fix
UnicodeEncodeErrorinemailwhen re-fold lines that contain unknown-8bit encoded part followed by non-unknown-8bit encoded part.gh-113538: In
asyncio.StreamReaderProtocol.connection_made(), there is callback that logs an error if the task wrapping the “connected callback” fails. This callback would itself fail if the task was cancelled. Prevent this by checking whether the task was cancelled first. If so, close the transport but don’t log an error.gh-113626: Add support for the allow_code argument in the
marshalmodule. Passingallow_code=Falseprevents serialization and de-serialization of code objects which is incompatible between Python versions.gh-85567: Fix resource warnings for unclosed files in
pickleandpickletoolscommand line interfaces.gh-113537: Support loads
strinplistlib.loads().gh-89850: Add default implementations of
pickle.Pickler.persistent_id()andpickle.Unpickler.persistent_load()methods in the C implementation. Callingsuper().persistent_id()andsuper().persistent_load()in subclasses of the C implementation ofpickle.Picklerandpickle.Unpicklerclasses no longer causes infinite recursion.gh-113569: Indicate if there were no actual calls in unittest
assert_has_calls()failure.gh-101225: Increase the backlog for
multiprocessing.connection.Listenerobjects created bymultiprocessing.managerandmultiprocessing.resource_sharerto significantly reduce the risk of getting a connection refused error when creating amultiprocessing.connection.Connectionto them.gh-113568: Raise audit events from
pathlib.Pathand not its private base classPathBase.gh-113543: Make sure that
webbrowser.MacOSXOSAScriptsendswebbrowser.openaudit event.gh-113028: When a second reference to a string appears in the input to
pickle, and the Python implementation is in use, we are guaranteed that a single copy gets pickled and a single object is shared when reloaded. Previously, in protocol 0, when a string contained certain characters (e.g. newline) it resulted in duplicate objects.gh-113421: Fix multiprocessing logger for
%(filename)s.gh-111784: Fix segfaults in the
_elementtreemodule. Fix first segfault during deallocation of_elementtree.XMLParserinstances by keeping strong reference topyexpatmodule in module state for capsule lifetime. Fix second segfault which happens in the same deallocation process by keeping strong reference to_elementtreemodule inXMLParserstructure for_elementtreemodule lifetime.gh-113407: Fix import of
unittest.mockwhen CPython is built without docstrings.gh-113320: Fix regression in Python 3.12 where
Protocolclasses that were not marked asruntime-checkablewould be unnecessarily introspected, potentially causing exceptions to be raised if the protocol had problematic members. Patch by Alex Waygood.gh-53502: Add a new option
aware_datetimeinplistlibto loads or dumps aware datetime.gh-113358: Fix rendering tracebacks with exceptions with a broken __getattr__
gh-113214: Fix an
AttributeErrorduring asyncio SSL protocol aborts in SSL-over-SSL scenarios.gh-113246: Update bundled pip to 23.3.2.
gh-87264: Fixed tarfile list() method to show file type.
gh-112182:
asyncio.futures.Future.set_exception()now transformsStopIterationintoRuntimeErrorinstead of hanging or other misbehavior. Patch contributed by Jamie Phan.gh-113225: Speed up
pathlib.Path.glob()by usingos.DirEntry.pathwhere possible.gh-113149: Improve error message when a JSON array or object contains a trailing comma. Patch by Carson Radtke.
gh-113117: The
subprocessmodule can now use theos.posix_spawn()function withclose_fds=Trueon platforms whereposix_spawn_file_actions_addclosefrom_npis available. Patch by Jakub Kulik.gh-113199: Make
http.client.HTTPResponse.read1andhttp.client.HTTPResponse.readlineclose IO after reading all data when content length is known. Patch by Illia Volochii.gh-113191: Add support of
os.fchmod()and a file descriptor inos.chmod()on Windows.gh-113188: Fix
shutil.copymode()andshutil.copystat()on Windows. Previously they worked differently if dst is a symbolic link: they modified the permission bits of dst itself rather than the file it points to if follow_symlinks is true or src is not a symbolic link, and did not modify the permission bits if follow_symlinks is false and src is a symbolic link.gh-113119:
os.posix_spawn()now acceptsenv=None, which makes the newly spawned process use the current process environment. Patch by Jakub Kulik.gh-113202: Add a
strictoption tobatched()in theitertoolsmodule.gh-61648: Detect line numbers of properties in doctests.
gh-113175: Sync with importlib_metadata 7.0, including improved type annotations, fixed issue with symlinked packages in
package_distributions, addedEntryPoints.__repr__, introduced thediagnosescript, addedDistribution.originproperty, and removed deprecatedEntryPointaccess by numeric index (tuple behavior).gh-59616: Add support of
os.lchmod()and the follow_symlinks argument inos.chmod()on Windows. Note that the default value of follow_symlinks inos.lchmod()isFalseon Windows.gh-112559:
signal.signal()andsignal.getsignal()no longer callrepron callable handlers.asyncio.run()andasyncio.Runner.run()no longer callrepron the task results. Patch by Yilei Yang.gh-112962:
dismodule functions add cache information to theInstructioninstance rather than creating fakeInstructioninstances to represent the cache entries.gh-112989: Reduce overhead to connect sockets with
asyncioSelectorEventLoop.gh-112970: Use
closefrom()on Linux where available (e.g. glibc-2.34), rather than only FreeBSD.gh-110190: Fix ctypes structs with array on PPC64LE platform by setting
MAX_STRUCT_SIZEto 64 in stgdict. Patch by Diego Russo.gh-112540: The statistics.geometric_mean() function now returns zero for datasets containing a zero. Formerly, it would raise an exception.
gh-87286: Added
LOG_FTP,LOG_NETINFO,LOG_REMOTEAUTH,LOG_INSTALL,LOG_RAS, andLOG_LAUNCHDtot thesyslogmodule, all of them constants on used on macOS.gh-112800: Fix
asyncioSubprocessTransport.close()not to throwPermissionErrorwhen used with setuid executables.gh-51944: Add the following constants to the
termiosmodule. These values are present in macOS system headers:ALTWERASE,B14400,B28800,B7200,B76800,CCAR_OFLOW,CCTS_OFLOW,CDSR_OFLOW,CDTR_IFLOW,CIGNORE,CRTS_IFLOW,EXTPROC,IUTF8,MDMBUF,NL2,NL3,NOKERNINFO,ONOEOT,OXTABS,VDSUSP,VSTATUS.gh-79325: Fix an infinite recursion error in
tempfile.TemporaryDirectory()cleanup on Windows.gh-94692:
shutil.rmtree()now only catches OSError exceptions. Previously a symlink attack resistant version ofshutil.rmtree()could ignore or pass to the error handler arbitrary exception when invalid arguments were provided.gh-112736: The use of del-safe symbols in
subprocesswas refactored to allow for use in cross-platform build environments.gh-112727: Speed up
pathlib.Path.absolute(). Patch by Barney Gale.gh-74690: Speedup
issubclass()checks against simpleruntime-checkable protocolsby around 6%. Patch by Alex Waygood.gh-74690: Speedup
isinstance()checks by roughly 20% forruntime-checkable protocolsthat only have one callable member. Speedupissubclass()checks for these protocols by roughly 10%. Patch by Alex Waygood.gh-112645: Remove deprecation error on passing
onerrortoshutil.rmtree().gh-112640: Add
kwdefaultsparameter totypes.FunctionTypeto set default keyword argument values.gh-112622: Ensure
nameparameter is passed to event loop inasyncio.create_task().gh-112618: Fix a caching bug relating to
typing.Annotated.Annotated[str, True]is no longer identical toAnnotated[str, 1].gh-112334: Fixed a performance regression in 3.12’s
subprocesson Linux where it would no longer use the fast-pathvfork()system call when it could have due to a logic bug, instead falling back to the safe but slowerfork().Also fixed a second 3.12.0 potential security bug. If a value of
extra_groups=[]was passed tosubprocess.Popenor related APIs, the underlyingsetgroups(0, NULL)system call to clear the groups list would not be made in the child process prior toexec().This was identified via code inspection in the process of fixing the first bug.
gh-110190: Fix ctypes structs with array on Arm platform by setting
MAX_STRUCT_SIZEto 32 in stgdict. Patch by Diego Russo.gh-81194: Fix a crash in
socket.if_indextoname()with specific value (UINT_MAX). Fix an integer overflow insocket.if_indextoname()on 64-bit non-Windows platforms.gh-112578: Fix a spurious
RuntimeWarningwhen executing thezipfilemodule.gh-112516: Update the bundled copy of pip to version 23.3.1.
gh-112510: Add
readline.backendfor the backend readline uses (editlineorreadline)gh-112328: [Enum] Make
EnumDict,EnumDict.member_names,EnumType._add_alias_andEnumType._add_value_alias_public.gh-112509: Fix edge cases that could cause a key to be present in both the
__required_keys__and__optional_keys__attributes of atyping.TypedDict. Patch by Jelle Zijlstra.gh-101336: Add
keep_alivekeyword parameter forAbstractEventLoop.create_server()andBaseEventLoop.create_server().gh-63284: Added support for TLS-PSK (pre-shared key) mode to the
sslmodule.gh-112414: Fix regression in Python 3.12 where calling
repr()on a module that had been imported using a custom loader could fail withAttributeError. Patch by Alex Waygood.gh-112358: Revert change to
struct.Structinitialization that broke some cases of subclassing.gh-112405: Optimize
pathlib.PurePath.relative_to(). Patch by Alex Waygood.gh-94722: Fix bug where comparison between instances of
DocTestfails if one of them hasNoneas its lineno.gh-112361: Speed up a small handful of
pathlibmethods by removing some temporary objects.gh-112345: Improve error message when trying to call
issubclass()against atyping.Protocolthat has non-method members. Patch by Randolf Scholz.gh-112137: Change
disoutput to display no-lineno as “–” instead of “None”.gh-112332: Deprecate the
exc_typefield oftraceback.TracebackException. Addexc_type_strto replace it.gh-81620: Add extra tests for
random.binomialvariate()gh-112292: Fix a crash in
readlinewhen imported from a sub interpreter. Patch by Anthony Shawgh-77621: Slightly improve the import time of the
pathlibmodule by deferring some imports. Patch by Barney Gale.gh-112137: Change
disoutput to display logical labels for jump targets instead of offsets.gh-112139: Add
Signature.format()to format signatures to string with extra options. And use it inpydocto render more readable signatures that have new lines between parameters.gh-112105: Make
readline.set_completer_delims()work with libeditgh-106922: Display multiple lines with
tracebackwhen errors span multiple lines.gh-111874: When creating a
typing.NamedTupleclass, ensure__set_name__()is called on all objects that define__set_name__and exist in the values of theNamedTupleclass’s class dictionary. Patch by Alex Waygood.gh-68166: Add support of the “vsapi” element type in
tkinter.ttk.Style.element_create().gh-110275: Named tuple’s methods
_replace()and__replace__()now raise TypeError instead of ValueError for invalid keyword arguments.gh-99367: Do not mangle
sys.path[0]inpdbif safe_path is setgh-111615: Fix a regression caused by a fix to gh-93162 whereby you couldn’t configure a
QueueHandlerwithout specifying handlers.gh-75666: Fix the behavior of
tkinterwidget’sunbind()method with two arguments. Previously,widget.unbind(sequence, funcid)destroyed the current binding for sequence, leaving sequence unbound, and deleted the funcid command. Now it removes only funcid from the binding for sequence, keeping other commands, and deletes the funcid command. It leaves sequence unbound only if funcid was the last bound command.gh-67790: Implement basic formatting support (minimum width, alignment, fill) for
fractions.Fraction.gh-111049: Fix crash during garbage collection of the
io.BytesIObuffer object.gh-102980: Redirect the output of
interactcommand ofpdbto the same channel as the debugger. Add tests and improve docs.gh-102988:
email.utils.getaddresses()andemail.utils.parseaddr()now return('', '')2-tuples in more situations where invalid email addresses are encountered instead of potentially inaccurate values. Add optional strict parameter to these two functions: usestrict=Falseto get the old behavior, accept malformed inputs.getattr(email.utils, 'supports_strict_parsing', False)can be use to check if the strict parameter is available. Patch by Thomas Dwyer and Victor Stinner to improve the CVE 2023-27043 fix.gh-52161:
cmd.Cmd.do_help()now cleans docstrings withinspect.cleandoc()before writing them. Patch by Filip Łapkiewicz.gh-82300: Add
trackparameter tomultiprocessing.shared_memory.SharedMemorythat allows using shared memory blocks without having to register with the POSIX resource tracker that automatically releases them upon process exit.gh-110109: Add private
pathlib._PurePathBaseclass: a base class forpathlib.PurePaththat omits certain magic methods. It may be made public (along with_PathBase) in future.gh-109858: Protect
zipfilefrom “quoted-overlap” zipbomb. It now raises BadZipFile when try to read an entry that overlaps with other entry or central directory.gh-109786: Fix possible reference leaks and crash when re-enter the
__next__()method ofitertools.pairwise.gh-91539: Small (10 - 20%) and trivial performance improvement of
urllib.request.getproxies_environment(), typically useful when there are many environment variables to go over.gh-103363: Add follow_symlinks keyword-only argument to
pathlib.Path.owner()andgroup(), defaulting toTrue.gh-99437:
runpy.run_path()now decodes path-like objects, making sure __file__ and sys.argv[0] of the module being run are always strings.gh-104003: Add
warnings.deprecated(), a decorator to mark deprecated functions to static type checkers and to warn on usage of deprecated classes and functions. See PEP 702. Patch by Jelle Zijlstra.gh-103708: Make hardcoded python name, a configurable parameter so that different implementations of python can override it instead of making huge diffs in sysconfig.py
gh-66515:
mailbox.MHnow supports folders that do not contain a.mh_sequencesfile (e.g. Claws Mail IMAP-cache folders). Patch by Serhiy Storchaka.gh-83162: Renamed
re.errortoPatternErrorfor clarity, and keptre.errorfor backward compatibility. Patch by Matthias Bussonnier and Adam Chhina.gh-91133: Fix a bug in
tempfile.TemporaryDirectorycleanup, which now no longer dereferences symlinks when working around file system permission errors.bpo-43153: On Windows,
tempfile.TemporaryDirectorypreviously masked aPermissionErrorwithNotADirectoryErrorduring directory cleanup. It now correctly raisesPermissionErrorif errors are not ignored. Patch by Andrei Kulakov and Ken Jin.bpo-32731:
getpass.getuser()now raisesOSErrorfor all failures rather thanImportErroron systems lacking thepwdmodule orKeyErrorif the password database is empty.bpo-34321:
mmap.mmapnow has a trackfd parameter on Unix; if it isFalse, the file descriptor specified by fileno will not be duplicated.bpo-35332: The
shutil.rmtree()function now ignores errors when callingos.close()when ignore_errors isTrue, andos.close()no longer retried after error.bpo-35928:
io.TextIOWrappernow correctly handles the decoding buffer afterread()andwrite().bpo-26791:
shutil.move()now moves a symlink into a directory when that directory is the target of the symlink. This provides the same behavior as the mv shell command. The previous behavior raised an exception. Patch by Jeffrey Kintscher.bpo-41422: Fixed memory leaks of
pickle.Picklerandpickle.Unpicklerinvolving cyclic references via the internal memo mapping.bpo-19821: The
pydoc.ispackage()function has been deprecated.bpo-40262: The
ssl.SSLSocket.recv_into()method no longer requires the buffer argument to implement__len__and supports buffers with arbitrary item size.bpo-39912:
warnings.filterwarnings()andwarnings.simplefilter()now raise appropriate exceptions instead ofAssertionError. Patch contributed by Rémi Lapeyre.bpo-37260: Fixed a race condition in
shutil.rmtree()in which directory entries removed by another process or thread whileshutil.rmtree()is running can cause it to raise FileNotFoundError. Patch by Jeffrey Kintscher.bpo-36959: Fix some error messages for invalid ISO format string combinations in
strptime()that referred to directives not contained in the format string. Patch by Gordon P. Hemsley.bpo-18060: Fixed a class inheritance issue that can cause segfaults when deriving two or more levels of subclasses from a base class of Structure or Union.
bpo-29779: Add a new
PYTHON_HISTORYenvironment variable to set the location of a.python_historyfile.bpo-21360:
mailbox.Maildirnow ignores files with a leading dot.
Documentation¶
gh-111699: Relocate
smtpddeprecation notice to its own section rather than underlocalein What’s New in Python 3.12 documentgh-110746: Improved markup for valid options/values for methods ttk.treeview.column and ttk.treeview.heading, and for Layouts.
gh-95649: Document that the
asynciomodule contains code taken from v0.16.0 of the uvloop project, as well as the required MIT licensing information.
Tests¶
gh-111798: Disable
test_super_deep()fromtest_callunder pydebug builds on WASI; the stack depth is too small to make the test useful.gh-111801: Lower the recursion limit in
test_isinstancefortest_infinitely_many_bases(). This prevents a stack overflow on a pydebug build of WASI.gh-111802: Specify a low recursion depth for
test_bad_getattr()intest.pickletesterto avoid exhausting the stack under a pydebug build for WASI.gh-44626: Fix
os.path.isabs()incorrectly returningTruewhen given a path that starts with exactly one (back)slash on Windows.Fix
pathlib.PureWindowsPath.is_absolute()incorrectly returningFalsefor some paths beginning with two (back)slashes.gh-113633: Use module state for the _testcapi extension module.
gh-109980: Fix
test_tarfile_vs_tarintest_shutilfor macOS, where system tar can include more information in the archive thanshutil.make_archive.gh-112769: The tests now correctly compare zlib version when
zlib.ZLIB_RUNTIME_VERSIONcontains non-integer suffixes. For example zlib-ng defines the version as1.3.0.zlib-ng.gh-112334: Adds a regression test to verify that
vfork()is used when expected bysubprocesson vfork enabled POSIX systems (Linux).gh-108927: Fixed order dependence in running tests in the same process when a test that has submodules (e.g. test_importlib) follows a test that imports its submodule (e.g. test_importlib.util) and precedes a test (e.g. test_unittest or test_compileall) that uses that submodule.
bpo-40648: Test modes that file can get with chmod() on Windows.
Build¶
gh-114013: Fix
Tools/wasm/wasi.pyto not include the path topython.wasmas part ofHOSTRUNNER. The environment variable is meant to specify how to run the WASI host only, havingpython.wasmand relevant flags appended to theHOSTRUNNER. This fixesmake testwork.gh-113258: Changed the Windows build to write out generated frozen modules into the build tree instead of the source tree.
gh-112305: Fixed the
check-clean-srcstep performed on out of tree builds to detect errant$(srcdir)/Python/frozen_modules/*.hfiles and recommend appropriate source tree cleanup steps to get a working build again.gh-112536: Add support for thread sanitizer (TSAN)
gh-112867: Fix the build for the case that WITH_PYMALLOC_RADIX_TREE=0 set.
gh-103065: Introduce
Tools/wasm/wasi.pyto simplify doing a WASI build.bpo-11102: The
os.major(),os.makedev(), andos.minor()functions are now available on HP-UX v3.bpo-36351: Do not set ipv6type when cross-compiling.
Windows¶
gh-114096: Process privileges that are activated for creating directory junctions are now restored afterwards, avoiding behaviour changes in other parts of the program.
gh-111877:
os.stat()calls were returning incorrect time values for files that could not be accessed directly.gh-111973: Update Windows installer to use SQLite 3.44.2.
gh-113009:
multiprocessing: On Windows, fix a race condition inProcess.terminate(): no longer set thereturncodeattribute to always callWaitForSingleObject()inProcess.wait(). Previously, sometimes the process was still running afterTerminateProcess()even ifGetExitCodeProcess()is notSTILL_ACTIVE. Patch by Victor Stinner.gh-86179: Fixes path calculations when launching Python on Windows through a symlink.
gh-71383: Update Tcl/Tk in Windows installer to 8.6.13 with a patch to suppress incorrect ThemeChanged warnings.
gh-111650: Ensures the
Py_GIL_DISABLEDpreprocessor variable is defined inpyconfig.hso that extension modules written in C are able to use it.gh-112278: Reduce the time cost for some functions in
platformon Windows if current user has no permission to the WMI.gh-73427: Deprecate
sys._enablelegacywindowsfsencoding(). UsePYTHONLEGACYWINDOWSFSENCODINGinstead. Patch by Inada Naoki.gh-87868: Correctly sort and remove duplicate environment variables in
_winapi.CreateProcess().bpo-37308: Fix mojibake in
mmap.mmapwhen using a non-ASCII tagname argument on Windows.
macOS¶
gh-113666: Add the following constants to module
stat:UF_SETTABLE,UF_TRACKED,UF_DATAVAULT,SF_SUPPORTED,SF_SETTABLE,SF_SYNTHETIC,SF_RESTRICTED,SF_FIRMLINKandSF_DATALESS. The valuesUF_SETTABLE,SF_SUPPORTED,SF_SETTABLEandSF_SYNTHETICare only available on macOS.gh-113536:
os.waitid()is now available on macOSgh-110459: Running
configure ... --with-openssl-rpath=X/Y/Zno longer fails to detect OpenSSL on macOS.gh-74573: Document that
dbm.ndbmcan silently corrupt DBM files on updates when exceeding undocumented platform limits, and can crash (segmentation fault) when reading such a corrupted file. (FB8919203)gh-65701: The freeze tool doesn’t work with framework builds of Python. Document this and bail out early when running the tool with such a build.
gh-87277: webbrowser: Don’t look for X11 browsers on macOS. Those are generally not used and probing for them can result in starting XQuartz even if it isn’t used otherwise.
gh-111973: Update macOS installer to use SQLite 3.44.2.
gh-108269: Set
CFBundleAllowMixedLocalizationsto true in the Info.plist for the framework, embedded Python.app and IDLE.app with framework installs on macOS. This allows applications to pick up the user’s preferred locale when that’s different from english.gh-102362: Make sure the result of
sysconfig.get_plaform()includes at least a major and minor versions, even ifMACOSX_DEPLOYMENT_TARGETis set to only a major version during build to match the format expected by pip.gh-110017: Disable a signal handling stress test on macOS due to a bug in macOS (FB13453490).
gh-110820: Make sure the preprocessor definitions for
ALIGNOF_MAX_ALIGN_T,SIZEOF_LONG_DOUBLEandHAVE_GCC_ASM_FOR_X64are correct for Universal 2 builds on macOS.gh-109981: Use
/dev/fdon macOS to determine the number of open files intest.support.os_helper.fd_countto avoid a crash with “guarded” file descriptors when probing for open files.
IDLE¶
gh-72284: Improve the lists of features, editor key bindings, and shell key bingings in the IDLE doc.
gh-113903: Fix rare failure of test.test_idle, in test_configdialog.
gh-113729: Fix the “Help -> IDLE Doc” menu bug in 3.11.7 and 3.12.1.
gh-113269: Fix test_editor hang on macOS Catalina.
gh-112898: Fix processing unsaved files when quitting IDLE on macOS.
bpo-13586: Enter the selected text when opening the “Replace” dialog.
C API¶
gh-106560: Fix redundant declarations in the public C API. Declare PyBool_Type, PyLong_Type and PySys_Audit() only once. Patch by Victor Stinner.
gh-112438: Fix support of format units “es”, “et”, “es#”, and “et#” in nested tuples in
PyArg_ParseTuple()-like functions.gh-111545: Add
Py_HashPointer()function to hash a pointer. Patch by Victor Stinner.gh-65210: Change the declaration of the keywords parameter of
PyArg_ParseTupleAndKeywords()andPyArg_VaParseTupleAndKeywords()for better compatibility with C++.
Python 3.13.0 alpha 2¶
Release date: 2023-11-22
Core and Builtins¶
gh-112243: Don’t include comments in f-string debug expressions. Patch by Pablo Galindo
gh-112287: Slightly optimize the Tier 2 (uop) interpreter by only loading
opargandoperandwhen needed. Also double the trace size limit again, to 512 this time.gh-111807: Lower the max parser stack depth to 1000 under WASI debug builds.
gh-111798: When Python is built in debug mode, set the C recursion limit to 500 instead of 1500. A debug build is likely built with low optimization level which implies higher stack memory usage than a release build. Patch by Victor Stinner.
gh-106529: Enable translating unspecialized
FOR_ITERto Tier 2.gh-111916: Make hashlib related modules thread-safe without the GIL
gh-81137: Deprecate assignment to a function’s
__code__field when the new code object is of a mismatched type (e.g., from a generator to a plain function).gh-79932: Raise exception if
frame.clear()is called on a suspended frame.gh-81925: Implement native thread ids for GNU KFreeBSD.
gh-111843: Use exponential backoff to reduce the number of failed tier 2 optimization attempts by over 99%.
gh-110829: Joining a thread now ensures the underlying OS thread has exited. This is required for safer fork() in multi-threaded processes.
gh-109369: Make sure that tier 2 traces are de-optimized if the code is instrumented
gh-111772: Specialize slot loads and stores for _Py_T_OBJECT as well as Py_T_OBJECT_EX
gh-111666: Speed up
BaseExceptionGroup.derive(),BaseExceptionGroup.subgroup(), andBaseExceptionGroup.split()by changing how they parse passed arguments.gh-111654: Fix runtime crash when some error happens in opcode
LOAD_FROM_DICT_OR_DEREF.gh-111623: Add support for sharing tuples between interpreters using the cross-interpreter API. Patch by Anthony Shaw.
gh-111354: The oparg of
YIELD_VALUEis now1if the instruction is part of a yield-from or await, and0otherwise.The SUSPENDED frame state is now split into
SUSPENDEDandSUSPENDED_YIELD_FROM. This simplifies the code in_PyGen_yf.gh-111520: Merge the Tier 1 (bytecode) and Tier 2 (micro-ops) interpreters together, moving the Tier 2 interpreter loop and switch into
_PyEval_EvalFrameDefault()inPython/ceval.c. ThePython/executor.cfile is gone. Also theTIER_ONEandTIER_TWOmacros are now handled by the code generator.Beware! This changes the environment variables to enable micro-ops and their debugging to
PYTHON_UOPSandPYTHON_LLTRACE.gh-109181: Speed up
Tracebackobject creation by lazily compute the line number. Patch by Pablo Galindogh-111420: Allow type comments in parenthesized
withstatementsgh-111438: Add support for sharing floats between interpreters using the cross-interpreter API. Patch by Anthony Shaw.
gh-111435: Add support for sharing of
TrueandFalsebetween interpreters using the cross-interpreter API. Patch by Anthony Shaw.gh-102388: Fix a bug where
iso2022_jp_3andiso2022_jp_2004codecs read out of boundsgh-111366: Fix an issue in the
codeopthat was causingSyntaxErrorexceptions raised in the presence of invalid syntax to not contain precise error messages. Patch by Pablo Galindogh-111380: Fix a bug that was causing
SyntaxWarningto appear twice when parsing if invalid syntax is encountered later. Patch by Pablo galindogh-111374: Added a new environment variable
PYTHON_FROZEN_MODULES. It determines whether or not frozen modules are ignored by the import machinery, equivalent of the-X frozen_modulescommand-line option.gh-111354: Remove
opargfromYIELD_VALUE. ChangeopargofRESUMEto include information about the except-depth. These changes make it possible to simplify the code in generator close.gh-94438: Fix a regression that prevented jumping across
is Noneandis not Nonewhen debugging. Patch by Savannah Ostrowski.gh-67224: Show source lines in tracebacks when using the
-coption when running Python. Patch by Pablo Galindogh-111123: Fix a bug where a
globaldeclaration in anexceptblock is rejected when the global is used in theelseblock.gh-110938: Fix error messages for indented blocks with functions and classes with generic type parameters. Patch by Pablo Galindo
gh-109214: Remove unnecessary instruction pointer updates before returning from frames.
gh-110912: Correctly display the traceback for
MemoryErrorexceptions using thetracebackmodule. Patch by Pablo Galindogh-109894: Fixed crash due to improperly initialized static
MemoryErrorin subinterpreter.gh-110892: Return
NULLforPyTrace_RETURNevents caused by an exceptiongh-110864: Fix argument parsing by
_PyArg_UnpackKeywordsWithVarargfor functions defining pos-or-keyword, vararg, and kw-only parameters.gh-109094: Replace
prev_instron the interpreter frame byinstr_ptrwhich points to the beginning of the instruction that is currently executing (or will execute once the frame resumes).gh-110805: Allow the repl to show source code and complete tracebacks. Patch by Pablo Galindo
gh-110722: Add
PYTHON_PRESITE=package.moduleto import a module early in the interpreter lifecycle beforesite.pyis executed. Python needs to be built in debug mode for this option to exist.gh-110481: Implement biased reference counting in
--disable-gilbuilds.gh-110543: Fix regression in Python 3.12 where
types.CodeType.replace()would produce a broken code object if called on a module or class code object that contains a comprehension. Patch by Jelle Zijlstra.gh-89519: Removed chained
classmethoddescriptors (introduced in bpo-19072). This can no longer be used to wrap other descriptors such asproperty. The core design of this feature was flawed and caused a number of downstream problems. To “pass-through” aclassmethod, consider using the__wrapped__attribute that was added in Python 3.10.gh-103615: Use local events for opcode tracing
bpo-46657: Add mimalloc memory allocator support.
gh-106718: When PyConfig.stdlib_dir is explicitly set, it’s now respected and won’t be overridden by PyConfig.home.
gh-106905: Fix incorrect SystemError about AST constructor recursion depth mismatch.
gh-100445: Improve error message for unterminated strings with escapes.
bpo-45759: Improved error messages for
elif/elsestatements not matching any valid statements. Patch by Jeremiah Vivian.
Library¶
gh-111942: Fix SystemError in the TextIOWrapper constructor with non-encodable “errors” argument in non-debug mode.
gh-111995: Added the
NI_IDNconstant to thesocketmodule when present in C at build time for use withsocket.getnameinfo().gh-109538: Issue warning message instead of having
RuntimeErrorbe displayed when event loop has already been closed atStreamWriter.__del__().gh-111942: Fix crashes in
io.TextIOWrapper.reconfigure()when pass invalid arguments, e.g. non-string encoding.gh-111460:
curses: restore wide character support (includingcurses.unget_wch()andget_wch()) on macOS, which was unavailable due to a regression in Python 3.12.gh-103791:
contextlib.suppressnow supports suppressing exceptions raised as part of aBaseExceptionGroup, in addition to the recent support forExceptionGroup.gh-111835: The
mmap.mmapclass now has anseekable()method that can be used when a seekable file-like object is required. Theseek()method now returns the new absolute position. Patch by Donghee Na.gh-111804: Remove posix.fallocate() under WASI as the underlying posix_fallocate() is not available in WASI preview2.
gh-111841: Fix truncating arguments on an embedded null character in
os.putenv()andos.unsetenv()on Windows.gh-111768:
wsgiref.util.is_hop_by_hop()is now exposed correctly in__all__.gh-80731: Avoid executing the default function in
cmd.Cmdin an except blockgh-111541: Fix
doctestforSyntaxErrornot-builtin subclasses.gh-111719: Add extra argument validation for
aliascommand inpdbgh-111482:
time: Maketime.clock_gettime()andtime.clock_gettime_ns()functions up to 2x faster by faster calling convention. Patch by Victor Stinner.gh-110894: Call loop exception handler for exceptions in
client_connected_cbofasyncio.start_server()so that applications can handle it. Patch by Kumar Aditya.gh-111531: Fix reference leaks in
bind_class()andbind_all()methods oftkinterwidgets.gh-111246:
asyncio.loop.create_unix_server()will now automatically remove the Unix socket when the server is closed.gh-111356: Added
io.text_encoding(),io.DEFAULT_BUFFER_SIZE, andio.IncrementalNewlineDecodertoio.__all__.gh-66425: Remove the code to set the REMOTE_HOST header from wsgiref module, as it is unreachable. This header is used for performance reasons, which is not necessary in the wsgiref module.
gh-111429: Speed up
pathlib.PurePath.relative_to()andis_relative_to().gh-111342: Fixed typo in
math.sumprod().gh-68166: Remove mention of not supported “vsapi” element type in
tkinter.ttk.Style.element_create(). Add tests forelement_create()and otherttk.Stylemethods. Add examples forelement_create()in the documentation.gh-111388: Add
show_groupparameter totraceback.format_exception_only(), which allows to formatExceptionGroupinstances.gh-79033: Another attempt at fixing
asyncio.Server.wait_closed(). It now blocks until both conditions are true: the server is closed, and there are no more active connections. (This means that in some cases where in 3.12.0 this function would incorrectly have returned immediately, it will now block; in particular, when there are no active connections but the server hasn’t been closed yet.)gh-111295: Fix
timenot checking for errors when initializing.gh-111253: Add error checking during
_socketmodule init.gh-111251: Fix
_blake2not checking for errors when initializing.gh-111233: Fix
selectnot checking for errors when initializing.gh-111230: Fix
sslnot checking for errors when initializing.gh-111174: Fix crash in
io.BytesIO.getbuffer()called repeatedly for empty BytesIO.gh-111187: Postpone removal version for locale.getdefaultlocale() to Python 3.15.
gh-111159: Fix
doctestoutput comparison for exceptions with notes.gh-110910: Fix invalid state handling in
asyncio.TaskGroupandasyncio.Timeout. They now raise proper RuntimeError if they are improperly used and are left in consistent state after this.gh-111092: Make turtledemo run without default root enabled.
gh-110944: Support alias and convenience vars for
pdbcompletiongh-110745: Added newline parameter to
pathlib.Path.read_text(). Patch by Junya Okabe.gh-84583: Make
pdbenter post-mortem mode even forSyntaxErrorgh-80675: Set
f_trace_lines = Trueon all frames uponpdb.set_trace()gh-110771: Expose the setup and cleanup portions of
asyncio.run_forever()as the standalone methodsasyncio.run_forever_setup()andasyncio.run_forever_cleanup(). This allows for tighter integration with GUI event loops.gh-110774: Support setting the
asyncio.Runnerloop_factory kwarg inunittest.IsolatedAsyncioTestCasegh-110392: Fix
tty.setraw()andtty.setcbreak(): previously they returned partially modified list of the original tty attributes.tty.cfmakeraw()andtty.cfmakecbreak()now make a copy of the list of special characters before modifying it.gh-59013: Make line number of function breakpoint more precise in
pdbgh-88434: Emit deprecation warning for non-integer numbers in
gettextfunctions and methods that consider plural forms even if the translation was not found.gh-110395: Ensure that
select.kqueue()objects correctly appear as closed in forked children, to prevent operations on an invalid file descriptor.gh-110196: Add
__reduce__method toIPv6Addressin order to keepscope_idgh-109747: Improve errors for unsupported look-behind patterns. Now re.error is raised instead of OverflowError or RuntimeError for too large width of look-behind pattern.
gh-109466: Add the
ipaddress.IPv4Address.ipv6_mappedproperty, which returns the IPv4-mapped IPv6 address.gh-85098: Implement the CLI of the
symtablemodule and improve the repr ofSymbol.gh-108791: Improved error handling in
pdbcommand line interface, making it produce more concise error messages.gh-105931: Change
compileallto only strip the stripdir prefix from the full path recorded in the compiled.pycfile, when the prefix matches the start of the full path in its entirety. When the prefix does not match, no stripping is performed and a warning to this effect is displayed.Previously all path components of the stripdir prefix that matched the full path were removed, while those that did not match were left alone (including ones interspersed between matching components).
gh-107431: Make the
DictProxyandListProxytypes inmultiprocessing.managersGeneric Alias Types for[]use in typing contexts.gh-72904: Add
glob.translate(). This function converts a pathname with shell-style wildcards to a regular expression.gh-90026: Define
USE_XATTRSon Cygwin so that XATTR-related functions in theosmodule become available.gh-90890: New methods
mailbox.Maildir.get_info(),mailbox.Maildir.set_info(),mailbox.Maildir.get_flags(),mailbox.Maildir.set_flags(),mailbox.Maildir.add_flag(),mailbox.Maildir.remove_flag(). These methods speed up accessing a message’s info and/or flags and are useful when it is not necessary to access the message’s contents, as when iterating over a Maildir to find messages with specific flags.gh-102956: Fix returning of empty byte strings after seek in zipfile module
gh-102895: Added a parameter
local_exitforcode.interact()to preventexit()andquitfrom closingsys.stdinand raiseSystemExit.gh-97928: Change the behavior of
tkinter.Text.count(). It now always returns an integer if one or less counting options are specified. Previously it could return a single count as a 1-tuple, an integer (only if option"update"was specified) orNoneif no items found. The result is now the same ifwantobjectsis set to0.gh-96954: Switch the storage of the unicode codepoint names to use a different data-structure, a directed acyclic word graph. This makes the unicodedata shared library about 440 KiB smaller. Contributed by Carl Friedrich Bolz-Tereick using code from the PyPy project.
gh-73561: Omit the interface scope from an IPv6 address when used as Host header by
http.client.gh-86826:
zipinfonow supports the full range of values in the TZ string determined by RFC 8536 and detects all invalid formats. Both Python and C implementations now raise exceptions of the same type on invalid data.
Tests¶
gh-111808: Make the default value of
test.support.infinite_recursion()to be conditional based on whether optimizations were used when compiling the interpreter. This helps with platforms like WASI whose stack size is greatly restricted in debug builds.gh-110722: Gathering line coverage of standard libraries within the regression test suite is now precise, as well as much faster. Patch by Łukasz Langa.
gh-110367: Make regrtest
--verbose3option compatible with--huntrleaks -jNoptions. The./python -m test -j1 -R 3:3 --verbose3command now works as expected. Patch by Victor Stinner.gh-111165: Remove no longer used functions
run_unittest()andrun_doctest()from thetest.supportmodule.gh-110932: Fix regrtest if the
SOURCE_DATE_EPOCHenvironment variable is defined: use the variable value as the random seed. Patch by Victor Stinner.gh-110995: test_gdb: Fix detection of gdb built without Python scripting support. Patch by Victor Stinner.
gh-110918: Test case matching patterns specified by options
--match,--ignore,--matchfileand--ignorefileare now tested in the order of specification, and the last match determines whether the test case be run or ignored.gh-108747: Add unit test for
usercustomizeandsitecustomizehooks fromsite.
Build¶
gh-96954: Make
make regen-unicodedatawork for out-of-tree builds of CPython.gh-112088: Add
Tools/build/regen-configure.shscript to regenerate theconfigurewith an Ubuntu container image. Thequay.io/tiran/cpython_autoconf:271container image (tiran/cpython_autoconf) is no longer used. Patch by Victor Stinner.gh-111046: For wasi-threads, memory is now exported to fix compatibility issues with some wasm runtimes.
gh-110828: AIX 32bit needs
-latomicto build the_testcapiextension module.gh-85283: The
errno,md5,resource,winsound,_ctypes_test,_multiprocessing.posixshmem,_scproxy,_stat,_testimportmultipleand_uuidC extensions are now built with the limited C API. Patch by Victor Stinner.
Windows¶
gh-111856: Fixes
fstat()on file systems that do not support file ID requests. This includes FAT32 and exFAT.gh-111293: Fix
os.DirEntry.inodedropping higher 64 bits of a file id on some filesystems on Windows.gh-110913: WindowsConsoleIO now correctly chunks large buffers without splitting up UTF-8 sequences.
macOS¶
gh-59703: For macOS framework builds, in
getpath.cuse the systemdladdrfunction to find the path to the shared library rather than depending on deprecated macOS APIs.gh-110950: Update macOS installer to include an upstream Tcl/Tk fix for the
Secure coding is not enabled for restorable state!warning encountered in Tkinter on macOS 14 Sonoma.gh-111015: Ensure that IDLE.app and Python Launcher.app are installed with appropriate permissions on macOS builds.
gh-71383: Update macOS installer to include an upstream Tcl/Tk fix for the
ttk::ThemeChangederror encountered in Tkinter.gh-92603: Update macOS installer to include a fix accepted by upstream Tcl/Tk for a crash encountered after the first
tkinter.Tk()instance is destroyed.
IDLE¶
bpo-35668: Add docstrings to the IDLE debugger module. Fix two bugs: initialize
Idb.botframe(should be in Bdb); inIdb.in_rpc_code, check whetherprev_frameisNonebefore trying to use it. Greatly expand test_debugger.
Tools/Demos¶
gh-111903: Argument Clinic now supports the
@critical_sectiondirective that instructs Argument Clinic to generate a critical section around the function call, which locks theselfobject in--disable-gilbuilds. Patch by Sam Gross.
C API¶
gh-112026: Add again the private
_PyThreadState_UncheckedGet()function as an alias to the new publicPyThreadState_GetUnchecked()function. Patch by Victor Stinner.gh-112026: Restore the removed
_PyDict_GetItemStringWithError()function. It is used by numpy. Patch by Victor Stinner.gh-112026: Restore removed private C API functions, macros and structures which have no simple replacement for now:
_PyDict_GetItem_KnownHash()
_PyDict_NewPresized()
_PyHASH_BITS
_PyHASH_IMAG
_PyHASH_INF
_PyHASH_MODULUS
_PyHASH_MULTIPLIER
_PyLong_Copy()
_PyLong_FromDigits()
_PyLong_New()
_PyLong_Sign()
_PyObject_CallMethodId()
_PyObject_CallMethodNoArgs()
_PyObject_CallMethodOneArg()
_PyObject_CallOneArg()
_PyObject_EXTRA_INIT
_PyObject_FastCallDict()
_PyObject_GetAttrId()
_PyObject_Vectorcall()
_PyObject_VectorcallMethod()
_PyStack_AsDict()
_PyThread_CurrentFrames()
_PyUnicodeWriter structure
_PyUnicodeWriter_Dealloc()
_PyUnicodeWriter_Finish()
_PyUnicodeWriter_Init()
_PyUnicodeWriter_Prepare()
_PyUnicodeWriter_PrepareKind()
_PyUnicodeWriter_WriteASCIIString()
_PyUnicodeWriter_WriteChar()
_PyUnicodeWriter_WriteLatin1String()
_PyUnicodeWriter_WriteStr()
_PyUnicodeWriter_WriteSubstring()
_PyUnicode_AsString()
_PyUnicode_FromId()
_PyVectorcall_Function()
_Py_IDENTIFIER()
_Py_c_abs()
_Py_c_diff()
_Py_c_neg()
_Py_c_pow()
_Py_c_prod()
_Py_c_quot()
_Py_c_sum()
_Py_static_string()
_Py_static_string_init()
Patch by Victor Stinner.
gh-112026: Add again
<ctype.h>and<unistd.h>includes inPython.h, but don’t include them in the limited C API version 3.13 and newer. Patch by Victor Stinner.gh-111956: Add internal-only one-time initialization API:
_PyOnceFlagand_PyOnceFlag_CallOnce.gh-111262: Add
PyDict_Pop()andPyDict_PopString()functions: remove a key from a dictionary and optionally return the removed value. This is similar todict.pop(), but without the default value and not raisingKeyErrorif the key missing. Patch by Stefan Behnel and Victor Stinner.gh-111863: Rename
Py_NOGILtoPy_GIL_DISABLED. Patch by Hugo van Kemenade.gh-111138: Add
PyList_Extend()andPyList_Clear()functions: similar to Pythonlist.extend()andlist.clear()methods. Patch by Victor Stinner.gh-108765: On Windows,
Python.hno longer includes the<stddef.h>standard header file. If needed, it should now be included explicitly. Patch by Victor Stinner.gh-111569: Implement “Python Critical Sections” from PEP 703. These are macros to help replace the GIL with per-object locks in the
--disable-gilbuild of CPython. The macros are no-ops in the default build.gh-111506: In the limited C API version 3.13,
Py_SET_REFCNT()function is now implemented as an opaque function call. Patch by Victor Stinner.gh-108082: Add
PyErr_FormatUnraisable()function.gh-110964: Move the undocumented private _PyArg functions and _PyArg_Parser structure to internal C API (
pycore_modsupport.h). Patch by Victor Stinner.gh-110815: Support non-ASCII keyword names in
PyArg_ParseTupleAndKeywords().gh-109587: Introduced
PyUnstable_PerfTrampoline_CompileCode(),PyUnstable_PerfTrampoline_SetPersistAfterFork()andPyUnstable_CopyPerfMapFile(). These functions allow extension modules to initialize trampolines eagerly, after the application is “warmed up”. This makes it possible to have perf-trampolines running in an always-enabled fashion.gh-85283: Add the
PySys_Audit()function to the limited C API. Patch by Victor Stinner.gh-85283: Add
PyMem_RawMalloc(),PyMem_RawCalloc(),PyMem_RawRealloc()andPyMem_RawFree()to the limited C API. Patch by Victor Stinner.gh-106672: Functions
PyDict_GetItem(),PyDict_GetItemString(),PyMapping_HasKey(),PyMapping_HasKeyString(),PyObject_HasAttr(),PyObject_HasAttrString(), andPySys_GetObject(), which clear all errors occurred during calling the function, report now them usingsys.unraisablehook().gh-67565: Remove redundant C-contiguity check in
getargs.c,binascii,ssland Argument Clinic. Patched by Stefan Krah and Furkan Onder
Python 3.13.0 alpha 1¶
Release date: 2023-10-13
Security¶
gh-108310: Fixed an issue where instances of
ssl.SSLSocketwere vulnerable to a bypass of the TLS handshake and included protections (like certificate verification) and treating sent unencrypted data as if it were post-handshake TLS encrypted data. Security issue reported as CVE 2023-40217 by Aapo Oksman. Patch by Gregory P. Smith.gh-107774: PEP 669 specifies that
sys.monitoring.register_callbackwill generate an audit event. Pre-releases of Python 3.12 did not generate the audit event. This is now fixed.gh-102988: Reverted the
email.utilssecurity improvement change released in 3.12beta4 that unintentionally causedemail.utils.getaddressesto fail to parse email addresses with a comma in the quoted name field. See gh-106669.gh-99108: Refresh our new HACL* built-in
hashlibcode from upstream. Built-in SHA2 should be faster and an issue with SHA3 on 32-bit platforms is fixed.gh-102509: Start initializing
ob_digitduring creation ofPyLongObjectobjects. Patch by Illia Volochii.
Core and Builtins¶
gh-110782: Fix crash when
typing.TypeVaris constructed with a keyword argument. Patch by Jelle Zijlstra.gh-110752: Reset
ceval.eval_breakerininterpreter_clear()gh-110721: Use the
tracebackimplementation for the defaultPyErr_Display()functionality. Patch by Pablo Galindogh-110696: Fix incorrect error message for invalid argument unpacking. Patch by Pablo Galindo
gh-104169: Split the tokenizer into two separate directories: - One part includes the actual lexeme producing logic and lives in
Parser/lexer. - The second part wraps the lexer according to the different tokenization modes we have (string, utf-8, file, interactive, readline) and lives inParser/tokenizer.gh-110688: Remove undocumented
test_c_apimethod fromset, which was only defined for testing purposes underPy_DEBUG. Now we have proper CAPI tests.gh-104584: Fix a reference leak when running with
PYTHONUOPSor-X uopsenabled.gh-110514: Add
PY_THROWtosys.setprofile()eventsgh-110489: Optimise
math.ceil()when the input is exactly a float, resulting in about a 10% improvement.gh-110455: Guard
assert(tstate->thread_id > 0)with#ifndef HAVE_PTHREAD_STUBS. This allows for for pydebug builds to work under WASI which (currently) lacks thread support.gh-110309: Remove unnecessary empty constant nodes in the ast of f-string specs.
gh-110259: Correctly identify the format spec in f-strings (with single or triple quotes) that have multiple lines in the expression part and include a formatting spec. Patch by Pablo Galindo
gh-110237: Fix missing error checks for calls to
PyList_Appendin_PyEval_MatchClass.gh-110164: regrtest: If the
SOURCE_DATE_EPOCHenvironment variable is defined, regrtest now disables tests randomization. Patch by Victor Stinner.gh-109889: Fix the compiler’s redundant NOP detection algorithm to skip over NOPs with no line number when looking for the next instruction’s lineno.
gh-109853:
sys.path[0]is now set correctly for subinterpreters.gh-109923: Set line number on the
POP_TOPthat follows aRETURN_GENERATOR.gh-105716: Subinterpreters now correctly handle the case where they have threads running in the background. Before, such threads would interfere with cleaning up and destroying them, as well as prevent running another script.
gh-109369: The internal eval_breaker and supporting flags, plus the monitoring version have been merged into a single atomic integer to speed up checks.
gh-109823: Fix bug where compiler does not adjust labels when removing an empty basic block which is a jump target.
gh-109793: The main thread no longer exits prematurely when a subinterpreter is cleaned up during runtime finalization. The bug was a problem particularly because, when triggered, the Python process would always return with a 0 exitcode, even if it failed.
gh-109719: Fix missing jump target labels when compiler reorders cold/warm blocks.
gh-109595: Add
-X cpu_countcommand line option to override return results ofos.cpu_count()andos.process_cpu_count(). This option is useful for users who need to limit CPU resources of a container system without having to modify the container (application code). Patch by Donghee Na.gh-109627: Fix bug where the compiler does not assign a new jump target label to a duplicated small exit block.
gh-109596: Fix some tokens in the grammar that were incorrectly marked as soft keywords. Also fix some repeated rule names and ensure that repeated rules are not allowed. Patch by Pablo Galindo
gh-109496: On a Python built in debug mode,
Py_DECREF()now calls_Py_NegativeRefcount()if the object is a dangling pointer to deallocated memory: memory filled with0xDD“dead byte” by the debug hook on memory allocators. The fix is to check the reference count before checking for_Py_IsImmortal(). Patch by Victor Stinner.gh-107265: Deopt opcodes hidden by the executor when base opcode is needed
gh-109371: Deopted instructions correctly for tool initialization and modified the incorrect assertion in instrumentation, when a previous tool already sets INSTRUCTION events
gh-105658: Fix bug where the line trace of an except block ending with a conditional includes an excess event with the line of the conditional expression.
gh-109219: Fix compiling type param scopes that use a name which is also free in an inner scope.
gh-109351: Fix crash when compiling an invalid AST involving a named (walrus) expression.
gh-109341: Fix crash when compiling an invalid AST involving a
ast.TypeAlias.gh-109195: Fix source location for the
LOAD_*instruction preceding aLOAD_SUPER_ATTRto load thesuperglobal (or shadowing variable) so that it encompasses only the namesuperand not the following parentheses.gh-109256: Opcode IDs for specialized opcodes are allocated in their own range to improve stability of the IDs for the ‘real’ opcodes.
gh-109207: Fix a SystemError in
__repr__of symtable entry object.gh-109179: Fix bug where the C traceback display drops notes from
SyntaxError.gh-109118: Disallow nested scopes (lambdas, generator expressions, and comprehensions) within PEP 695 annotation scopes that are nested within classes.
gh-109156: Add tests for de-instrumenting instructions while keeping the instrumentation for lines
gh-109114: Relax the detection of the error message for invalid lambdas inside f-strings to not search for arbitrary replacement fields to avoid false positives. Patch by Pablo Galindo
gh-105848: Add a new
CALL_KWopcode, used for calls containing keyword arguments. Also, fix a possible crash when jumping over method calls in a debugger.gh-109052: Use the base opcode when comparing code objects to avoid interference from instrumentation
gh-109118: Fix interpreter crash when a NameError is raised inside the type parameters of a generic class.
gh-88943: Improve syntax error for non-ASCII character that follows a numerical literal. It now points on the invalid non-ASCII character, not on the valid numerical literal.
gh-108976: Fix crash that occurs after de-instrumenting a code object in a monitoring callback.
gh-108732: Make iteration variables of module- and class-scoped comprehensions visible to pdb and other tools that use
frame.f_localsagain.gh-108959: Fix caret placement for error locations for subscript and binary operations that involve non-semantic parentheses and spaces. Patch by Pablo Galindo
gh-104584: Fix a crash when running with
PYTHONUOPSor-X uopsenabled and an error occurs during optimization.gh-108727: Define
tp_deallocforCounterOptimizer_Type. This fixes a segfault on deallocation.gh-108520: Fix
multiprocessing.synchronize.SemLock.__setstate__()to properly initializemultiprocessing.synchronize.SemLock._is_fork_ctx. This fixes a regression when passing a SemLock across nested processes.Rename
multiprocessing.synchronize.SemLock.is_fork_ctxtomultiprocessing.synchronize.SemLock._is_fork_ctxto avoid exposing it as public API.gh-108654: Restore locals shadowed by an inlined comprehension if the comprehension raises an exception.
gh-108488: Change the initialization of inline cache entries so that the cache entry for
JUMP_BACKWARDis initialized to zero, instead of theadaptive_counter_warmup()value used for all other instructions. This counter, unique among instructions, counts up from zero.gh-108716: Turn off deep-freezing of code objects. Modules are still frozen, so that a file system search is not needed for common modules.
gh-108614: Add RESUME_CHECK instruction, to avoid having to handle instrumentation, signals, and contexts switches in the tier 2 execution engine.
gh-108487: Move an assert that would cause a spurious crash in a devious case that should only trigger deoptimization.
gh-106176: Use a
WeakValueDictionaryto track the lists containing the modules each thread is currently importing. This helps avoid a reference leak from keeping the list around longer than necessary. Weakrefs are used as GC can’t interrupt the cleanup.gh-105481: The regen-opcode build stage was removed and its work is now done in regen-cases.
gh-107901: Fix missing line number on
JUMP_BACKWARDat the end of a for loop.gh-108113: The
compile()built-in can now accept a new flag,ast.PyCF_OPTIMIZED_AST, which is similar toast.PyCF_ONLY_ASTexcept that the returnedASTis optimized according to the value of theoptimizeargument.ast.parse()now accepts an optional argumentoptimizewhich is passed on to thecompile()built-in. This makes it possible to obtain an optimizedAST.gh-107971: Opcode IDs are generated from bytecodes.c instead of being hard coded in opcode.py.
gh-107944: Improve error message for function calls with bad keyword arguments. Patch by Pablo Galindo
gh-108390: Raise an exception when setting a non-local event (
RAISE,EXCEPTION_HANDLED, etc.) insys.monitoring.set_local_events.Fixes crash when tracing in recursive calls to Python classes.
gh-108035: Remove the
_PyCFramestruct, moving the pointer to the current interpreter frame back to the threadstate, as it was for 3.10 and earlier. The_PyCFrameexisted as a performance optimization for tracing. Since PEP 669 has been implemented, this optimization no longer applies.gh-91051: Fix abort / segfault when using all eight type watcher slots, on platforms where
charis signed by default.gh-106581: Fix possible assertion failures and missing instrumentation events when
PYTHONUOPSor-X uopsis enabled.gh-107526: Revert converting
vars,dir,next,getattr, anditerto argument clinic.gh-84805: Autogenerate signature for
METH_NOARGSandMETH_Oextension functions.gh-107758: Make the
dump_stack()routine used by thelltracefeature (low-level interpreter debugging) robust against recursion by ensuring that it never calls a__repr__method implemented in Python. Also make the similar output for Tier-2 uops appear onstdout(instead ofstderr), to match thelltracecode in ceval.c.gh-107659: Add docstrings for
ctypes.pointer()andctypes.POINTER().gh-105848: Modify the bytecode so that the actual callable for a
CALLis at a consistent position on the stack (regardless of whether or not bound-method-calling optimizations are active).gh-107674: Fixed performance regression in
sys.settrace.gh-107724: In pre-release versions of 3.12, up to rc1, the sys.monitoring callback function for the
PY_THROWevent was missing the third, exception argument. That is now fixed.gh-84436: Skip reference count modifications for many known immortal objects.
gh-107596: Specialize subscripting
strobjects byintindexes.gh-107080: Trace refs builds (
--with-trace-refs) were crashing when used with isolated subinterpreters. The problematic global state has been isolated to each interpreter. Other fixing the crashes, this change does not affect users.gh-107557: Generate the cases needed for the barebones tier 2 abstract interpreter for optimization passes in CPython.
gh-106608: Make
_PyUOpExecutorObjectvariable length.gh-100964: Clear generators’ exception state after
returnto break reference cycles.gh-107455: Improve error messages when converting an incompatible type to
ctypes.c_char_p,ctypes.c_wchar_pandctypes.c_void_p.gh-107263: Increase C recursion limit for functions other than the main interpreter from 800 to 1500. This should allow functions like
list.__repr__andjson.dumpsto handle all the inputs that they could prior to 3.12gh-104584: Fix an issue which caused incorrect inline caches to be read when running with
PYTHONUOPSor-X uopsenabled.gh-104432: Fix potential unaligned memory access on C APIs involving returned sequences of
char *pointers within thegrpandsocketmodules. These were revealed using a-fsaniziter=alignmentbuild on ARM macOS. Patch by Christopher Chavez.gh-106078: Isolate
_decimal(apply PEP 687). Patch by Charlie Zhao.gh-106898: Add the exception as the third argument to
PY_UNINDcallbacks insys.monitoring. This makes thePY_UNWINDcallback consistent with the other exception handling callbacks.gh-106895: Raise a
ValueErrorwhen a monitoring callback function returnsDISABLEfor events that cannot be disabled locally.gh-106897: Add a
RERAISEevent tosys.monitoring, which occurs when an exception is reraise, either explicitly by a plainraisestatement, or implicitly in anexceptorfinallyblock.gh-77377: Ensure that multiprocessing synchronization objects created in a fork context are not sent to a different process created in a spawn context. This changes a segfault into an actionable RuntimeError in the parent process.
gh-106931: Statically allocated string objects are now interned globally instead of per-interpreter. This fixes a situation where such a string would only be interned in a single interpreter. Normal string objects are unaffected.
gh-104621: Unsupported modules now always fail to be imported.
gh-107122: Add
dbm.ndbm.ndbm.clear()todbm.ndbm. Patch By Donghee Na.gh-107122: Add
dbm.gnu.gdbm.clear()todbm.gnu. Patch By Donghee Na.gh-107015: The ASYNC and AWAIT tokens are removed from the Grammar, which removes the possibility of making
asyncandawaitsoft keywords when usingfeature_version<7inast.parse().gh-106917: Fix classmethod-style
super()method calls (i.e., where the second argument tosuper(), or the implied second argument drawn fromself/clsin the case of zero-arg super, is a type) when the target of the call is not a classmethod.gh-105699: Python no longer crashes due an infrequent race when initializing per-interpreter interned strings. The crash would manifest when the interpreter was finalized.
gh-105699: Python no longer crashes due to an infrequent race in setting
Py_FileSystemDefaultEncodingandPy_FileSystemDefaultEncodeErrors(both deprecated), when simultaneously initializing two isolated subinterpreters. Now they are only set during runtime initialization.gh-106908: Fix various hangs, reference leaks, test failures, and tracing/introspection bugs when running with
PYTHONUOPSor-X uopsenabled.gh-106092: Fix a segmentation fault caused by a use-after-free bug in
frame_deallocwhen the trashcan delays the deallocation of aPyFrameObject.gh-106485: Reduce the number of materialized instances dictionaries by dematerializing them when possible.
gh-106719: No longer suppress arbitrary errors in the
__annotations__getter and setter in the type and module types.gh-106723: Propagate
frozen_modulesto multiprocessing spawned process interpreters.gh-104909: Split
LOAD_ATTR_INSTANCE_VALUEinto micro-ops.gh-104909: Split
LOAD_GLOBALspecializations into micro-ops.gh-106597: A new debug structure of offsets has been added to the
_PyRuntimeStatethat will help out-of-process debuggers and profilers to obtain the offsets to relevant interpreter structures in a way that is agnostic of how Python was compiled and that doesn’t require copying the headers. Patch by Pablo Galindogh-106487: Allow the count argument of
str.replace()to be a keyword. Patch by Hugo van Kemenade.gh-96844: Improve error message of
list.remove(). Patch by Donghee Na.gh-81283: Compiler now strips indents from docstrings. It reduces
pycfile size 5% when the module is heavily documented. This change affects to__doc__so tools like doctest will be affected.gh-106396: When the format specification of an f-string expression is empty, the parser now generates an empty
ast.JoinedStrnode for it instead of an one-elementast.JoinedStrwith an empty stringast.Constant.gh-100288: Specialize
LOAD_ATTRfor non-descriptors on the class. AddsLOAD_ATTR_NONDESCRIPTOR_WITH_VALUESandLOAD_ATTR_NONDESCRIPTOR_NO_DICT.gh-106008: Fix possible reference leaks when failing to optimize comparisons with
Nonein the bytecode compiler.gh-106145: Make
end_linenoandend_col_offsetrequired ontype_paramast nodes.gh-106213: Changed the way that Emscripten call trampolines work for compatibility with Wasm/JS Promise integration.
gh-106182:
sys.getfilesystemencoding()andsys.getfilesystemencodeerrorsnow return interned Unicode object.gh-106210: Removed Emscripten import trampoline as it was no longer necessary for Pyodide.
gh-104584: Added a new, experimental, tracing optimizer and interpreter (a.k.a. “tier 2”). This currently pessimizes, so don’t use yet – this is infrastructure so we can experiment with optimizing passes. To enable it, pass
-Xuopsor setPYTHONUOPS=1. To get debug output, setPYTHONUOPSDEBUG=NwhereNis a debug level (0-4, where 0 is no debug output and 4 is excessively verbose).gh-105775:
LOAD_CLOSUREis now a pseudo-op.gh-105730: Allow any callable other than type objects as the condition predicate in
BaseExceptionGroup.split()andBaseExceptionGroup.subgroup().gh-105979: Fix crash in
_imp.get_frozen_object()due to improper exception handling.gh-106003: Add a new
TO_BOOLinstruction, which performs boolean conversions forPOP_JUMP_IF_TRUE,POP_JUMP_IF_FALSE, andUNARY_NOT(which all expect exactboolvalues now). Also, modify the oparg ofCOMPARE_OPto include an optional “boolean conversion” flag.gh-98931: Ensure custom
SyntaxErrorerror messages are raised for invalid imports with multiple targets. Patch by Pablo Galindogh-105724: Improve
asserterror messages by providing exact error range.gh-105908: Fixed bug where gh-99111 breaks future import
barry_as_FLUFLin the Python REPL.gh-105840: Fix possible crashes when specializing function calls with too many
__defaults__.gh-105831: Fix an f-string bug, where using a debug expression (the
=sign) that appears in the last line of a file results to the debug buffer that holds the expression text being one character too small.gh-105800: Correctly issue
SyntaxWarningin f-strings if invalid sequences are used. Patch by Pablo Galindogh-105340: Include the comprehension iteration variable in
locals()inside a module- or class-scope comprehension.gh-105331: Raise
ValueErrorif thedelayargument toasyncio.sleep()is a NaN (matchingtime.sleep()).gh-105587: The runtime can’t guarantee that immortal objects will not be mutated by Extensions. Thus, this modifies _PyStaticObject_CheckRefcnt to warn instead of asserting.
gh-105564: Don’t include artificil newlines in the
lineattribute of tokens in the APIs of thetokenizemodule. Patch by Pablo Galindogh-105549: Tokenize separately
NUMBERandNAMEtokens that are not ambiguous. Patch by Pablo Galindo.gh-105588: Fix an issue that could result in crashes when compiling malformed
astnodes.gh-100987: Allow objects other than code objects as the “executable” in internal frames. In the long term, this can help tools like Cython and PySpy interact more efficiently. In the shorter term, it allows us to perform some optimizations more simply.
gh-105375: Fix bugs in the
builtinsmodule where exceptions could end up being overwritten.gh-105375: Fix bug in the compiler where an exception could end up being overwritten.
gh-105375: Improve error handling in
PyUnicode_BuildEncodingMap()where an exception could end up being overwritten.gh-105486: Change the repr of
ParamSpeclist of args intypes.GenericAlias.gh-105678: Break the
MAKE_FUNCTIONinstruction into two parts,MAKE_FUNCTIONwhich makes the function andSET_FUNCTION_ATTRIBUTEwhich sets the attributes on the function. This makes the stack effect ofMAKE_FUNCTIONregular to ease optimization and code generation.gh-105435: Fix spurious newline character if file ends on a comment without a newline. Patch by Pablo Galindo
gh-105390: Correctly raise
tokenize.TokenErrorexceptions instead ofSyntaxErrorfor tokenize errors such as incomplete input. Patch by Pablo Galindogh-105259: Don’t include newline character for trailing
NEWLINEtokens emitted in thetokenizemodule. Patch by Pablo Galindogh-104635: Eliminate redundant
STORE_FASTinstructions in the compiler. Patch by Donghee Na and Carl Meyer.gh-105324: Fix the main function of the
tokenizemodule when reading fromsys.stdin. Patch by Pablo Galindogh-33092: Simplify and speed up interpreter for f-strings. Removes
FORMAT_VALUEopcode. AddCONVERT_VALUE,FORMAT_SIMPLEandFORMAT_WITH_SPECopcode. Compiler emits more efficient sequence for each format expression.gh-105229: Remove remaining two-codeunit superinstructions. All remaining superinstructions only take a single codeunit, simplifying instrumentation and quickening.
gh-105235: Prevent out-of-bounds memory access during
mmap.find()calls.gh-98963: Restore the ability for a subclass of
propertyto define__slots__or otherwise be dict-less by ignoring failures to set a docstring on such a class. This behavior had regressed in 3.12beta1. AnAttributeErrorwhere there had not previously been one was disruptive to existing code.gh-104812: The “pending call” machinery now works for all interpreters, not just the main interpreter, and runs in all threads, not just the main thread. Some calls are still only done in the main thread, ergo in the main interpreter. This change does not affect signal handling nor the existing public C-API (
Py_AddPendingCall()), which both still only target the main thread. The new functionality is meant strictly for internal use for now, since consequences of its use are not well understood yet outside some very restricted cases. This change brings the capability in line with the intention when the state was made per-interpreter several years ago.gh-105194: Do not escape with backslashes f-string format specifiers. Patch by Pablo Galindo
gh-105229: Replace some dynamic superinstructions with single instruction equivalents.
gh-105162: Fixed bug in generator.close()/throw() where an inner iterator would be ignored when the outer iterator was instrumented.
gh-105164: Ensure annotations are set up correctly if the only annotation in a block is within a
matchblock. Patch by Jelle Zijlstra.gh-105148: Make
_PyASTOptimizeStateinternal to ast_opt.c. Make_PyAST_Optimizetake two integers instead of a pointer to this struct. This avoids the need to include pycore_compile.h in ast_opt.c.gh-104799: Attributes of
astnodes that are lists now default to the empty list if omitted. This means that some code that previously raisedTypeErrorwhen the AST node was used will now proceed with the empty list instead. Patch by Jelle Zijlstra.gh-105111: Remove the old trashcan macros
Py_TRASHCAN_SAFE_BEGINandPy_TRASHCAN_SAFE_END. They should be replaced by the new macrosPy_TRASHCAN_BEGINandPy_TRASHCAN_END.gh-105035: Fix
super()calls on types with customtp_getattroimplementation (e.g. meta-types.)gh-105017: Show CRLF lines in the tokenize string attribute in both NL and NEWLINE tokens. Patch by Marta Gómez.
gh-105013: Fix handling of multiline parenthesized lambdas in
inspect.getsource(). Patch by Pablo Galindogh-105017: Do not include an additional final
NLtoken when parsing files having CRLF lines. Patch by Marta Gómez.gh-104976: Ensure that trailing
DEDENTtokenize.TokenInfoobjects emitted by thetokenizemodule are reported as in Python 3.11. Patch by Pablo Galindogh-104972: Ensure that the
lineattribute intokenize.TokenInfoobjects in thetokenizemodule are always correct. Patch by Pablo Galindogh-104955: Fix signature for the new
__release_buffer__()slot. Patch by Jelle Zijlstra.gh-104690: Starting new threads and process creation through
os.fork()during interpreter shutdown (such as fromatexithandlers) is no longer supported. It can lead to race condition between the main Python runtime thread freeing thread states while internalthreadingroutines are trying to allocate and use the state of just created threads. Or forked children trying to use the mid-shutdown runtime and thread state in the child process.gh-104879: Fix crash when accessing the
__module__attribute of type aliases defined outside a module. Patch by Jelle Zijlstra.gh-104825: Tokens emitted by the
tokenizemodule do not include an implicit\ncharacter in thelineattribute anymore. Patch by Pablo Galindogh-104770: If a generator returns a value upon being closed, the value is now returned by
generator.close().gh-89091: Raise
RuntimeWarningfor unawaited async generator methods likeasend(),athrow()andaclose(). Patch by Kumar Aditya.gh-96663: Add a better, more introspect-able error message when setting attributes on classes without a
__dict__and no slot member for the attribute.gh-93627: Update the Python pickle module implementation to match the C implementation of the pickle module. For objects setting reduction methods like
__reduce_ex__()or__reduce__()toNone, pickling will result in aTypeError.gh-91095: Specializes calls to most Python classes. Specifically, any class that inherits from
object, or another Python class, and does not override__new__.The specialized instruction does the following:
Creates the object (by calling
object.__new__)Pushes a shim frame to the frame stack (to cleanup after
__init__)Pushes the frame for
__init__to the frame stack
Speeds up the instantiation of most Python classes.
Library¶
gh-110786:
sysconfig’s CLI now ignoresBrokenPipeError, making it exit normally if its output is being piped and the pipe closes.gh-103480: The
sysconfigmodule is now a package, instead of a single-file module.gh-110733: Micro-optimization: Avoid calling
min(),max()inBaseEventLoop._run_once().gh-94597: Added
asyncio.EventLoopfor use with theasyncio.run()loop_factory kwarg to avoid calling the asyncio policy system.gh-110682:
runtime-checkable protocolsused to consider__match_args__a protocol member in__instancecheck__if it was present on the protocol. Now, this attribute is ignored if it is present.gh-110488: Fix a couple of issues in
pathlib.PurePath.with_name(): a single dot was incorrectly considered a valid name, and inPureWindowsPath, a name with an NTFS alternate data stream, likea:b, was incorrectly considered invalid.gh-110590: Fix a bug in
_sre.compile()whereTypeErrorwould be overwritten byOverflowErrorwhen the code argument was a list of non-ints.gh-65052: Prevent
pdbfrom crashing when trying to display undisplayable objectsgh-110519: Deprecation warning about non-integer number in
gettextnow always refers to the line in the user code where gettext function or method is used. Previously it could refer to a line ingettextcode.gh-89902: Deprecate non-standard format specifier “N” for
decimal.Decimal. It was not documented and only supported in the C implementation.gh-110378:
contextmanager()andasynccontextmanager()context managers now close an invalid underlying generator object that yields more then one value.gh-106670: In
pdb, set convenience variable$_exceptionfor post mortem debugging.gh-110365: Fix
termios.tcsetattr()bug that was overwriting existing errors during parsing integers fromtermlist.gh-109653: Slightly improve the import time of several standard-library modules by deferring imports of
warningswithin those modules. Patch by Alex Waygood.gh-110273:
dataclasses.replace()now raises TypeError instead of ValueError if specify keyword argument for a field declared with init=False or miss keyword argument for required InitVar field.gh-110249: Add
--inline-cachesflag todiscommand line.gh-109653: Fix a Python 3.12 regression in the import time of
random. Patch by Alex Waygood.gh-110222: Add support of struct sequence objects in
copy.replace(). Patched by Xuehai Pan.gh-109649:
multiprocessing,concurrent.futures,compileall: Replaceos.cpu_count()withos.process_cpu_count()to select the default number of worker threads and processes. Get the CPU affinity if supported. Patch by Victor Stinner.gh-110150: Fix base case handling in statistics.quantiles. Now allows a single data point.
gh-110036: On Windows, multiprocessing
Popen.terminate()now catchesPermissionErrorand get the process exit code. If the process is still running, raise again thePermissionError. Otherwise, the process terminated as expected: store its exit code. Patch by Victor Stinner.gh-110038: Fixed an issue that caused
KqueueSelector.select()to not return all the ready events in some cases when a file descriptor is registered for both read and write.gh-110045: Update the
symtablemodule to support the new scopes introduced by PEP 695.gh-88402: Add new variables to
sysconfig.get_config_vars()on Windows:LIBRARY,LDLIBRARY,LIBDIR,SOABI, andPy_NOGIL.gh-109631:
refunctions such asre.findall(),re.split(),re.search()andre.sub()which perform short repeated matches can now be interrupted by user.gh-109653: Reduce the import time of
email.utilsby around 43%. This results in the import time ofemail.messagefalling by around 18%, which in turn reduces the import time ofimportlib.metadataby around 6%. Patch by Alex Waygood.gh-109818: Fix
reprlib.recursive_repr()not copying__type_params__from decorated function.gh-109047:
concurrent.futures: The executor manager thread now catches exceptions when adding an item to the call queue. During Python finalization, creating a new thread can now raiseRuntimeError. Catch the exception and callterminate_broken()in this case. Patch by Victor Stinner.gh-109782: Ensure the signature of
os.path.isdir()is identical on all platforms. Patch by Amin Alaee.gh-109653: Improve import time of
functoolsby around 13%. Patch by Alex Waygood.gh-109590:
shutil.which()will prefer files with an extension inPATHEXTif the given mode includesos.X_OKon win32. If noPATHEXTmatch is found, a file without an extension inPATHEXTcan be returned. This change will haveshutil.which()act more similarly to previous behavior in Python 3.11.gh-109653: Reduce the import time of
enumby over 50%. Patch by Alex Waygood.gh-109593: Avoid deadlocking on a reentrant call to the multiprocessing resource tracker. Such a reentrant call, though unlikely, can happen if a GC pass invokes the finalizer for a multiprocessing object such as SemLock.
gh-109653: Reduce the import time of
typingby around a third. Patch by Alex Waygood.gh-109649: Add
os.process_cpu_count()function to get the number of logical CPUs usable by the calling thread of the current process. Patch by Victor Stinner.