Changelog¶
Python 3.13.12 final¶
Release date: 2026-02-03
Windows¶
gh-128067: Fix a bug in PyREPL on Windows where output without a trailing newline was overwritten by the next prompt.
Tools/Demos¶
gh-142095: Make gdb ‘py-bt’ command use frame from thread local state when available. Patch by Sam Gross and Victor Stinner.
Tests¶
gh-144415: The Android testbed now distinguishes between stdout/stderr messages which were triggered by a newline, and those triggered by a manual call to
flush. This fixes logging of progress indicators and similar content.gh-65784: Add support for parametrized resource
wantobjectsin regrtests, which allows to run Tkinter tests with the specified value oftkinter.wantobjects, for example-u wantobjects=0.gh-143553: Add support for parametrized resources, such as
-u xpickle=2.7.gh-142836: Accommodated Solaris in
test_pdb.test_script_target_anonymous_pipe.gh-129401: Fix a flaky test in
test_repr_rlockthat checks the representation ofmultiprocessing.RLock.bpo-31391: Forward-port test_xpickle from Python 2 to Python 3 and add the resource back to test’s command line.
Security¶
gh-144125:
BytesGeneratorwill 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-143935: Fixed a bug in the folding of comments when flattening an email message using a modern email policy. Comments consisting of a very long sequence of non-foldable characters could trigger a forced line wrap that omitted the required leading space on the continuation line, causing the remainder of the comment to be interpreted as a new header field. This enabled header injection with carefully crafted inputs.
gh-143925: Reject control characters in
data:URL media types.gh-143919: Reject control characters in
http.cookies.Morselfields and values.gh-143916: Reject C0 control characters within wsgiref.headers.Headers fields, values, and parameters.
Library¶
gh-144380: Improve performance of
io.BufferedReaderline iteration by ~49%.gh-144169: Fix three crashes when non-string keyword arguments are supplied to objects in the
astmodule.gh-144100: Fixed a crash in ctypes when using a deprecated
POINTER(str)type inargtypes. Instead of aborting, ctypes now raises a proper Python exception when the pointer target type is unresolved.gh-144050: Fix
stat.filemode()in the pure-Python implementation to avoid misclassifying invalid mode values as block devices.gh-144023: Fixed validation of file descriptor 0 in posix functions when used with follow_symlinks parameter.
gh-143999: Fix an issue where
inspect.getgeneratorstate()andinspect.getcoroutinestate()could fail for generators wrapped bytypes.coroutine()in the suspended state.gh-143706: Fix
multiprocessingforkserver so thatsys.argvis correctly set before__main__is preloaded. Previously,sys.argvwas empty during main module import in forkserver child processes. This fixes a regression introduced in 3.13.8 and 3.14.1. Root caused by Aaron Wieczorek, test provided by Thomas Watson, thanks!gh-143638: Forbid reentrant calls of the
pickle.Picklerandpickle.Unpicklermethods for the C implementation. Previously, this could cause crash or data corruption, now concurrent calls of methods of the same object raiseRuntimeError.gh-78724: Raise
RuntimeError’s when user attempts to call methods on half-initializedStructobjects, For example, created byStruct.__new__(Struct). Patch by Sergey B Kirpichev.gh-143602: Fix a inconsistency issue in
write()that leads to unexpected buffer overwrite by deduplicating the buffer exports.gh-143547: Fix
sys.unraisablehook()when the hook raises an exception and changessys.unraisablehook(): hold a strong reference to the old hook. Patch by Victor Stinner.gh-143378: Fix use-after-free crashes when a
BytesIOobject is concurrently mutated duringwrite()orwritelines().gh-143346: Fix incorrect wrapping of the Base64 data in
plistlib._PlistWriterwhen the indent contains a mix of tabs and spaces.gh-143310:
tkinter: fix a crash when a Pythonlistis mutated during the conversion to a Tcl object (e.g., when setting a Tcl variable). Patch by Bénédikt Tran.gh-143309: Fix a crash in
os.execve()on non-Windows platforms when given a custom environment mapping which is then mutated during parsing. Patch by Bénédikt Tran.gh-143308:
pickle: fix use-after-free crashes when aPickleBufferis concurrently mutated by a custom buffer callback during pickling. Patch by Bénédikt Tran and Aaron Wieczorek.gh-143237: Fix support of named pipes in the rotating
logginghandlers.gh-143249: Fix possible buffer leaks in Windows overlapped I/O on error handling.
gh-143241:
zoneinfo: fix infinite loop inZoneInfo.from_filewhen parsing a malformed TZif file. Patch by Fatih Celik.gh-142830:
sqlite3: fix use-after-free crashes when the connection’s callbacks are mutated during a callback execution. Patch by Bénédikt Tran.gh-143200:
xml.etree.ElementTree: fix use-after-free crashes in__getitem__()and__setitem__()methods ofElementwhen the element is concurrently mutated. Patch by Bénédikt Tran.gh-142195: Updated timeout evaluation logic in
subprocessto be compatible with deterministic environments like Shadow where time moves exactly as requested.gh-143145: Fixed a possible reference leak in ctypes when constructing results with multiple output parameters on error.
gh-122431: Corrected the error message in
readline.append_history_file()to state thatnelementsmust be non-negative instead of positive.gh-143004: Fix a potential use-after-free in
collections.Counter.update()when user code mutates the Counter during an update.gh-143046: The
asyncioREPL no longer prints copyright and version messages in the quiet mode (-q). Patch by Bartosz Sławecki.gh-140648: The
asyncioREPL now respects the-Iflag (isolated mode). Previously, it would load and executePYTHONSTARTUPeven if the flag was set. Contributed by Bartosz Sławecki.gh-142991: Fixed socket operations such as recvfrom() and sendto() for FreeBSD divert(4) socket.
gh-143010: Fixed a bug in
mailboxwhere the precise timing of an external event could result in the library opening an existing file instead of a file it expected to create.gh-142881: Fix concurrent and reentrant call of
atexit.unregister().gh-112127: Fix possible use-after-free in
atexit.unregister()when the callback is unregistered during comparison.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-142754: Add the ownerDocument attribute to
xml.dom.minidomelements and attributes created by directly instantiating theElementorAttrclass. Note that this way of creating nodes is not supported; creator functions likexml.dom.Document.documentElement()should be used instead.gh-142784: The
asyncioREPL now properly closes the loop upon the end of interactive session. Previously, it could cause surprising warnings. Contributed by Bartosz Sławecki.gh-142555:
array: fix a crash ina[i] = vwhen converting i to an index viai.__index__ori.__float__mutates the array.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-142517: The non-
compat32emailpolicies now correctly handle refolding encoded words that contain bytes that can not be decoded in their specified character set. Previously this resulted in an encoding exception during folding.gh-112527: The help text for required options in
argparseno longer extended with “ (default: None)”.gh-142315: Pdb can now run scripts from anonymous pipes used in process substitution. Patch by Bartosz Sławecki.
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-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.gh-139971:
pydoc: Ensure that the link to the online documentation of a stdlib module is correct.gh-139262: Some keystrokes can be swallowed in the new
PyREPLon Windows, especially when used together with the ALT key. Fix by Chris Eibl.gh-138897: Improved
license/copyright/creditsdisplay in the REPL: now uses a pager.gh-79986: Add parsing for
ReferencesandIn-Reply-Toheaders to theemaillibrary that parses the header content as lists of message id tokens. This prevents them from being folded incorrectly.gh-109263: Starting a process from spawn context in
multiprocessingno longer sets the start method globally.gh-90871: Fixed an off by one error concerning the backlog parameter in
create_unix_server(). Contributed by Christian Harries.gh-132715: Skip writing objects during marshalling once a failure has occurred.
gh-127529: Correct behavior of
asyncio.selector_events.BaseSelectorEventLoop._accept_connection()in handlingConnectionAbortedErrorin a loop. This improves performance on OpenBSD.
IDLE¶
gh-143774: Better explain the operation of Format / Format Paragraph.
Documentation¶
gh-140806: Add documentation for
enum.bin().
Core and Builtins¶
gh-144307: Prevent a reference leak in module teardown at interpreter finalization.
gh-144194: Fix error handling in perf jitdump initialization on memory allocation failure.
gh-141805: Fix crash in
setwhen objects with the same hash are concurrently added to the set after removing an element with the same hash while the set still contains elements with the same hash.gh-143670: Fixes a crash in
ga_repr_items_listfunction.gh-143377: Fix a crash in
_interpreters.capture_exception()when the exception is incorrectly formatted. Patch by Bénédikt Tran.gh-143189: Fix crash when inserting a non-
strkey into a split table dictionary when the key matches an existing key in the split table but has no corresponding value in the dict.gh-143228: Fix use-after-free in perf trampoline when toggling profiling while threads are running or during interpreter finalization with daemon threads active. The fix uses reference counting to ensure trampolines are not freed while any code object could still reference them. Pach by Pablo Galindo
gh-142664: Fix a use-after-free crash in
memoryview.__hash__when the__hash__method of the referenced object mutates that object or the view. Patch by Bénédikt Tran.gh-142557: Fix a use-after-free crash in bytearray.__mod__ when the
bytearrayis mutated while formatting the%-style arguments. Patch by Bénédikt Tran.gh-143195: Fix use-after-free crashes in
bytearray.hex()andmemoryview.hex()when the separator’s__len__()mutates the original object. Patch by Bénédikt Tran.gh-143135: Set
sys.flags.inspectto1whenPYTHONINSPECTis0. Previously, it was set to0in this case.gh-143003: Fix an overflow of the shared empty buffer in
bytearray.extend()when__length_hint__()returns 0 for non-empty iterator.gh-143006: Fix a possible assertion error when comparing negative non-integer
floatandintwith the same number of bits in the integer part.gh-142776: Fix a file descriptor leak in import.c
gh-142829: Fix a use-after-free crash in
contextvars.Contextcomparison when a custom__eq__method modifies the context viaset().gh-142766: Clear the frame of a generator when
generator.close()is called.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-142560: Fix use-after-free in
bytearraysearch-like methods (find(),count(),index(),rindex(), andrfind()) by marking the storage as exported which causes reallocation attempts to raiseBufferError. Forcontains(),split(), andrsplit()the buffer protocol is used for this.gh-142343: Fix SIGILL crash on m68k due to incorrect assembly constraint.
gh-141732: Ensure the
__repr__()forExceptionGroupandBaseExceptionGroupdoes not change when the exception sequence that was original passed in to its constructor is subsequently mutated.gh-100964: Fix reference cycle in exhausted generator frames. Patch by Savannah Ostrowski.
gh-140373: Correctly emit
PY_UNWINDevent when generator object is closed. Patch by Mikhail Efimov.gh-138568: Adjusted the built-in
help()function so that empty inputs are ignored in interactive mode.gh-127773: Do not use the type attribute cache for types with incompatible MRO.
C API¶
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.13.11 final¶
Release date: 2025-12-05
Security¶
gh-142145: Remove quadratic behavior in
xml.minidomnode ID cache clearing.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-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).
Core and Builtins¶
Python 3.13.10 final¶
Release date: 2025-12-02
Tools/Demos¶
gh-141442: The iOS testbed now correctly handles test arguments that contain spaces.
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-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-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-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-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-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-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
ensurepipto version 25.3gh-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-140590: Fix arguments checking for the
functools.partial.__setstate__()that may lead to internal state corruption and crash. Patch by Sergey Miryanov.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-140474: Fix memory leak in
array.arraywhen creating arrays from an emptystrand theutype code.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-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-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-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-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-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-139065: Fix trailing space before a wrapped long word if the line length is exactly width in
textwrap.gh-138859: Fix generic type parameterization raising a
TypeErrorwhen omitting aParamSpecthat has a default which is not a list of types.gh-138775: Use of
python -mwithbase64has been fixed to detect input from a terminal so that it properly notices EOF.gh-98896: Fix a failure in multiprocessing resource_tracker when SharedMemory names contain colons. Patch by Rani Pinchuk.
gh-75989:
tarfile.TarFile.extractall()andtarfile.TarFile.extract()now overwrite symlinks when extracting hardlinks. (Contributed by Alexander Enrique Urieles Nieto in gh-75989.)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-136057: Fixed the bug in
pdbandbdbwherenextandstepcan’t go over the line if a loop exists in the line.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-102431: Clarify constraints for “logical” arguments in methods of
decimal.Context.
IDLE¶
gh-96491: Deduplicate version number in IDLE shell title bar after saving to a file.
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.
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-141579: Fix
sys.activate_stack_trampoline()to properly support theperf_jitbackend. Patch by Pablo Galindo.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.gh-140939: Fix memory leak when
bytearrayorbytesis formated with the%*bformat with a large width that results in aMemoryError.gh-140530: Fix a reference leak when
raise exc from causefails. Patch by Bénédikt Tran.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-140471: Fix potential buffer overflow in
ast.ASTnode initialization when encountering malformed_fieldscontaining non-str.gh-140406: Fix memory leak when an object’s
__hash__()method returns an object that isn’t anint.gh-140306: Fix memory leaks in cross-interpreter channel operations and shared namespace handling.
gh-140301: Fix memory leak of
PyConfigin subinterpreters.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-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: 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-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-133400: Fixed Ctrl+D (^D) behavior in _pyrepl module to match old pre-3.13 REPL behavior.
C API¶
gh-140042: Removed the sqlite3_shutdown call that could cause closing connections for sqlite when used with multiple sub interpreters.
gh-140487: Fix
Py_RETURN_NOTIMPLEMENTEDin limited C API 3.11 and older: don’t treatPy_NotImplementedas immortal. Patch by Victor Stinner.
Python 3.13.9 final¶
Release date: 2025-10-14
Library¶
gh-139783: Fix
inspect.getsourcelines()for the case when a decorator is followed by a comment or an empty line.
Python 3.13.8 final¶
Release date: 2025-10-07
macOS¶
Windows¶
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-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.
Tests¶
gh-139208: Fix regrtest
--fast-ci --verbose: don’t ignore the--verboseoption anymore. Patch by Victor Stinner.
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.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-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-139312: Upgrade bundled libexpat to 2.7.3
gh-139289: Do a real lazy-import on
rlcompleterinpdband restore the existing completer after importingrlcompleter.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
_interpreters.createwhen the process is out of memory.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-138998: Update bundled libexpat to 2.7.2
gh-130567: Fix possible crash in
locale.strxfrm()due to a platform bug on macOS.gh-138779: Support device numbers larger than
2**63-1for thest_rdevfield of theos.stat_resultstructure.gh-128636: Fix crash in PyREPL when os.environ is overwritten with an invalid value for mac
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-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-138204: Forbid expansion of shared anonymous
memory mapson Linux, which caused a bus error.gh-138010: Fix an issue where defining a class with a
@warnings.deprecated-decorated base class may not invoke the correct__init_subclass__()method in cases involving multiple inheritance. Patch by Brian Schubert.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-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-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-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-135386: Fix opening a
dbm.sqlite3database for reading from read-only file or directory.gh-126631: Fix
multiprocessingforkserverbug which prevented__main__from being preloaded.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-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-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.
Core and Builtins¶
gh-134466: Don’t run PyREPL in a degraded environment where setting termios attributes is not allowed.
gh-71810: Raise
OverflowErrorfor(-1).to_bytes()for signed conversions when bytes count is zero. Patch by Sergey B Kirpichev.gh-105487: Remove non-existent
__copy__(),__deepcopy__(), and__bases__from the__dir__()entries oftypes.GenericAlias.gh-134163: Fix a hang when the process is out of memory inside an exception handler.
gh-138479: Fix a crash when a generic object’s
__typing_subst__returns an object that isn’t atuple.gh-137576: Fix for incorrect source code being shown in tracebacks from the Basic REPL when
PYTHONSTARTUPis given. Patch by Adam Hartz.gh-132744: Certain calls now check for runaway recursion and respect the system recursion limit.
C API¶
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.
While not officially marked deprecated until 3.14,
PyThread_exit_threadis no longer called internally and remains solely for interface compatibility. 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.
Build¶
gh-135734: Python can correctly be configured and built with
./configure --enable-optimizations --disable-test-modules. Previously, the profile data generation step failed due to PGO tests where immortalization couldn’t be properly suppressed. Patch by Bénédikt Tran.
Python 3.13.7 final¶
Release date: 2025-08-14
Library¶
gh-137583: Fix a deadlock introduced in 3.13.6 when a call to
ssl.SSLSocket.recvwas blocked in one thread, and then another method on the object (such asssl.SSLSocket.send) was subsequently called in another thread.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-136914: Fix retrieval of
doctest.DocTest.linenofor objects decorated withfunctools.cache()orfunctools.cached_property.gh-131788: Make
ResourceTracker.sendfrommultiprocessingre-entrant safe
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().
Python 3.13.6 final¶
Release date: 2025-08-06
macOS¶
Windows¶
gh-137134: Update Windows installer to ship with SQLite 3.50.4.
Tools/Demos¶
gh-135968: Stubs for
stripare now provided as part of an iOS install.
Tests¶
Security¶
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”.
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<--->.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-118350: Fix support of escapable raw text mode (elements “textarea” and “title”) in
html.parser.HTMLParser.
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-137273: Fix debug assertion failure in
locale.setlocale()on Windows.gh-137257: Bump the version of pip bundled in ensurepip to version 25.2
gh-81325:
tarfile.TarFilenow accepts a path-like when working on a tar archive. (Contributed by Alexander Enrique Urieles Nieto in gh-81325.)gh-130522: Fix unraisable
TypeErrorraised during interpreter shutdown in thethreadingmodule.gh-130577:
tarfilenow validates archives to ensure member offsets are non-negative. (Contributed by Alexander Enrique Urieles Nieto in gh-130577.)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-85702: If
zoneinfo._common.load_tzdatais given a package without a resource azoneinfo.ZoneInfoNotFoundErroris raised rather than aPermissionError. Patch by Victor Stinner.gh-134759: Fix
UnboundLocalErrorinemail.message.Message.get_payload()when the payload to decode is abytesobject. Patch by Kliment Lamonov.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.13.4, 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.13.4.
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-135444: Fix
asyncio.DatagramTransport.sendto()to account for datagram header size when data cannot be sent.gh-135497: Fix
os.getlogin()failing for longer usernames on BSD-based platforms.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-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().gh-135069: Fix the “Invalid error handling” exception in
encodings.idna.IncrementalDecoderto correctly replace the ‘errors’ parameter.gh-134698: Fix a crash when calling methods of
ssl.SSLContextorssl.SSLSocketacross multiple threads.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-133439: Fix dot commands with trailing spaces are mistaken for multi-line SQL statements in the sqlite3 command-line interface.
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-130664: Support the
'_'digit separator in formatting of the integral part ofDecimal’s. Patch by Sergey B Kirpichev.gh-85702: If
zoneinfo._common.load_tzdatais given a package without a resource aZoneInfoNotFoundErroris raised rather than aIsADirectoryError.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¶
Core and Builtins¶
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-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-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-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-135871: Non-blocking mutex lock attempts now return immediately when the lock is busy instead of briefly spinning in the free threading build.
gh-135607: Fix potential
weakrefraces in an object’s destructor on the free threaded build.gh-135496: Fix typo in the f-string conversion type error (“exclamanation” -> “exclamation”).
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-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-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-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.
gh-125723: Fix crash with
gi_frame.f_localswhen generator frames outlive their generator. Patch by Mikhail Efimov.
Build¶
gh-135497: Fix the detection of
MAXLOGNAMEin theconfigure.acscript.
Python 3.13.5 final¶
Release date: 2025-06-11
Windows¶
gh-135151: Avoid distributing modified
pyconfig.hin the traditional installer. Extension module builds must always specifyPy_GIL_DISABLEDwhen targeting the free-threaded runtime.
Tests¶
gh-135120: Add
test.support.subTests().
Library¶
gh-133967: Do not normalize
localename ‘C.UTF-8’ to ‘en_US.UTF-8’.gh-135326: Restore support of integer-like objects with
__index__()inrandom.getrandbits().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-134151:
email: FixTypeErrorinemail.utils.decode_params()when sorting RFC 2231 continuations that contain an unnumbered section.gh-134152:
email: Fix parsing of email message ID with invalid domain.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.
Core and Builtins¶
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.
Python 3.13.4 final¶
Release date: 2025-06-03
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-133626: Ensures packages are not accidentally bundled into the traditional installer.
gh-133512: Add warnings to Python Launcher for Windows about use of subcommands belonging to the Python install manager.
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-133639: Fix
TestPyReplAutoindent.test_auto_indent_default()doesn’t runinput_code.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-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.
Security¶
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.
gh-133767: Fix use-after-free in the “unicode-escape” decoder with a non-“strict” error handler.
gh-128840: Short-circuit the processing of long IPv6 addresses early in
ipaddressto prevent excessive memory consumption and a minor denial-of-service.
Library¶
gh-134718:
ast.dump()now only omitsNoneand[]values if they are default values.gh-128840: Fix parsing long IPv6 addresses with embedded IPv4 address.
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-134210:
curses.window.getch()now correctly handles signals. 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-114177: Fix
asyncioto not close subprocess pipes which would otherwise error out when the event loop is already closed.gh-134152: Fixed
UnboundLocalErrorthat could occur duringemailheader parsing if an expected trailing delimiter is missing in some contexts.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-134062:
ipaddress: fix collisions in__hash__()forIPv4NetworkandIPv6Networkobjects.gh-133745: In 3.13.3 we accidentally changed the signature of the asyncio
create_task()family of methods and how it calls a custom task factory in a backwards incompatible way. Since some 3rd party libraries have already made changes to work around the issue that might break if we simply reverted the changes, we’re instead changing things to be backwards compatible with 3.13.2 while still supporting those workarounds for 3.13.3. In particular, the special-casing ofnameandcontextis back (until 3.14) and consequently eager tasks may still find that their name hasn’t been set before they execute their first yielding await.gh-71253: Raise
ValueErrorinopen()if opener returns a negative file-descriptor in the Python implementation ofioto match the C implementation.gh-77057: Fix handling of invalid markup declarations in
html.parser.HTMLParser.gh-133489:
random.getrandbits()can now generate more that 231 bits.random.randbytes()can now generate more that 256 MiB.gh-133290: Fix attribute caching issue when setting
ctypes._Pointer._type_in the undocumented and deprecatedctypes.SetPointerType()function and the undocumentedset_type()method.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-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-133009:
xml.etree.ElementTree: Fix a crash inElement.__deepcopy__when the element is concurrently mutated. Patch by Bénédikt Tran.gh-132995: Bump the version of pip bundled in ensurepip to version 25.1.1
gh-132017: Fix error when
pyreplis suspended, then resumed and terminated.gh-132673: Fix a crash when using
_align_ = 0and_fields_ = []in actypes.Structure.gh-132527: Include the valid typecode ‘w’ in the error message when an invalid typecode is passed to
array.array.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.
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-132308: A
traceback.TracebackExceptionnow correctly renders the__context__and__cause__attributes from falseyException, and theexceptionsattribute from falseyExceptionGroup.gh-132250: Fixed the
SystemErrorincProfilewhen locating the actual C function of a method raises an exception.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-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-91555: Ignore log messages generated during handling of log messages, to avoid deadlock or infinite recursion. [NOTE: This change has since been reverted.]
gh-131434: Improve error reporting for incorrect format in
time.strptime().gh-131127: Systems using LibreSSL now successfully build.
gh-130999: Avoid exiting the new REPL and offer suggestions even if there are non-string candidates when errors occur.
gh-130941: Fix
configparser.ConfigParserparsing empty interpolation withallow_no_valueset toTrue.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-129719: Fix missing
socket.CAN_RAW_ERR_FILTERconstant in the socket module on Linux systems. It was missing since Python 3.11.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-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-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-44172: Keep a reference to original
curseswindows in subwindows so that the original window does not get deleted before subwindows.
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.
Library¶
gh-134908: Fix crash when iterating over lines in a text file on the free threaded build.
Core and Builtins¶
gh-127682: No longer call
__iter__twice in list comprehensions. This brings the behavior of list comprehensions in line with other forms of iteration
Library¶
gh-134381: Fix
RuntimeErrorwhen using a not-startedthreading.Threadafter callingos.fork()
Core and Builtins¶
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-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-133703: Fix hashtable in dict can be bigger than intended in some situations.
gh-132869: Fix crash in the free threading build when accessing an object attribute that may be concurrently inserted or deleted.
gh-132762:
fromkeys()no longer loops forever when adding a small set of keys to a large base dict. Patch by Angela Liss.gh-133543: Fix a possible memory leak that could occur when directly accessing instance dictionaries (
__dict__) that later become part of a reference cycle.gh-133516: Raise
ValueErrorwhen constantsTrue,FalseorNoneare used as an identifier after NFKC normalization.gh-133441: Fix crash upon setting an attribute with a
dictsubclass. Patch by Victor Stinner.gh-132942: Fix two races in the type lookup cache. This affected the free-threaded build and could cause crashes (apparently quite difficult to trigger).
gh-132713: Fix
repr(list)race condition: hold a strong reference to the item while callingrepr(item). Patch by Victor Stinner.gh-132747: Fix a crash when calling
__get__()of a method with aNonesecond argument.gh-132542: Update
Thread.native_idafter fork(2) to ensure accuracy. Patch by Noam Cohen.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-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-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-130804: Fix support of unicode characters on Windows in the new REPL.
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 inconsitently in format specifiers for single-quoted f-strings. Patch by Pablo Galindo.
C API¶
gh-132909: Fix an overflow when handling the K format in
Py_BuildValue(). Patch by Bénédikt Tran.
Build¶
gh-134923: Windows builds with profile-guided optimization enabled now use
/GENPROFILEand/USEPROFILEinstead of deprecated/LTCG:options.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-132649: The
PClayoutscript now allows passing--include-tcltkon Windows ARM64.gh-117088: AIX linker don’t support -h option, so avoid it through platform check
gh-132026: Fix use of undefined identifiers in platform triplet detection on MIPS Linux platforms.
Python 3.13.3 final¶
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-131025: Update Windows installer to ship with SQLite 3.49.1.
gh-131020: pylauncher correctly detects a BOM when searching for the shebang. Fix by Chris Eibl.
Tools/Demos¶
Tests¶
gh-131050:
test_ssl.test_dh_paramsis skipped if the underlying TLS library does not support finite-field ephemeral Diffie-Hellman.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-126332: Add unit tests for pyrepl.
Security¶
gh-131809: Update bundled libexpat to 2.7.1
gh-131261: Upgrade to libexpat 2.7.0
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.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-132075: Fix possible use of
socketaddress structures with uninitialized members. Now all structure members are initialized with zeroes by default.gh-132002: Fix crash when deallocating
contextvars.ContextVarwith weird unahashable string names.gh-131668:
socket: Fix code parsing AF_BLUETOOTH socket addresses.gh-131492: Fix a resource leak when constructing a
gzip.GzipFilewith a filename fails, for example when passing an invalidcompresslevel.gh-131325: Fix sendfile fallback implementation to drain data after writing to transport in
asyncio.gh-129843: Fix incorrect argument passing in
warnings.warn_explicit().gh-131204: Use monospace font from System Font Stack for cross-platform support in
difflib.HtmlDiff.gh-130940: The
PyConfig.use_system_loggerattribute, introduced in Python 3.13.2, has been removed. The introduction of this attribute inadvertently introduced an ABI breakage on macOS and iOS. The use of the system logger is now enabled by default on iOS, and disabled by default on macOS.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-130637: Add validation for numeric response data in poplib.POP3.stat() method
gh-130461: Remove
.. index::directives from theuuidmodule documentation. These directives previously created entries in the general index forgetnode()as well as theuuid1(),uuid3(),uuid4(), anduuid5()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-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-130250: Fix regression in
traceback.print_last().gh-130230: Fix crash in
pow()with onlyDecimalthird argument.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-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.gh-129583: Update bundled pip to 25.0.1
gh-97850: Update the deprecation warning of
importlib.abc.Loader.load_module().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-129603: Fix bugs where
sqlite3.Rowobjects could segfault if their inheriteddescriptionwas set toNone. Patch by Erlend Aasland.gh-128231: Execution of multiple statements in the new REPL now stops immediately upon the first exception encountered. Patch by Bartosz Sławecki.
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-128772: Fix
pydocfor methods with the__module__attribute equal toNone.gh-92897: Scheduled the deprecation of the
check_homeargument ofsysconfig.is_python_build()to Python 3.15.gh-128657: Fix possible extra reference when using objects returned by
hashlib.sha256()under free threading.gh-128703: Fix
mimetypes.guess_type()to use default mapping for emptyContent-Typein registry.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-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-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-127712: Fix handling of the
secureargument oflogging.handlers.SMTPHandler.gh-126033:
xml.etree.ElementTree: Fix a crash inElement.removewhen the element is concurrently mutated. Patch by Bénédikt Tran.gh-118201: Fixed intermittent failures of
os.confstr,os.pathconfandos.sysconfon iOS and Android.gh-124927: Non-printing characters are now properly handled in the new REPL.
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-131417: Mention
asyncio.Futureandasyncio.Taskin generic classes list.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-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-131988: Fix a performance regression that caused scaling bottlenecks in the free threaded build in 3.13.1 and 3.13.2.
gh-131719: Fix missing NULL check in
_PyMem_FreeDelayedin free-threaded build.gh-131670: Fix
anext()failing on sync__anext__()raising an exception.gh-131141: Fix data race in
sys.monitoringinstrumentation while registering callback.gh-130932: Fix incorrect exception handling in
_PyModule_IsPossiblyShadowinggh-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-130794: Fix memory leak in the free threaded build when resizing a shared list or dictionary from multiple short-lived threads.
gh-130775: Do not crash on negative
columnandend_columninastlocations.gh-130382: Fix
PyRefTracer_DESTROYnot being sent fromPython/ceval.cPy_DECREF().gh-130618: Fix a bug that was causing
UnicodeDecodeErrororSystemErrorto be raised when using f-strings withlambdaexpressions with non-ASCII characters. Patch by Pablo Galindogh-130163: Fix possible crashes related to concurrent change and use of the
sysmodule attributes.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.
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-116042: Fix location for SyntaxErrors of invalid escapes in the tokenizer. Patch by Pablo Galindo
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-129900: Fix return codes inside
SystemExitnot getting returned by the REPL.gh-129732: Fixed a race in
_Py_qsbr_reservein the free threading build.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-128714: Fix the potential races in get/set dunder methods
__annotations__,__annotate__and__type_params__for function object, and add related tests.gh-128632: Disallow
__classdict__as the name of a type parameter. Using this name would previously crash the interpreter in some circumstances.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-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.
C API¶
gh-131740: Update PyUnstable_GC_VisitObjects to traverse perm gen.
gh-129533: Update
PyGC_Enable(),PyGC_Disable(),PyGC_IsEnabled()to use atomic operation for thread-safety at free-threading build. Patch by Donghee Na.
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-130673: Fix potential
KeyErrorwhen handling object sections during JIT building process.gh-130740: Ensure that
Python.his included beforestdbool.hunlesspyconfig.his included before or in some platform-specific contexts.gh-129838: Don’t redefine
_Py_NO_SANITIZE_UNDEFINEDwhen compiling with a recent GCC version and undefined sanitizer enabled.gh-129660: Drop
test_embedfrom PGO training, whose contribution in recent versions is considered to be ignorable.
Python 3.13.2 final¶
Release date: 2025-02-04
macOS¶
gh-127592: Usage of the unified Apple System Log APIs was disabled when the minimum macOS version is earlier than 10.12.
Windows¶
gh-127353: Allow to force color output on Windows using environment variables. Patch by Andrey Efremov.
Tools/Demos¶
Tests¶
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-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().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-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-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-129061: Fix FORCE_COLOR and NO_COLOR when empty strings. Patch by Hugo van Kemenade.
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-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-128679: Fix
tracemalloc.stop()race condition. Fixtracemallocto support callingtracemalloc.stop()in one thread, while another thread is tracing memory allocations. Patch by Victor Stinner.gh-128636: Fix PyREPL failure when
os.environis overwritten with an invalid value.gh-128562: Fix possible conflicts in generated
tkinterwidget names if the widget class name ends with a digit.gh-128498: Default to stdout isatty for color detection instead of stderr. Patch by Hugo van Kemenade.
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-128479: Fix
asyncio.staggered.staggered_race()leaking tasks and issuing an unhandled exception.gh-128400: Fix crash when using
faulthandler.dump_traceback()while other threads are active on the free threaded build.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-128302: Allow
xml.dom.xmlbuilder.DOMParser.parse()to correctly handlexml.dom.xmlbuilder.DOMInputSourceinstances that only have asystemIdattribute set.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-112328:
enum.EnumDictcan now be used without resorting to private API.gh-127975: Avoid reusing quote types in
ast.unparse()if not needed.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-115514: Fix exceptions and incomplete writes after
asyncio._SelectorTransportis closed before writes are completed.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-127873: When
-Eis set, only ignorePYTHON_COLORSand notFORCE_COLOR/NO_COLOR/TERMwhen colourising output. Patch by Hugo van Kemenade.gh-127870: Detect recursive calls in ctypes
_as_parameter_handling. Patch by Victor Stinner.gh-127847: Fix the position when doing interleaved seeks and reads in uncompressed, unencrypted zip files returned by
zipfile.ZipFile.open().gh-127732: The
platformmodule now correctly detects Windows Server 2025.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-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-127257: In
ssl, system call failures that OpenSSL reports usingERR_LIB_SYSare now raised asOSError.gh-127096: Do not recreate unnamed section on every read in
configparser.ConfigParser. Patch by Andrey Efremov.gh-127196: Fix crash when dict with keys in invalid encoding were passed to several functions in
_interpretersmodule.gh-126775: Make
linecache.checkcache()thread safe and GC re-entrancy safe.gh-126332: Fix _pyrepl crash when entering a double CTRL-Z on an overflowing line.
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-125553: Fix round-trip invariance for backslash continuations in
tokenize.untokenize().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-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-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
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.
Library¶
gh-129345: Fix null pointer dereference in
syslog.openlog()when an audit hook raises an exception.
Core and Builtins¶
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-128799: Add frame of
except*to traceback when it wraps a naked exception.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-128330: Restore terminal control characters on REPL exit.
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.gh-127903:
Objects/unicodeobject.c: fix a crash on DEBUG builds in_copy_characterswhen there is nothing to copy.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-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.
gh-127349: Fixed the error when resizing terminal in Python REPL. Patch by Semyon Moroz.
gh-126076: Relocated objects such as
tuple,bytesandstrobjects are properly tracked bytracemallocand its associated hooks. Patch by Pablo Galindo.
C API¶
gh-127791: Fix loss of callbacks after more than one call to
PyUnstable_AtExit().
Build¶
gh-129539: Don’t redefine
EX_OKwhen the system has thesysexits.hheader.gh-128472: Skip BOLT optimization of functions using computed gotos, fixing errors on build with LLVM 19.
gh-123925: Fix building the
cursesmodule on platforms with libncurses but without libncursesw.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-127865: Fix build failure on systems without thread-locals support.
Python 3.13.1 final¶
Release date: 2024-12-03
macOS¶
gh-124448: Update bundled Tcl/Tk in macOS installer to 8.6.15.
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 Launcher for Windows to detect Python 3.14 installs from the Windows Store.
gh-124448: Updated bundled Tcl/Tk to 8.6.15.
Tools/Demos¶
Tests¶
gh-126909: Fix test_os extended attribute tests to work on filesystems with 1 KiB xattr size limit.
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.
Security¶
gh-126623: Upgrade libexpat to 2.6.4
gh-125140: Remove the current directory from
sys.pathwhen using PyREPL.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.
Library¶
gh-127321:
pdb.set_trace()will not stop at an opcode that does not have an associated line number anymore.gh-127303: Publicly expose
EXACT_TOKEN_TYPESintoken.__all__.gh-123967: Fix faulthandler for trampoline frames. If the top-most frame is a trampoline frame, skip it. Patch by Victor Stinner.
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-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-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-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-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-67877: Fix memory leaks when
regular expressionmatching terminates abruptly, either because of a signal or because memory allocation fails.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-126780: Fix
os.path.normpath()for drive-relative paths on Windows.gh-126766: Fix issue where
urllib.request.url2pathname()failed to discard two leading slashes introducing an empty authority section.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-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 degration 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-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-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-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-126083: Fixed a reference leak in
asyncio.Taskobjects when reinitializing the same object with a non-Nonecontext. Patch by Nico Posada.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-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-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-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-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-125259: Fix the notes removal logic for errors thrown in enum initialization.
gh-125590: Allow
FrameLocalsProxyto delete and pop if the key is not a fast variable.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-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-125115: Fixed a bug in
pdbwhere arguments starting with-can’t be passed to the debugged script.gh-53203: Fix
time.strptime()for%c,%xand%Xformats in many locales that use non-ASCII digits, like Persian, Burmese, Odia and Shan.gh-125398: Fix the conversion of the
VIRTUAL_ENVpath in the activate script invenvwhen running in Git Bash for Windows.gh-125316: Fix using
functools.partial()asenum.Enummember. A FutureWarning with suggestion to useenum.member()is now emitted when thepartialinstance is used as an enum member.gh-125245: Fix race condition when importing
collections.abc, which could incorrectly return an empty module.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-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-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)on platforms with glibc. Now it returns a string consisting of up to 100 semicolon-separated symbols (an empty string in most locales) on all Posix platforms. Previously it only returned the first symbol or an empty string.gh-124960: Fix support for the
barry_as_FLUFLfuture flag in the new REPL.gh-124984: Fixed thread safety in
sslin the free-threaded build. OpenSSL operations are now protected by a per-object lock.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-124917: Allow calling
os.path.exists()andos.path.lexists()with keyword arguments on Windows. Fixes a regression in 3.13.0.gh-124653: Fix detection of the minimal Queue API needed by the
loggingmodule. Patch by Bénédikt Tran.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-124651: Properly quote template strings in
venvactivation scripts.gh-116850: Fix
argparsefor namespaces with not directly writable dict (e.g. classes).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-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-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-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-124345:
argparsevim supports abbreviated single-dash long options separated by=from its value.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-53780:
argparsenow ignores the first"--"(double dash) between an option and command.gh-124217: Add RFC 9637 reserved IPv6 block
3fff::/20inipaddressmodule.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-123978: Remove broken
time.thread_time()andtime.thread_time_ns()on NetBSD.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-123935: Fix parent slots detection for dataclasses that inherit from classes with
__dictoffset__.gh-122765: Fix unbalanced quote errors occurring when activate.csh in
venvwas sourced with a custom prompt containing unpaired quotes or newlines.gh-123370: Fix the canvas not clearing after running turtledemo clock.
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-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-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-101955: Fix SystemError when match regular expression pattern containing some combination of possessive quantifier, alternative and capture group.
gh-88110: Fixed
multiprocessing.Processreporting a.exitcodeof 1 even on success when using the"fork"start method while using aconcurrent.futures.ThreadPoolExecutor.gh-71936: Fix a race condition in
multiprocessing.pool.Pool.bpo-46128: Strip
unittest.IsolatedAsyncioTestCasestack frames from reported stacktraces.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.
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-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-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-60712: Include the
objecttype in the lists of documented types. Change by Furkan Onder and Martin Panter.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-113841: Fix possible undefined behavior division by zero in
complex’s_Py_c_pow().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-126980: Fix
__buffer__()ofbytearraycrashing whenREADorWRITEare passed as flags.gh-126881: Fix crash in finalization of dtoa state. Patch by Kumar Aditya.
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¶
gh-126312: Fix crash during garbage collection on an object frozen by
gc.freeze()on the free-threaded build.gh-126139: Provide better error location when attempting to use a future statement with an unknown future feature.
gh-126018: Fix a crash in
sys.audit()when passing a non-string as first argument and Python was compiled in debug mode.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.