| Index | index by Group | index by Distribution | index by Vendor | index by creation date | index by Name | Mirrors | Help | Search |
| Name: python316-nogil-curses | Distribution: openSUSE:Factory:zSystems |
| Version: 3.16.0~a1 | Vendor: openSUSE |
| Release: 1.1 | Build date: Thu Nov 5 22:27:17 2026 |
| Group: Unspecified | Build host: reproducible |
| Size: 358641 | Source RPM: python316-nogil-3.16.0~a1-1.1.src.rpm |
| Packager: https://bugs.opensuse.org | |
| Url: https://www.python.org/ | |
| Summary: Python Interface to the (N)Curses Library | |
An easy to use interface to the (n)curses CUI library. CUI stands for Console User Interface.
Python-2.0
* Wed Nov 04 2026 Matej Cepl <mcepl@cepl.eu>
- Update baselibs.conf for Python 3.16 package names
* Wed Oct 21 2026 Matej Cepl <mcepl@cepl.eu>
- Skip test_c_stack_unwind test on Aarch systems
(gh#python/cpython#160102).
* Sat Oct 17 2026 Stan Ulbrych <stan@python.org>
- Replace the _import_failed shim modules and
the zzzz-import-failed-hooks.pth file with
upstream's --with-missing-stdlib-config. Add a
missing-stdlib-config.json.in with the zypper hints for the
subpackages and drop import_failed.py and import_failed.map.
Missing stdlib modules now raise a regular ModuleNotFoundError
whose printed message carries the hint, instead of a shim
raising ImportError. More information in PACKAGING-NOTES.
* Fri Oct 16 2026 Matej Cepl <mcepl@suse.com>
- Require libexpat1 >= 2.8.5 for python311-base and raise
the Expat build requirement accordingly. pyexpat uses
XML_SetHashSalt16Bytes when built with Expat >= 2.8, but the
automatic SONAME dependency permits older libraries, breaking
imports and venv/ensurepip (bsc#1285433).
* Fri Oct 16 2026 Matej Cepl <mcepl@cepl.eu>
- Add skip-failing-curses-tests.patch to temporarily skip 12
failing curses test methods (gh#python/cpython#159579).
* Fri Oct 16 2026 Matej Cepl <mcepl@cepl.eu>
- What's new in 3.16.0~a1 list has not been finished yet at
https://docs.python.org/3.16/whatsnew/3.16.html
- Security
- gh-158446: Fix a crash or incorrect output that could occur
when formatting a float or complex with a precision close
to the platform’s INT_MAX. PyOS_double_to_string() now
raises ValueError for any precision of that magnitude,
regardless of presentation type or value, as the format
string parsers already did for precisions above INT_MAX.
- gh-156793: asyncio: loop.start_tls() and
loop.create_connection() now validate the server_hostname
argument if an ssl.SSLContext is passed with check_hostname
set to True.
- gh-156793: ssl.SSLContext.wrap_bio() now validates its
server_side, server_hostname and session arguments similar
to ssl.SSLContext.wrap_socket().
- In particular, a context with check_hostname enabled and no
server_hostname passed to wrap_bio() now raises ValueError
instead of completing a handshake that verified the
certificate chain without verifying the peer’s identity,
with no indication that the check had been skipped.
- gh-157265: In tarfile, when extracting a link falls back
to extracting a member of the archive, skip the member
when the filter function returns None when called with the
extracted member’s name replaced with the link’s.
- gh-157953: Update bundled libexpat to version 2.8.5.
- gh-156002: Bound the amount of data zipfile decompresses
per read for members compressed with bzip2, LZMA, or
Zstandard, matching the existing limit for deflate. A small
archive member could previously expand into an unbounded
allocation even when read in small chunks.
- gh-157579: Fix a race condition in the cleanup of
tempfile.TemporaryDirectory. When working around file
system permission errors, files are now removed relative to
open directory file descriptors instead of resolving their
path again, so that replacing a directory of the tree with
a symbolic link can no longer make the cleanup delete files
outside of the temporary directory. This addresses CVE
2026-12345.
- gh-155999: Fix the tarfile tar and data extraction filters
creating directories outside the destination for members
whose name leaves the destination and returns to it, such
as ../evil/../dest/sub/file. The containment check used the
resolved path, but intermediate directories were created
from the name as given.
- gh-156293: Fix a crash in ssl when an sni_callback switches
a connection to another SSLContext and the context that
carries the callback is no longer referenced by the
application. Servers that keep their sni_callback context
alive (the usual case when it wraps the listening socket
or is stored on the server object) were not affected. This
addresses CVE 2026-19445. (bsc#1283969, CVE-2026-19445)
- gh-155292: Change the stringprep module and encodings.idna
codec to not consider Unicode codepoint attributes beyond
those defined in RFC 3454.
- gh-155694: Fix CVE 2026-15806 by scoping HTTPPasswordMgr
credentials to the URL scheme, preventing credentials
stored for an HTTPS URL from being used for a matching HTTP
URL, while URIs without a scheme continue to match any
scheme.
- gh-153030: Fixed quadratic complexity in incremental
parsing of long unterminated constructs (such as tags
or comments) in html.parser.HTMLParser, which could be
exploited for a denial of service.
- gh-152674: The xml.etree.ElementTree.Element methods
findall(), iterfind() and find() avoid quadratic behavior
when using XPath index predicates ([1], [last()],
[last()-N]) on XML documents with many same-tag siblings.
- gh-152216: Update bundled libexpat to version 2.8.2.
- gh-151987: The tarfile.TarFile.extract() method now applies
the given filter when it extracts a link target from the
archive as a fallback.
- gh-151981: In tarfile, seeking a stream now stops when end
of the stream is reached.
- gh-151544: Modules/Setup.local is no longer used as a
landmark to discover whether Python is running in a source
tree, as it could potentially affect actual installs. The
pybuilddir.txt file is now the sole indicator of running in
a source tree.
- gh-151558: Fixed an vulnerability in the tarfile data and
tar extraction filters where crafted archives could create
a symlink pointing outside the destination directory. This
was a bypass of CVE 2025-4330.
- gh-150599: Fix a possible stack buffer overflow in bz2
when a bz2.BZ2Decompressor is reused after a decompression
error. The decompressor now becomes unusable after libbz2
reports an error.
- gh-150743: http.client now limits the number of
chunked-response trailer lines it will read to
max_response_headers (100 by default), and the number of
interim (1xx) responses it will skip to 100. A malicious or
broken server could previously stream trailer lines or 100
Continue responses forever, hanging the client even when
a socket timeout was in use. Reported by @YLChen-007 via
GHSA-w4q2-g22w-6fr4.
- gh-149835: shutil.move() now resolves symlinks via
os.path.realpath() when checking whether the destination
is inside the source directory, preventing a symlink-based
bypass of that guard.
- gh-149698: Update bundled libexpat to version 2.8.1 for the
fix for CVE 2026-45186.
- gh-87451: The ftplib module’s undocumented ftpcp function
no longer trusts the IPv4 address value returned from the
source server in response to the PASV command by default,
completing the fix for CVE-2021-4189. As with ftplib.FTP,
the former behavior can be re-enabled by setting the
trust_server_pasv_ipv4_address attribute on the source
ftplib.FTP instance to True. Thanks to Qi Deng at Aurascape
AI for the report.
- gh-149474: Fix the binary writer in profiling.sampling not
firing the audit (PEP 578) when creating the output file.
The writer and the reader now accept any path-like object.
Patch by Maurycy Pawłowski-Wieroński.
- gh-149486: tarfile.data_filter() now validates link targets
using the same normalised value that is written to disk,
strips trailing separators from the member name when
resolving a symlink’s directory, and rejects link members
that would replace the destination directory itself.
This closes several path-traversal bypasses of the data
extraction filter.
- gh-149079: Fix a potential denial of service in
unicodedata.normalize(). The canonical ordering step of
Unicode normalization used a quadratic-time insertion
sort for reordering combining characters, which could be
exploited with crafted input containing many combining
characters in non-canonical order. Replaced with a
linear-time counting sort for long runs.
- gh-149018: Improved protection against XML hash-flooding
attacks in xml.parsers.expat and xml.etree.ElementTree when
Python is compiled with libExpat 2.8.0 or later.
- gh-143927: Normalize all line endings (CR, CRLF, and LF) to
LF+TAB when writing multi-line configparser values.
- Core and Builtins
- gh-159285: Fix a crash in a debug build when copying an
empty dict fails with MemoryError. Patch by Christian
Aurich Zanettini Martins.
- gh-129724: Fix the output of marshal for compiled code,
and so the content of .pyc files, depending on what was
imported or compiled before in the process. A frozenset
constant (or, in the free-threaded build, a slice constant)
used by several functions of a module was copied for each
of them when one of its strings was equal to a string which
was already interned. The compiler now replaces the strings
of the constants by the interned ones before the code
objects are created, while equal constants are still one
object. Which strings are interned does not change, except
for the strings of slice constants made only of ASCII
letters, digits and underscores, which are now interned in
the default build like those of other constants.
- gh-159137: Speed up the garbage collector by untracking
tuples and counting the surviving objects while it looks
for unreachable objects, which saves two walks of the
collected generation in every collection.
- gh-159137: Avoid a second reachability analysis in the
garbage collector when no weakref callback, finalizer, or
collectable-object debug output ran. Finished generators,
coroutines, and async generators can skip this analysis
even when finalized. Free-threaded builds also avoid a
second stop-the-world pause in this case.
- gh-158918: Reduce C stack usage of
_PyModule_IsPossiblyShadowing, which could potentially
cause stack overflows during module attribute access while
deeply recursing in agressively optimized builds.
- gh-158803: Fix a crash in bytes.join() and bytearray.join()
in the free-threaded build when another thread concurrently
mutates the list being joined. Patch by Christian Aurich
Zanettini Martins.
- gh-158824: Fix module-level __getattr__() being called
before a module’s own lazy imports were resolved, which
allowed it to shadow them.
- gh-158820: Fix a crash when a lazy import is declared
or resolved by a finalizer running during interpreter
shutdown.
- gh-158592: Skip the array reallocation when shrinking a
small list. Patch by Donghee Na.
- gh-158790: Speed up list.insert() and item deletion via del
in free-threaded builds by using memmove(3).
- gh-130706: Add a fast path to _Py_Dealloc() for non-GC
objects. Patch by Donghee Na.
- gh-158583: bytes.fromhex() and bytearray.fromhex(): Fix
uninitialized memory read. Patch by Victor Stinner.
- gh-158592: del list[index] now triggers shrinking the
list’s internal array.
- gh-158140: Resolve lazily imported sibling submodules
independently, so accessing one does not import another
merely because its declaration came last.
- gh-158316: On Free Threading, speed up bytearray.decode()
by decoding the underlying storage directly instead of
going through the buffer protocol.
- gh-158486: Fix the PowerSort mask calculation in
list.sort() for very large lists.
- gh-158380: Fix incorrect type guards for dict reads and
writes in the experimental JIT.
- gh-158364: Fix crash when sys._current_frames() or
sys._current_exceptions() is called while another
interpreter is running.
- gh-158219: Fix bytearray constructor: do not use a bytes
object if its hash value is already computed. Patch by Cody
Maloney and Victor Stinner.
- gh-158241: Fix a crash and possible code object corruption
following a MemoryError while compiling Python code.
- gh-158254: Reverse iterators over a dict and its views now
raise RuntimeError if the dictionary’s keys change during
iteration, like forward iterators, instead of yielding
entries for the new keys.
- gh-158165: Fix compilation of
_Py_get_machine_stack_pointer() with MinGW on Windows.
- gh-158072: Fix a JIT crash when a class is instantiated
with their default arguments
- gh-153569: Correct missing-brace error messages for
multiline f-strings and t-strings. Improve tokenization
of UTF-8 input split across many readline calls. Preserve
source order when reading files with stateful encodings.
Preserve input errors when scanning string literals.
- gh-157914: Revert gh-146064. The linked PyMutex change was
causing a significant performance regression in some cases.
- gh-157838: Merge biased reference counts on behalf of
threads that are detached instead of waiting for them to
attach again, in the free-threaded build.
- gh-157840: Speed up calls to hasattr() and three-argument
getattr() for unassigned attributes in an object’s
__slots__ by roughly 6x.
- gh-157833: Fix call specialization for C functions and
methods with METH_CLASS, METH_STATIC, or METH_COEXIST
flags, improving their call performance.
- gh-157778: Include the line number of the opening brace
in the SyntaxError for an unclosed f-string or t-string
replacement field when a matching quote on a later line is
interpreted as the start of an unterminated string.
- gh-157468: Fix the JIT optimizer folding a builtin name
to a constant taken from the interpreter’s builtins
dictionary even when the running function uses a
different __builtins__ mapping, such as one created with
vars(builtins).copy(). The optimizer now only folds when
the function’s builtins is the interpreter’s, and the
folded constant is guarded at runtime so that another
function sharing the same code object but a different
builtins mapping does not use it.
- gh-157757: Fix a lazy import a.b as c reading b off a
instead of importing the module a.b. It now binds the
submodule, and raises ModuleNotFoundError when no module
backs the name.
- gh-155695: Resolved names are now removed from
sys.lazy_modules more consistently: a lazy import of an
already loaded module is no longer recorded, and reifying
lazy from pkg import attr now discards the pkg.attr entry.
- gh-155742: In debug mode at Python exit, check if immutable
singleton objects have been modified by mistake to detect
bugs in C extensions. Patch by Victor Stinner.
- gh-156939: When Python is built in debug mode, bytes and
bytearray destructors now check if the trailing null byte
has been overridden to detect buffer overflow. Patch by
Victor Stinner.
- gh-153568: Speed up parsing by reusing memoized rule
prefixes across consecutive grammar alternatives, avoiding
repeated rule calls and cache lookups.
- gh-153568: Speed up parsing by sharing expression rules
with assignment and deletion targets, and simplify
comparison and keyword argument rules.
- gh-157378: Fix SyntaxError.offset and
SyntaxError.end_offset for the “Non-UTF-8 code starting
with …” error when a non-ASCII character precedes the
invalid byte on the same line. Patch by Shamil Abdulaev.
- gh-156762: Fix undefined behaviour in
operator.methodcaller: its tp_clear slot function returned
void instead of int, so the garbage collector called it
through an incompatible function type. Patched by Shamil
Abdulaev.
- gh-157377: Fix gc.get_count() on the free-threaded build
resetting the thread-local allocation counter that
schedules automatic garbage collection. A thread that
called it while allocating could prevent cyclic garbage
from ever being collected.
- gh-157361: Implement anext() in Python instead of C,
in a frozen _pybuiltins module. The awaitable returned
by anext(it, default) is now a plain coroutine, so
introspection tools such as asyncio.print_call_graph() can
see through it into __anext__().
- gh-153568: Reduce temporary allocations while parsing
Python source.
- gh-157247: Fix sys.activate_stack_trampoline() allowing
activation from a subinterpreter while the JIT is enabled
in the main interpreter.
- gh-157242: If bytearray.resize() or bytearray.take_bytes()
fails, leave the bytearray unchanged, instead of clearing
it. Patch by Victor Stinner.
- gh-156995: Fix bytearray sharing its buffer with the
single-byte bytes object of the same value, so that writing
to the bytearray modified that bytes object. This happened
with bytearray.take_bytes() when exactly one byte remained,
and on the free-threaded build when a bytearray was shrunk
to one byte from another thread.
- gh-156910: Fix a deadlock in the free threaded build when
setting __abstractmethods__ on a type while another thread
holds the type lock.
- gh-156942: marshal no longer replaces the exception
raised while marshalling the value with a generic
ValueError("unmarshallable object"). Error messages now
name the type of the unsupported object and, for the types
supported only by newer data formats, the required version.
- gh-156091: Fix a crash when compiling deeply nested inlined
list, set, or dict comprehensions. A SyntaxError is now
raised when the nesting exceeds the compiler’s static block
limit.
- gh-156865: Raise ValueError’s for overflows, while trying
to change memoryview elements with 'f' and 'Zf' format
codes. Patch by Sergey B Kirpichev.
- gh-156894: Fix the position of syntax errors which cover a
range if the line contains non-ASCII characters before the
error.
- gh-156886: Fix ZeroDivisionError spuriously raised
for a complex power with a non-zero base when the
phase of the result is infinite, e.g. 1e300**1e308j or
complex('inf')**1j.
- gh-155525: Fix quadratic-time tokenization of modules
containing many f-strings or t-strings.
- gh-156689: Fix an out-of-bounds read in compile()
and ast.parse() when an AST object is passed with
mode='func_type'.
- gh-156459: Fix cleanup on error in compiler_set_qualname.
Previously it was called in _PyCompile_EnterScope, after
the scope had been entered, and this was not reversed in
case of an error.
- gh-155725: tracemalloc no longer acquires the GIL
nor creates a temporary thread state to trace memory
allocations: traceback frames now store plain UTF-8 strings
instead of Python str objects, and tracebacks are captured
using the Python thread state already associated with the
calling thread, even if it is not attached. Threads without
a Python thread state record the traceback as <unknown>.
- gh-156371: Fix missing PyRefTracer_DESTROY events for
trashcan deferred objects. Patch by Donghee Na.
- gh-156310: Fix memory safety issues in the iter() fallback
for objects that implement __getitem__() without __iter__()
(PySeqIter_Type). Sharing an iterator between threads in
the free-threaded build could use the underlying sequence
after it was freed, and re-entrant exhaustion in the
default build could decrement the sequence’s reference
count twice. Concurrent iteration may still see duplicate
or missing items, but it no longer corrupts the interpreter
state.
- gh-64862: The iter() function now accepts the
stop_exception parameter. The created iterator stops when
the callable raises the specified exception. The second
parameter is now named stop_value and can be passed by
keyword. aiter() now accepts the same stop_value and
stop_exception parameters, calling an asynchronous callable
and awaiting the result.
- gh-156114: Fix a crash in the perf trampoline when a code
object has a name or filename that cannot be encoded to
UTF-8. Patched by Shamil Abdulaev.
- gh-156204: Fix a crash in PyErr_GivenExceptionMatches()
when evaluating deeply nested exception tuples. The
recursion is now bounded, and exceeding the limit is
reported as an unraisable exception.
- gh-148750: encodings is no longer frozen, due to issues
importing submodules when using a zipped standard library.
- gh-156126: Fix a crash when importing a module whose name
contains characters that cannot be encoded to UTF-8 (such
as lone surrogates) while -X importtime is enabled.
- gh-144446: Fix thread safety of the generator.gi_frame,
coroutine.cr_frame and agen.ag_frame attributes in the
free-threading build.
- gh-156021: Empty AST node representations no longer include
... when the recursion depth limit is exceeded, making them
easier to distinguish from non-empty ones. Patch by Bartosz
Sławecki.
- gh-155254: Avoid warning about missing standard library
when using _pth files.
- gh-155978: Fix a memory leak in the free-threaded build
when setting or deleting a special method (such as
__repr__) on a class that has many subclasses.
- gh-148653: Forbid marshalling recursive tuples, and fix a
crash when unmarshalling a self-referencing tuple.
- gh-155823: Fix a JIT bug where the side exit taken when a
virtual iterator is exhausted left a stale value on the
stack, so the tier one interpreter resumed with corrupted
state and yield from raised AttributeError instead of
finishing normally.
- gh-155141: Compile pure-keyword calls with 16 to 29 keyword
arguments using the faster CALL_KW instruction. This
includes common cases such as dataclass constructors with
many fields.
- gh-155752: Fix a crash when a types.GenericAlias argument
gains a __typing_subst__ hook after the alias parameters
have been cached.
- gh-155504: Fix a crash when thread state creation fails
before the thread state is fully initialized.
- gh-155526: Fix spurious OverflowError for abs(nanj) in case
errno was previously set to ERANGE by some library call.
- gh-129752: Don’t update adaptive counters in the
free-threaded build when thread-local bytecode is disabled
(-X tlbc=0). Patch by Donghee Na.
- gh-155515: Track the internal HAMT iterators, which back
iteration over a contextvars.Context, with the garbage
collector. A reference cycle running through such an
iterator was never collected, leaking the whole context it
iterated over.
- gh-155400: Fix a deadlock in the free-threaded build
between two threads assigning to a special method of the
same class. While applying the type slot updates with the
world stopped, only the type lock was prevented from being
released; the type dict mutex could still be released and
re-acquired, in the wrong order, if the thread blocked on
the stop-the-world mutex.
- gh-155315: Fix marshal so that a frozendict referenced more
than once in the serialized data round-trips correctly,
instead of failing to load with ValueError. Patch by
tonghuaroot.
- gh-155363: Fix a leak in the free-threaded build when
creating a thread state fails after an internal QSBR
slot has been reserved for it. The slot could never be
reclaimed, so the QSBR array grew without bound across
repeated failures.
- gh-154701: Fix an infinite loop in JIT when a FOR_ITER side
exit links an executor back to itself.
- gh-154937: Fix a data race on thread handle identifiers
when _thread._shutdown() runs concurrently with the startup
of non-daemon threads in the free-threaded build.
- gh-120321: Fix thread safety of asynchronous generators
when iterated, closed or thrown into concurrently from
multiple threads on the free threading build. Also make an
athrow() awaitable single-use: reusing it after completion
now raises RuntimeError instead of resuming the generator
again.
- gh-154902: Fix a crash when __conditional_annotations__ is
rebound to a non-set object.
- gh-151464: Exclude invalid token <> from tokenize output.
SyntaxError for <> now suggests !=
- gh-133931: Fix data races when setting attributes of
function objects on the free threaded build.
- gh-154719: Trailing whitespace in a t-string
interpolation expression is now preserved in
string.templatelib.Interpolation.expression, up to the
closing } or the conversion (!), format (:), or debug (=)
delimiter. Explicit line continuations following a debug
= remain part of the debug text and are excluded from
expression.
- gh-154775: When matching a complex literal in case
statements, an extraneous + sign (for example, 1++1j or
1-+1j) is no longer allowed.
- gh-154709: Fix an out-of-bounds access in reverse
dictionary iterators when the underlying dictionary is
cleared and modified after the iterator is created.
- gh-154695: Fix asyncio.Task raising AttributeError when
created with eager_start=True and no explicit loop
argument.
- gh-154044: Fix a data race on a descriptor’s __qualname__
cache in the free-threaded build.
- gh-154196: Improve AttributeError messages from unresolved
lazy imports. Patch by Bartosz Sławecki.
- gh-153809: Fix interpreter crash while deallocating objects
of asyncio.Task on free-threaded builds. Contributed by
Sergey Miryanov.
- gh-154429: Slightly speed up deallocation of objects that
are not tracked by the garbage collector, such as int,
float and str.
- gh-145868: Suggest the closest valid feature name in the
SyntaxError message when an unknown name is imported from
__future__.
- gh-154275: Fix a crash when getting deeply nested
__parameters__ from a types.GenericAlias objects.
- gh-154043: Fix a data race when iterating a shared
types.GenericAlias iterator from multiple threads under the
free-threaded build.
- gh-154014: Fix a JIT assertion during interpreter shutdown
by initializing vm_data fields for cold executors that
bypass _Py_ExecutorInit().
- gh-153932: Fix thread safety issue in the __reduce__ method
of enumerate.
- gh-153881: Fix potential data race when calling
__getstate__() under the free-threaded build.
- gh-153785: AttributeError: The default error message is
now generated from name and obj attributes when both are
set and the exception was constructed with no positional
arguments, or with a single positional argument equal to
name. Patch by Bartosz Sławecki.
- gh-152075: Reduced lock contention during LOAD_GLOBAL
bytecode specialization under free threading.
- gh-78959: Add the order parameter to memoryview.cast().
With order='F' it creates a zero-copy Fortran-contiguous
(column-major) view of a flat buffer, mirroring the order
argument of memoryview.tobytes().
- gh-153568: Speed up the tokenizer by copying source text
verbatim when it contains no carriage returns.
- gh-153578: Fix an out-of-bounds write in bytearray.extend()
when the bytearray is resized while the argument’s
__buffer__() is being acquired, for example by another
thread. Patch by tonghuaroot.
- gh-153570: Fix a use-after-free in bytearray.take_bytes()
when the argument’s __index__() method resizes the
bytearray. Patch by tonghuaroot.
- gh-153568: Speed up the parser by caching repeated
identifiers during a parse.
- gh-153568: Speed up the parser by not materializing the
text of tokens whose text is never read.
- gh-153568: Speed up parsing of left-recursive rules by
updating their memoization entries in place.
- gh-153568: Speed up the parser by turning its per-rule
C-stack check into a single inline comparison.
- gh-153568: Speed up the parser by letting memoization
lookups that cannot match return immediately.
- gh-153419: Fix multiple bytearray crashes and reference
leaks caused by skipping __init__() and broken state setup
code.
- gh-153354: Fix a crash in compiler-generated __annotate__
functions when the annotation format comparison returned a
non-boolean result.
- gh-153298: Fixes a data race in types.GenericAlias
__parameters__ initialization on free-threading builds.
- gh-153205: Fix a potential SystemError during vector calls
when memory allocation fails. A MemoryError is now raised
instead.
- gh-153171: Improve syntax error messages for misplaced not
after an operator in contexts where a generic “invalid
syntax” error was previously reported, such as 1 << 2 + not
x and 1 * + not x.
- gh-153236: Propagate exceptions raised while importing lazy
submodules instead of reporting them as missing attributes.
- gh-102960: Frame objects now support weak references. Patch
by Łukasz Langa.
- gh-152708: Fix AST generation asymmetry where unary
positive + was implicitly dropped in pattern match
expressions, restoring parsing parity with unary negative
- .
- gh-152682: Fix NULL pointer dereference in compile() when
a reserved name (e.g. __classdict__) is used as a type
parameter name and memory allocation fails while formatting
the error message.
- gh-152635: Fix a crash caused when running out of memory
creating a _interpchannels channel. Now a MemoryError is
correctly raised.
- gh-152405: Do not expose the internal mapping of
types.MappingProxyType when performing rich-compare
operations with non-stdlib types. Previously, it was
possible to mutate the internal mapping of a proxy there.
Now we pass not the original dict instance, but its copy,
when dealing with custom types.
- gh-152492: collections.OrderedDict update method can now
accept frozendict as an argument.
- gh-152375: Fix undefined behaviour when a sys.monitoring
callback raised an exception while the program was
following a branch or loop.
- gh-152192: Fix a truncated oparg being passed to JIT trace
initialization for a JUMP_BACKWARD with an EXTENDED_ARG.
- gh-152235: Defer GC tracking of set.intersection(),
set.difference(), set.symmetric_difference(), set.union()
and set.__sub__. Patch by Donghee Na.
- gh-152315: TypeError messages for some instance methods
called with too many positional arguments now suggest
checking whether the method definition is missing the self
parameter.
- gh-152235: Defer GC tracking of a set or frozenset to the
end of its construction from iterable. Patch by Donghee Na.
- gh-152228: Fix an assertion failure when python is built in
a debug mode that happened in str.replace() under a limited
memory situation.
- gh-152107: Fix a crash when creating a dict item iterator
(for example iter(d.items()) or reversed(d.items())) under
a memory-allocation failure. Patch by Jiucheng Zang.
- gh-151722: frozendict.fromkeys() now only tracks the
frozendict in the garbage collector once the dictionary is
fully initialized. Patch by Donghee Na and Victor Stinner.
- gh-151763: Fixes possible crash on types.CodeType
deallocation.
- gh-152020: On the free-threaded build, asyncio.all_tasks()
no longer loses eager-started tasks when called from a
thread other than the one running the event loop.
- gh-151763: Fix a potential crash in compile(), exec(),
eval() and ast.parse() when an allocation fails: the parser
or compiler could return without setting an exception.
- gh-151912: Fixed a crash in type() when selecting a
metaclass whose tp_new slot is NULL. Such metaclasses are
now rejected with TypeError instead of causing a NULL
pointer dereference.
- gh-151895: Fixed a crash in marshal.loads() when an
allocation failed while loading a reference-tracked
dictionary; it now raises MemoryError.
- gh-151905: Fix OOM error handling in PyFrame_GetBack() to
propagate exceptions instead of masking them as None.
- gh-151907: Avoid creating list objects in comprehensions
when the comprehension is not used as a value.
- gh-151773: Fix a crash in contextvars.ContextVar.set() when
memory allocation fails.
- gh-151665: inspect.signature() now works on the lazy
evaluators of type aliases and type parameters instead of
raising ValueError.
- gh-151672: Fix an inconsistency where calling
__lazy_import__ with a string fromlist would return a
types.LazyImportType that resolves to the named member,
rather than the module being imported.
- gh-151722: Defer GC tracking of frozendict to end of
construction. Patch by Donghee Na.
- gh-151619: Fix an issue where using non-module global or
builtin namespaces (such as dictionaries passed to exec())
could cause cached global loads to produce unresolved lazy
imports.
- gh-151646: Fix a data race in free-threading builds between
gc.get_stats() and a concurrent garbage collection cycle.
Access to the per-generation statistics is now serialized
with a mutex so the reader observes a consistent snapshot.
- gh-151126: Fix a crash when sharing memoryview objects
between interpreters fails due to running out of memory. It
now raises a proper MemoryError.
- gh-151644: Fix a data race in sys.setdlopenflags()
and sys.getdlopenflags() when called concurrently
in the free-threaded build. The underlying
_PyImport_GetDLOpenFlags and _PyImport_SetDLOpenFlags
functions now use atomic load/store operations.
- gh-151126: Avoid possible crash in _winapi.c where a device
has no memory left. Now it properly raises a MemoryError
- gh-151126: Avoid possible crash in getpath.c where a device
has no memory left. Now it properly raises a MemoryError.
Patch by Ivy Xu.
- gh-151518: Fix a free-threaded stop-the-world fairness
issue that could starve a thread reattaching after being
suspended while detached.
- gh-151546: Fix the stack limit check if Python is linked
to musl (ex: Alpine Linux). Use the stack size set by
the linker to compute the stack limits. Patch by Victor
Stinner.
- gh-151510: Fix a crash in __lazy_import__() when called
without an explicit globals argument and without a current
Python frame.
- gh-151461: Fix direct execution of files with invalid
source encodings to report the underlying codec lookup or
decoding error instead of the generic SyntaxError: encoding
problem message. Patch by Bartosz Sławecki.
- gh-151377: Fix races in free-threaded builds when updating
type slots for newly created classes and when removing
entries from a base type’s subclasses dictionary.
- gh-151218: PyConfig_Set() and sys.set_int_max_str_digits()
now replace sys.flags (create a new object), instead of
modifying sys.flags in-place. Patch by Victor Stinner.
- gh-151297: Fix an invalid pointer dereference that could
occur when calling PyObject_Realloc() with a NULL pointer
in free-threaded builds or with PYTHONMALLOC set to
mimalloc.
- gh-151253: If import encodings (first import) fails at
Python startup, dump the Python path configuration to
help users debugging their configuration. Patch by Victor
Stinner.
- gh-151238: Fix a crash when compiling a concatenated
f-string or t-string if an error occurs when processing one
of it’s parts.
- gh-151112: Fix a crash in the compiler that could occur
when running out of memory.
- gh-151126: Fix a crash, when there’s no memory left
on a device, which happened in: code compilation,
_interpchannels module, _winapi.CreateProcess() function.
- Now these places raise proper MemoryError errors.
- gh-150902: Apply an existing optimization of
PyCriticalSection (single mutex) to PyCriticalSection2:
avoid acquiring the same locks that the current CS has
already acquired.
- gh-151065: Fix memory leak when using the mimalloc memory
allocator.
- gh-151029: On Linux, fix sys.remote_exec() unable to find
remote writable memory when libpython replaced on disk.
- gh-150942: Speed up frame local variable item collection
by appending result pairs to the output list without an
extra reference-count round-trip (using the internal
reference-stealing list append helper). Patch by Omkar
Kabde.
- gh-150988: Fix a reference leak in OSError when attributes
are set before super().__init__().
- gh-145685: The internal method cache used for types is now
a per-type cache instead of a global per-interpreter one,
improving performance and reducing cache misses. Patch by
Kumar Aditya.
- gh-146495: Improve SyntaxError message for && and ||
operators, suggesting and/& and or/| respectively.
- gh-148874: Ignore interrupts immediately after calling the
__enter__ method of a context menager in a with statement.
This ensures that the __exit__ method is always called in a
with statement.
- gh-150459: Fix SyntaxError error message for from x lazy
import y. Raise SyntaxWarning on from . lazy import x (with
whitespace between the dots and a module named lazy).
- gh-150858: Fix a data race while changing __qualname__ of a
type concurrently on free-threaded builds.
- gh-150737: Optimize bytecode for empty unpack cases such as
{*()}.
- gh-150723: Fix perf jitdump timestamps on macOS. Events
were stamped using CLOCK_MONOTONIC, but macOS profilers
timestamp their samples with mach_absolute_time(). The
mismatch prevented the JIT code mappings from lining up
with the samples, so no Python frame could be resolved.
- gh-150723: Fix malformed perf jitdump thread ids on macOS.
The thread_id field of the JR_CODE_LOAD record was written
as a 64-bit value instead of the 32-bit value required by
the jitdump format, which shifted every following field and
prevented profilers from resolving Python frames.
- gh-150700: Fix a SystemError when compiling a class-scope
comprehension containing a lambda that references
__class__, __classdict__, or __conditional_annotations__.
Patch by Bartosz Sławecki.
- gh-150633: Fix the frozen importer accepting module names
with embedded null bytes, which caused it to bypass the
sys.modules cache and create duplicate module objects.
- gh-144774: Fix data race in BaseException when an exception
is copied while being mutated.
- gh-150411: Fix a data race in the free-threaded build when
gc.get_count() reads the young generation allocation count
while another thread updates it.
- gh-150374: Fix double release of the import lock on lazy
import reification errors.
- gh-148613: Fix a data race in the free-threaded build
between gc.set_threshold() and garbage collection
scheduling during object allocation.
- gh-149156: Fix an intermittent crash after os.fork()
when perf trampoline profiling is enabled and the child
returns through trampoline frames inherited from the parent
process.
- gh-149449: Fix a use-after-free crash when the unicodedata
module was removed from sys.modules and garbage-collected
between calls that decode \N{...} escapes or use the
namereplace codec error handler.
- gh-150207: Fix a crash when a memory allocation fails
during tokenizer initialization. A proper MemoryError is
now raised instead.
- gh-149816: Fix a Use-After-Free race condition in
subtype_getweakref() during concurrent weakref creation and
destruction in the free-threading build.
- gh-150107: asyncio: sendfile() and sock_sendfile() event
loop methods now call file.seek(offset) if file has a
seek() method, even if offset is 0 (default value).
- gh-150208: Avoid double-quoting string values from
pyconfig.h in sysconfigdata variables.
- gh-150146: Fix a crash on a complex type variable
substitution.
- from typing import TypeVar;
memoryview[TypeVar("")][*typing.Mapping[..., ...]] used to
fail due to missing NULL check on _unpack_args C function
call.
- gh-148587: sys.lazy_modules is now a set instead of a dict
as initially spelled out in PEP 810.
- gh-150027: Improve performance of frozenset objects by
avoiding copies during construction.
- gh-150042: Fix refleak in queue.SimpleQueue.put if memory
allocation fails.
- gh-149590: Fix crash when faulthandler is imported more
than once.
- gh-149816: Fix race conditions in invoke_gc_callback
iterating gc.callbacks in free-threading mode.
- gh-138325: Speed up converting a list to a tuple in the
tuple(genexpr) fast path and in starred tuple displays
(e.g. (*a, *b)) by stealing the list’s items into the tuple
instead of copying them.
- gh-149816: Fix a race condition in _PyBytes_FromList in
free-threading mode.
- gh-157407: Argument Clinic now parses arguments of
positional-only methods with a defining class directly,
without a _PyArg_Parser.
- gh-149816: Fix a race condition in memoryview with
free-threading.
- gh-149807: Fix hash(frozendict): compute the hash of each
(key, value) pair correctly. Patch by Victor Stinner.
- gh-149805: Fix a SystemError when compiling a compiling
__classdict__ class annotation. Found by OSS-Fuzz in
[#512907042].
- gh-149738: sqlite3: Disallow removing row_factory and
text_factory attributes of a connection or cursor to
prevent a crash on a query.
- gh-139808: Add branch protections for AArch64 (BTI/PAC)
in assembly code used by -X perf_jit (Linux perf profiler
integration).
- gh-127727: Warn when running a virtual environment created
for a different minor Python version than the current
interpreter, and suggest using python -m venv --upgrade.
- gh-148871: The empty tuple () is now loaded via
LOAD_COMMON_CONSTANT instead of LOAD_CONST, removing it
from per-code-object co_consts tuples.
- gh-149689: Fix missing error propagation in parser action
helpers when memory allocation fails. Patch by Thomas
Kowalski.
- gh-149676: Fix frozendict | frozendict hash.
- gh-148829: sentinel objects now support a repr= argument
and their __module__ attribute is writable.
- gh-149642: Allow imports inside exec() calls within
functions under PYTHON_LAZY_IMPORTS=all.
- gh-144957: Fix lazy from imports of module attributes
provided by module-level __getattr__.
- gh-149459: Fix a crash in the JIT optimizer when a
specialized LOAD_SPECIAL guard deoptimized after inserting
the synthetic NULL stack entry.
- gh-149321: Do not support none as a lazy imports mode.
- gh-149162: Fix a potential deadlock in
PyUnicode_InternFromString() and other interning functions
in the free-threaded build when called from C++ static
local initializers.
- gh-148817: Fold large constant list and set literals used
as the iterable of a for loop or in/not in test into a
constant tuple or frozenset, restoring an optimization
previously done by the AST optimizer that was lost when
constant folding moved to the CFG.
- gh-148825: Fix build error if specialization is disabled.
- gh-148450: Fix abc.register() so it invalidates type
version tags for registered classes.
- gh-148442: Fix a race condition in list.__lt__,
list.__le__, list.__gt__, and list.__ge__. Previously,
under concurrent list mutation, the items being compared
could be replaced with other objects before the final
comparison, causing the final comparison result to be
incorrect.
- gh-75723: Avoid re-executing .pth files when
site.addsitedir() is called for a known directory.
- gh-145857: The DELETE_GLOBAL opcode is now replaced with
PUSH_NULL; STORE_GLOBAL.
- gh-145855: The DELETE_ATTR opcode is now replaced with
PUSH_NULL; STORE_ATTR.
- gh-145854: The DELETE_NAME opcode is now replaced with
PUSH_NULL; STORE_NAME.
- gh-138912: Add fast path for match class patterns without
any sub-patterns to improve performance by ~15%.
- gh-91484: memoryview.cast() now allows casting from N-D to
1-D for F-contiguous.
- gh-128213: Speed up bytes creation from list and tuple of
integers.
- Patch by Ben Hsing and Pieter Eendebak
- gh-117999: Fix calculation of powers of complex numbers.
Small integer powers now produce correct sign of zero
components. Negative powers of infinite numbers now
evaluate to zero instead of NaN. Powers of infinite numbers
no longer raise OverflowError.
- gh-85260: compile() now raises ValueError instead of
crashing on a debug build if an identifier field of an AST
node (such as the name of a function, a class, an imported
module or a caught exception) is "None", "True" or "False".
- bpo-38131: Produce more meaningful messages when compiling
AST objects with wrong field values. Patch by Batuhan
Taskaya.
- Library
- gh-159184: Fix marshal.dumps() raising TypeError for a set
or frozenset containing several complex NaNs, which also
made it impossible to write a .pyc file for source code
containing such a constant.
- gh-159185: Fix a crash in marshal.dumps() and
marshal.dump() when a set is modified while its elements
are serialized, for example by the __buffer__() method of
one of its elements. RuntimeError is now raised.
- gh-129724: The output of marshal.dumps() and
marshal.dump(), and so the content of .pyc files, no longer
depends on the reference counts of the serialized objects:
it is no longer changed by unrelated references to them
held elsewhere in the process nor, in the free-threaded
build, by whether they have been used by other threads.
An object is now written in a form that can be referenced
later in the data if and only if it occurs more than once
in the serialized value; this also applies to interned
strings, which were always written in that form. The format
is unchanged and the data can be read by previous Python
versions that support the format version, but it is not
byte-for-byte identical to the data written by them.
- gh-87720: Fixed error in email new policies where header
folding failed to detect the need to re-quote text obtained
from encoded words in certain cases.
- gh-158929: Fix crash when calling syslog.syslog() while a
subinterpreter in another thread calls syslog.openlog() or
syslog.closelog().
- gh-158897: Optimize io.BufferedReader.readline() when lines
are close to the buffer size (128 kB by default) or longer
than the buffer size. Replace the C loop searching for the
newline byte in the buffer with a memchr() call which is
more efficient. In the good case, it makes readline() up to
4x faster! Patch by Victor Stinner.
- gh-158936: dataclass() no longer fails when a string
annotation names a lazy import that cannot be resolved,
matching the behavior for non-string annotations.
- gh-158893: Make os.strerror() thread-safe: use the
reentrant strerror_r() function if available. Patch by
Victor Stinner.
- gh-158539: Fix macOS runtime section lookup for remote
debugging when virtual memory region sizes differ from
Mach-O segment file sizes.
- gh-156545: Fix deep flamegraph exports on platforms with
small C stacks by falling back to the Python JSON encoder
when the C encoder runs out of stack space.
- gh-79459: tempfile functions that take a prefix or suffix
argument now raise a ValueError if they contain a directory
component: tempfile.mkstemp(), tempfile.mkdtemp(),
tempfile.TemporaryFile(), tempfile.NamedTemporaryFile().
- gh-158552: Wait for Windows threads to finish suspending
before reading target memory in the sampling profiler’s
blocking mode. Resume the target if waiting for suspension
fails.
- gh-156321: Fix asyncio.shield() reporting an exception from
the inner future through the loop exception handler as soon
as it completes after the shield was cancelled, even when
the exception is retrieved afterwards. The exception is now
reported only if it is never retrieved, as with any other
future.
- gh-158539: Fix profiling.sampling exception mode discarding
samples for code running inside an except block in a
generator or coroutine. The remote debugger now follows
tstate->exc_info and its previous_item chain instead of
only reading the embedded exc_state, matching the exception
that sys.exception() reports.
- gh-158563: Fix turtle.undo() after turtle.teleport() and
after an exception in turtle.circle(), turtle.dot() or
turtle.write(). Fix turtle.stamp(), turtle.clearstamp(),
turtle.clear() and turtle.reset() when the undo buffer is
disabled.
- gh-158540: Fix profiling.sampling not adding the directory
containing the profiled script to sys.path, which prevented
the script from importing modules placed next to it. The
script’s directory is now added, matching the behavior of
python script.py.
- gh-158522: Fix profiling.sampling showing a single frame
for a task whose coroutine recurses. Patch by Timofei
Ivankov.
- gh-158237: Fix ast.unparse() to not insert a space before
attribute access on bool constants (e.g. True.real instead
of True .real).
- gh-158169: Fix zlib.Decompress.unconsumed_tail duplicating
unused_data after end of stream when max_length was used.
- gh-141540: Quote the unconverted data and the
format in the error messages of time.strptime() and
datetime.datetime.strptime() so that whitespace such as a
trailing newline is visible.
- gh-157788: Fix python -m asyncio ps failing on a process
that has a task with a name longer than 255 characters.
- gh-157605: Fix profiling.sampling failing when a native
thread has an empty Python stack.
- gh-157763: The undocumented ctypes.util.test() function is
now soft deprecated and a no-op at runtime.
- gh-157660: Fix profiling.sampling reporting errors or
incorrect line numbers in free-threaded builds when a
thread-local bytecode array grows or gains entries after
being cached.
- gh-153888: Fix unittest.mock.patch() with autospec, spec,
or spec_set when used with lazy-imported objects.
- gh-119646: On Windows, OSError from subprocess now includes
the attempted executable or working directory in filename.
- gh-157675: encodings.idna.nameprep() now takes a limit
argument that allows rejecting extremely large input early.
The idna encoding and the encodings.idna.ToASCII() and
encodings.idna.ToUnicode() functions use this to avoid
passing unbounded input to quadratic-time algorithms.
- gh-157672: Fix tkinter on macOS: creating a Tk instance
no longer replaces the Python handlers of SIGINT, SIGHUP
and SIGTERM with Tk’s handler which exits the process, so
Ctrl-C raises KeyboardInterrupt again.
- gh-157639: Fix a crash in cProfile when an external timer
re-enters the profiler. Profiling events raised while the
external timer runs are now ignored.
- gh-157621: Fix a crash when a weak-reference
callback is attached to a typing.ParamSpecArgs or
typing.ParamSpecKwargs instance.
- gh-157633: Update unicodedata database to Unicode 18.0.0.
- gh-69919: code.InteractiveInterpreter.runsource() and the
REPL now report any exception raised by compiling the
source, such as MemoryError or RecursionError for too
deeply nested source, instead of propagating it or printing
a traceback of the REPL internals.
- gh-157514: Add constants tkinter.TCL_VERSION_INFO
and tkinter.TK_VERSION_INFO, named tuples with the
versions of the Tcl and Tk libraries that were used for
building the module, and _tkinter.TCL_PATCH_LEVEL and
_tkinter.TK_PATCH_LEVEL strings.
- gh-157513: ssl.OPENSSL_VERSION_INFO is now a named tuple.
Add ssl.OPENSSL_API_VERSION_INFO which provides information
about the version of the OpenSSL library that was used for
building the module.
- gh-157487: Add constants ctypes.LIBFFI_VERSION,
ctypes.libffi_version, ctypes.LIBFFI_VERSION_INFO and
ctypes.libffi_version_info, which provide information about
the version of the libffi library in use. They are only
available with libffi 3.5 or later.
- gh-157485: Add constants readline.READLINE_VERSION_INFO,
readline.readline_version_info and
readline.readline_version, which provide information about
the version of the Readline library in use.
- gh-157480: Add constants in dbm.ndbm which provide
information about the version of the underlying library
in use: GDBM_VERSION_INFO, gdbm_version_info and
gdbm_version if it is GDBM, or BDB_VERSION, bdb_version,
BDB_VERSION_INFO and bdb_version_info if it is Berkeley DB.
dbm.ndbm.library is now 'ndbm' instead of 'GNU gdbm' for a
classic NDBM library.
- gh-157478: Add constants dbm.gnu.GDBM_VERSION_INFO,
dbm.gnu.gdbm_version_info and dbm.gnu.gdbm_version, which
provide information about the version of the GDBM library
in use. The private constant _gdbm._GDBM_VERSION has been
removed.
- gh-157475: Add constants decimal.LIBMPDEC_VERSION,
decimal.libmpdec_version, decimal.LIBMPDEC_VERSION_INFO,
and decimal.libmpdec_version_info in the C implementation,
which provide information about the version of the libmpdec
library in use.
- gh-157473: Add constant xml.parsers.expat.VERSION_INFO
which provides information about the version of the
Expat library that was used for building the module.
xml.parsers.expat.version_info is now a named tuple.
- gh-157470: Add constants sqlite3.SQLITE_VERSION and
sqlite3.SQLITE_VERSION_INFO which provide information
about the version of the SQLite library that was used for
building the module. sqlite3.sqlite_version_info is now a
named tuple.
- gh-157451: Fix gettext plural form selection when the
Plural-Forms expression combines the unary ! operator with
a binary operator, for example !n + 1 or 2 * !n. The latter
raised SyntaxError.
- gh-150816: Speed up inspect.signature() for Python
functions by skipping redundant validation when creating
inspect.Parameter objects.
- gh-157335: Fix out-of-bounds write in mmap.mmap.__setitem__
that could occur when converting the index or the assigned
value (via __index__() for a single item, or via the buffer
protocol for a slice) resized or closed the mmap object
during the assignment.
- gh-157406: Fix the Python implementation of
xml.etree.ElementTree.XMLParser: the doctype() method of
the target is now called for a document type declaration
without an external identifier, like <!DOCTYPE html>, as in
the C implementation.
- gh-128509: marshal.load() and marshal.loads() can now get
1-byte string singletons. Patch by Victor Stinner.
- gh-157364: Fix a use-after-free in io.TextIOWrapper when
a call to the underlying buffer reentrantly detaches it.
Patched by Shamil Abdulaev.
- gh-157366: Remove the accidental acceptance of bytes in the
C implementation of xml.etree.ElementTree, a leftover of
the Python 2 to Python 3 migration, for paths of find() and
similar methods, for the tag of iter(), and for the names
of events of XMLPullParser and iterparse(). It now raises
the same exceptions as the Python implementation.
- gh-157242: io.BytesIO is no longer closed on write() and
truncate() failure (MemoryError). Patch by Victor Stinner.
- gh-157325: Fix an out-of-bounds read in the hz incremental
decoder when the input ends with ~.
- gh-157301: Fix asyncio.Task hanging the event loop when an
eager start fails to enter the task’s context.
- gh-156955: Speed up csv.writer() by caching the set of
characters that need quoting or escaping in the dialect.
Writing long fields is now up to 5 times faster.
- gh-157213: Fix asyncio.gather() leaving stale await-graph
edges on children that outlive it.
- gh-157176: Make the time.struct_time type immutable
to prevent reference cycles between the type and its
instances. Patch by Shamil Abdulaev.
- gh-156002: zipfile again reads members through a
third-party decompressor installed by monkey-patching
the private _get_decompressor() to return an object that
only implements old BZ2Decompressor API from Python 3.3.
Calling decompress() with one argument is deprecated. Note
that decompressors without needs_input and two-argument
decompress() are vulnerable to CVE 2026-15310.
- gh-157159: The usage message printed by python -m tabnanny
when no arguments are given now suggests python -m instead
of the source file.
- gh-123018: Fix readline.write_history_file() and
readline.append_history_file() producing a history file
that readline.read_history_file() could not load when a
limit was set with readline.set_history_length() and Python
was built against libedit. This works around NetBSD PR
60322.
- gh-157127: Reword the argparse error message reported for
a missing required mutually exclusive group to one of the
following arguments is required: --foo, --bar, so that the
argument names are separated by commas.
- gh-157146: linecache can now read the source of a module
that was imported from a zip archive on sys.path when given
only the file name, as pdb, warnings and doctest do.
- gh-157058: asyncio.wait_for() with a non-positive timeout
now records the waiter in the call graph.
- gh-156933: Fix incorrect integer return values from ctypes
callbacks on some platforms, such as s390x.
- gh-157048: Preserve the position and contents of io.BytesIO
when BytesIO.__init__() fails because a buffer is exported.
- gh-157025: Fix transport cleanup when cancelling
asyncio.loop.sendfile() while waiting for the write buffer
to drain in the native implementation.
- gh-156961: Fix tkinter.font.nametofont() and the
tkinter.font.Font constructor for a font name or
description returned by Tk as a Tcl object, for example by
ttk.Style.lookup().
- gh-156988: asyncio.print_call_graph() no longer truncates
the call stack at a synchronous generator.
- gh-156970: Set the docstring of
unittest.mock.Mock.return_value.
- gh-156946: Fix a crash in curses.panel when the finalizer
of a panel’s user pointer runs while the panel is being
deallocated. The panel is now taken off the panel stack
before its user pointer is dropped.
- gh-156924: annotationlib.ForwardRef.evaluate() now
resolves lazy import proxies found in the namespace. With
FORWARDREF, a lazy import that fails to resolve now results
in a ForwardRef instead of the lazy import proxy, and with
VALUE the underlying exception is propagated.
- gh-156865: Don’t raise exceptions on overflows in
ctypes.c_float_complex. Patch by Sergey B Kirpichev.
- gh-156920: Fix asyncio on Windows: closing a
DatagramTransport under ProactorEventLoop while datagrams
were still queued, or while an in-flight write failed right
as close() was draining the buffer, could strand the queued
data and never call connection_lost(), hanging the close
indefinitely.
- gh-156864: array.array() setter now correctly detects
overflows for the 'e', 'f' and 'Zf' type codes. Patch by
Sergey B Kirpichev.
- gh-156867: Raise OverflowError’s for native 'Zf' format in
struct.pack(), like for 'f' format. Previously overflows
in the float complex type were silent. Patch by Sergey B
Kirpichev.
- gh-156810: Fix a UnicodeEncodeError crash in the sampling
profiler’s collapsed-stack export (--collapsed) when a
sampled frame’s function or file name contains non-ASCII
or surrogate-escaped characters. The output file is now
written as UTF-8.
- gh-124697: The symtable module now represents inlined list,
set and dict comprehensions (PEP 709) as their own symbol
table entries of type INLINED_COMPREHENSION.
- gh-156797: Fix xml.sax.saxutils.XMLGenerator: the namespace
URI is now escaped in the namespace declaration. Previously
a URI containing &, < or a quote character produced a
document which cannot be parsed.
- gh-63102: XMLPullParser and iterparse() now support the
target parameter. The reported object is the value returned
by the corresponding method of the target, so no tree is
built if the target does not build one. Only the standard
TreeBuilder was supported in the C implementation before.
- gh-61290: xml.etree.ElementTree no longer refuses to
serialize attributes without a namespace when the
default_namespace option is used. The default namespace
declaration does not apply to attribute names, so an
unqualified attribute name is written as is, and a
qualified attribute name is always written with a prefix.
- gh-83895: xml.etree.ElementTree now accepts input larger
than 2 GiB in the C implementation. The data is fed to
Expat in chunks, as xml.parsers.expat already did, instead
of raising OverflowError.
- gh-99064: Fix xml.etree.ElementTree.parse() with a text
file or other source of str data in the C implementation.
The encoding declared in the document was applied to the
already decoded text, which produced mojibake. It is
now ignored, as when parsing with XMLParser.feed() or
fromstring().
- gh-89499: ElementTree.write(), tostring() and
tostringlist() now support the standalone parameter, the
value of the standalone document declaration in the XML
declaration.
- gh-156713: Fix nturl2path.pathname2url() and
nturl2path.url2pathname(): the filesystem encoding and
error handler are now used for percent-encoding and
decoding, as in urllib.request. Previously paths containing
surrogate characters raised UnicodeEncodeError.
- gh-156774: Speed up pdb startup by only importing asyncio
when the program being debugged has already imported it.
- gh-156439: socket.if_nametoindex() and
socket.if_indextoname() are now available on platforms that
provide them but not if_nameindex, such as Android before
API level 24.
- gh-156698: Fix asyncio.ProactorEventLoop UDP transports so
that a write error no longer strands a paused protocol: the
write loop is now rescheduled when data remains buffered,
and the protocol is resumed when the buffer has drained.
- gh-127057: Fix asyncio.ProactorEventLoop UDP transports so
that a ConnectionResetError raised by WSARecvFrom no longer
stops the read loop.
- gh-156665: xml.dom.minidom now validates namespaces
in createElementNS(), createAttributeNS() and
setAttributeNS(), and when setting prefix of an attribute.
NamespaceErr is now raised for a malformed qualified name,
for a prefix with an empty namespace, and for illegal use
of the xml and xmlns prefixes.
- gh-156658: xml.dom and xml.etree.ElementTree no longer
treat characters which are not white space in XML (such as
U+00A0) as white space. Previously they could be lost in
indent(), canonicalize() with strip_text=True, and when
parsing with the whitespace-in-element-content feature
turned off.
- gh-81623: toprettyxml() in xml.dom.minidom and indent()
in xml.etree.ElementTree no longer add whitespace inside
an element which is marked with xml:space="preserve" or
which contains text (toprettyxml() also takes into account
the content model declared in the DTD). Previously such
indentation changed the content of the element.
- gh-54092: Implement writexml() for document fragments in
xml.dom.minidom, so that toxml() and toprettyxml() now work
for them. They write the children of the fragment, without
adding a level of indentation.
- gh-156512: Fix asyncio losing a connection twice when
resume_writing() closes the transport.
- gh-44376: writexml() in xml.dom.minidom now writes the
namespace declarations needed to serialize the namespaces
of the element and its attributes, if they are not already
declared for an ancestor. The document is not modified.
- gh-156545: Fix the sampling profiler’s flamegraph export so
that profiling a deeply recursive program no longer fails
with RecursionError instead of producing a flamegraph.
Patch by tonghuaroot.
- gh-156523: Fix asyncio.as_completed() not recording the
awaiting task in the call graph.
- gh-156476: The pure Python implementation of
queue.SimpleQueue.get() now ignores timeout when block
is false, matching the documented behavior and the C
implementation. It previously raised ValueError.
- gh-156444: Fix matching of a negated character set in
a bytes pattern compiled with both re.IGNORECASE and
re.LOCALE. The case closure is now applied to the members
of the set, so that [^bc] no longer matches b'B'.
- gh-156360: Add the PYTHON_TURTLE_LANG environment variable
to select the language of turtle docstrings. Docstring
dictionary entries naming a method which does not exist in
the running version are no longer reported.
- gh-156400: Fix socket and pipe leaks in asyncio when
protocol_factory() raises in loop.create_datagram_endpoint,
loop.connect_read_pipe, and loop.connect_write_pipe. The
socket or pipe is now closed instead of leaking until
garbage collection.
- gh-156408: Fix asyncio.print_call_graph() raising
AttributeError when called on a task that has already
finished.
- gh-156404: Restore compatibility with .pth files generated
before Python 3.15 in the site module. Inject the fullname
variable in the frame which executes pth code.
- gh-156353: Fix configparser parsing when using whitespace
in delimiters.
- gh-156327: Fix asyncio.print_call_graph() including its own
frame in the printed call stack.
- gh-108549: Fix asyncio.Task, when the task has a
pending cancellation, replace exc exception with a
asyncio.CancelledError unless it is SystemExit or
KeyboardInterrupt, which must propagate unchanged.
- gh-156261: pwd.getpwuid() now raises OverflowError instead
of KeyError if the user id is out of the range of the C
uid_t type, as grp.getgrgid() does for the group id.
- gh-156230: curses.window.instr(), in_wstr() and in_wchstr()
no longer limit the count to 2047, which silently truncated
a longer line.
- gh-156228: The ssl and hashlib modules now route
OpenSSL memory allocations through the Python raw
memory allocators, making OpenSSL memory usage visible
to tracemalloc and to custom allocators installed with
PyMem_SetAllocator().
- gh-156180: zlib.adler32_combine() and zlib.crc32_combine()
now raise ValueError if the len2 argument is negative,
instead of returning rubbish or hanging indefinitely,
respectively.
- gh-156166: ssl: A failed assignment or deletion of the
_msg_callback attribute of ssl.SSLContext no longer removes
the current callback. Deleting it now raises AttributeError
instead of TypeError.
- gh-156173: Calling zlib.Decompress.flush() on invalid
compressed data now raises zlib.error instead of being
silently ignored.
- gh-156124: Fix a crash in the free-threaded build when
deleting the contents attribute of a ctypes pointer.
- gh-156112: _ios_support no longer fails to import when
ctypes.util.find_library() cannot resolve the ObjC runtime
through the dyld shared cache, as is the case on iOS 13.
The runtime is now loaded by name, which dyld resolves
against the cache directly.
- gh-156101: Fix sqlite3.Cursor.arraysize being set to 0 if
the assigned value is too large. The attribute is now left
unchanged if the assignment fails.
- gh-156100: Fix crashes in sqlite3.Connection when deleting
the autocommit attribute or setting it to an integer which
does not fit in C long. Both now raise an exception.
- gh-156099: Fix a crash when deleting the keylog_filename
attribute of ssl.SSLContext. It now raises AttributeError.
- gh-156067: Fix error handling in the zoneinfo accelerator
module when a transition index is -1 or a TZ string’s
__bool__ raises.
- gh-155997: Fix concurrent.interpreters.list_all(). It
failed if an interpreter was destroyed during the call,
in particular by a garbage collection which finalized the
object owning the last reference to it.
- gh-155974: Fix a regression in Python 3.15: addstr(),
addnstr(), insstr() and insnstr() again restore the window
attributes when the write fails, instead of leaving the
temporary attr applied.
- gh-155941: Fix asyncio.start_server() when a plain-function
client_connected_cb raises: the error is now reported like
the coroutine case and the transport is closed, instead
of leaving the connection open forever (which also made
asyncio.Server.wait_closed() hang).
- gh-155934: Fix a socket leak in asyncio when transport
creation fails for a connection accepted by a server, and
report the error via the loop exception handler even when
debug mode is disabled.
- gh-155966: math.tanpi() now raises ValueError for
half-integer values (e.g., tanpi(1.5)), as these are poles
of the function.
- gh-155952: Fix the signatures of
sqlite3.Connection.execute(), warnings.warn() and
locale.setlocale() which rendered <unrepresentable> instead
of the correct defaults for parameters.
- gh-155596: Fix pprint.pprint() and pprint.pformat() with
expand=True not honouring width for nested values. The
width of the 'key': prefix was not counted when deciding
whether a value fitted on the current line, so values under
long keys could overflow width instead of being expanded.
- gh-155888: Fix asyncio.WriteTransport.writelines() hanging
the transport when the last data chunk is empty.
- gh-155869: Fix reorganize() in dbm.dumb failing to persist
updated value offsets, which could cause data loss after
reopening the database.
- gh-121291: enum.Flag (and enum.IntFlag) subclasses no
longer have a mixin base’s own __or__, __and__, __xor__,
__ror__, __rand__, __rxor__, or __invert__ override
silently replaced by Flag’s default implementation.
- gh-155863: Add the WACS_* constants to the curses module.
They are the counterparts of the ACS_* line-drawing codes
as curses.complexchar cells, and are added, like the
latter, by curses.initscr() and curses.newterm().
- gh-155843: hmac: ensure that HMAC objects are properly
initialized to prevent rare crashes on allocation failures.
Patch by Bénédikt Tran.
- gh-155835: hashlib: Fix a data race when accessing
digest_size on BLAKE-2 objects. Patch by Bénédikt Tran.
- gh-155835: hashlib: Fix data races when accessing
digest_size and block_size on SHA-3 objects. Patch by
Bénédikt Tran.
- gh-155811: Add a sequence counter to GC statistics
to prevent _remote_debugging returning inconsistent
snapshots caused by non-atomic reads. Patch by Maurycy
Pawłowski-Wieroński.
- gh-155717: multiprocessing’s default start method is now
“spawn” instead of "forkserver" when there is no writable
temporary directory, such as on a read-only file system.
Previously starting a process failed with an OSError there.
Patch by Bénédikt Tran.
- gh-155775: Fix a regression in imaplib introduced in
the fix for gh-63121: refreshing the capabilities after
a successful login() or authenticate() consumed the
CAPABILITY response, so it could no longer be read with
response().
- gh-113318: Fix crashes when deleting an attribute whose
setter is generated by Argument Clinic and is not prepared
for deletion, among them frame.f_trace_opcodes and the
context, owner and session attributes of _ssl._SSLSocket.
Deleting such attribute now raises AttributeError.
- gh-155781: Fix a possible crash in free-threaded
builds when the sqlite3 converter registry is modified
concurrently while a cursor builds its row cast map.
- gh-83371: Fix a deadlock in multiprocessing.pool.Pool when
callback or error_callback raises an exception. It killed
the thread which handles results, so that the pool hung
forever. The exception is now the result of the job, as an
error raised while iterating the input, and is raised by
AsyncResult.get().
- gh-155702: Fix sqlite3.Blob slice assignment with a step.
It patched the bytes object read from the blob, which for a
single byte is an immortal singleton, so that the value of
that byte was changed in the whole process.
- gh-90756: xml.etree.ElementTree.ElementTree.write()
now treats the utf-8-sig encoding as utf-8 in the XML
declaration.
- gh-44871: Parser objects of the XML parser have a new
method GetSpecifiedAttributeCount(). It tells how many of
the attributes reported to StartElementHandler were given
in the start tag rather than defaulted from the DTD.
- gh-44871: xml.dom.minidom now conforms closer to
the DOM Level 1 specification. The factory methods
now raise InvalidCharacterErr if the name is not a
valid XML name. Removing an absent attribute with
Element.removeAttribute() or Element.removeAttributeNS()
no longer raises NotFoundErr, it has no effect as the
DOM specifies. Inserting or setting a node created by
another document now raises WrongDocumentErr, setting
an attribute node which belongs to another element now
raises InuseAttributeErr, and inserting a node into
itself or its descendant now raises HierarchyRequestErr.
A document can no longer have two element or two document
type children, and a document fragment can no longer have
notation children. Attributes defaulted in the DTD are
no longer omitted when parsing, and Attr.specified now
reports whether the attribute was given in the start tag.
EntityReference nodes and Document.createEntityReference()
are now implemented.
- gh-80762: Fix dir() on unittest.mock.Mock objects created
with a tuple spec: it raised TypeError. Such spec is now
also documented.
- gh-61366: http.cookiejar.MozillaCookieJar.save() now writes
0 in the expiration time field for session cookies, as curl
and Wget do. Previously this field was left empty, and such
lines were ignored by curl and Wget.
- gh-153400: On Linux, os.copy_file_range() and
os.memfd_create() now fall back to the raw syscall when the
libc Python is built against does not provide the wrapper
function, so they stay available on interpreters built
against a libc older than glibc 2.27.
- gh-153400: os and signal: Use glibc functions instead
of syscall(): pidfd_open(), pidfd_getfd() and
pidfd_send_signal() (glibc 2.36), gettid() and getdents64()
(glibc 2.30), and getrandom() (glibc 2.25). Patch by Victor
Stinner.
- gh-155496: The ctypes.set_errno and ctypes.set_last_error
auditing events are now raised after the argument is
converted to an integer, therefore they are no longer
raised if the argument is invalid.
- gh-155496: io.RawIOBase.readinto() and io.RawIOBase.write()
now raise TypeError instead of NotImplementedError if they
are called without the required argument.
- gh-155468: Fix netrc to distinguish empty quoted tokens
from end-of-file, so malformed files no longer cause the
remaining content to be silently ignored.
- gh-155519: Avoid a data-race in free-threaded builds when
reading and writing context variables from different
threads.
- gh-155336: Fix error handling in socket.gethostbyaddr() and
socket.gethostbyname_ex() when hostname resolution fails.
- gh-118318: Remove the write_c14n() method of
xml.etree.ElementTree.ElementTree and the support
of method="c14n" in write() and tostring(). They
never worked and always raised ValueError. Use
xml.etree.ElementTree.canonicalize() instead.
- gh-155433: Fix asyncio.TaskGroup losing outside
cancellation after cancel().
- gh-155418: Fix asyncio.TaskGroup hang when a task created
by asyncio.eager_task_factory() cancels the group before
suspending.
- gh-102475: Fix os.path.realpath() on Windows: the
unresolved part of the path is now appended, not joined,
so a file name which looks like a drive (e.g. spam:eggs)
no longer discards the resolved part. A path relative to
another drive is now resolved against the root directory of
that drive.
- gh-89760: Fix os.path.realpath() on Windows: the \\?\
prefix is no longer stripped from a volume GUID path, which
made the result invalid.
- gh-84419: Fix os.stat() on Windows: trailing dots and
spaces, which are ignored by the operating system, are no
longer taken into account when the execute permissions are
guessed from the file extension.
- gh-111331: Closing a io.BytesIO object which has exported
buffers no longer fails with BufferError. The exported
buffers keep the data alive and stay usable. As a result,
destroying or garbage collecting such object no longer
emits an unraisable exception.
- gh-108885: Doctests run by the unittest test runner now
report every example, as in verbose mode, if the runner
reports more than the test names, i.e. its verbosity is 3
or higher. The -v option of unittest can now be repeated,
so python -m unittest -vv asks for this. Added also the
verbosity attribute of unittest.TestResult.
- gh-155319: warnings.warn_explicit() now displays the source
line taken from the loader of the module whose globals
are passed as module_globals. It also no longer raises
IndexError if lineno is out of the range of the module
source.
- gh-123011: warnings.warn_explicit() no longer emits a
spurious DeprecationWarning or raises ImportError when it
is called with the globals of the __main__ module.
- gh-69370: python -m inspect --details no longer fails with
UnicodeEncodeError if the path of the module contains
characters unencodable in the encoding of sys.stdout. Such
characters are now escaped with backslashes.
- gh-69371: Fix pydoc for modules whose path contains
undecodable bytes. pydoc.writedoc() and the pydoc HTTP
server no longer fail with UnicodeEncodeError: the file
URL is now percent-encoded using the filesystem encoding,
and characters unencodable in the generated HTML page are
escaped with backslashes.
- gh-155236: Add the dedent parameter in inspect.cleandoc()
and inspect.getdoc(). pydoc no longer dedents documentation
strings, so the indentation of the parameter descriptions
generated by Argument Clinic is preserved.
- gh-155009: Fix argparse.ArgumentParser to preserve the
program name from sys.argv[0] when a named module is
executed as the main program without replacing sys.argv[0].
- gh-150942: Improve the performance of readlines() for
io.BytesIO.
- gh-155063: Bump the version of pip bundled in ensurepip to
version 26.2.1
- gh-153711: On macOS, add run-time checks around the
syscalls pipe2 (2) and dup3 (2), in addition to the
existing build-time checks. This means that Python built on
macOS 27 (where these calls are available) can run on macOS
26 (where they aren’t).
- gh-155143: Fix asyncio.shield() leaking the calling task
via the await-graph and callbacks when called on a future
that never resolves.
- gh-75008: csv.Sniffer.sniff() now detects the
lineterminator parameter by a majority vote among the line
endings of the sample.
- gh-155051: decimal.localcontext() now raises TypeError if a
keyword argument is None, as the pure Python implementation
already did. Previously the C implementation silently
ignored it.
- gh-99772: Fix comparisons and hashing of datetime.time
objects with sub-minute UTC offsets.
- gh-155044: optparse.Values objects now support
copy.replace().
- gh-155043: argparse.Namespace objects now support
copy.replace().
- gh-155041: decimal.Context objects now support
copy.replace().
- gh-155040: tarfile.TarInfo objects now support
copy.replace().
- gh-155063: Bump the version of pip bundled in ensurepip to
version 26.2
- gh-155033: CSV dialects (instances of csv.Dialect
subclasses and dialect objects returned by
csv.get_dialect()) now support copy.replace().
- gh-154936: Fix the pure Python json decoder to report the
correct position for invalid literal control characters in
JSON strings.
- gh-154904: Speed up shutil import by probing the _bz2,
_lzma and _zstd extension modules instead of importing the
bz2, lzma and compression.zstd wrappers, which are now only
imported when an archive is actually created or extracted.
- gh-154892: Fix a bug in the C accelerator for zoneinfo
where datetime.datetime subclasses returning -1 for hour,
minute, or second could incorrectly raise a SystemError.
- gh-154871: Fixed a crash in asyncio.Task.get_context() when
called on an uninitialized task.
- gh-154848: The pickle C accelerator now enforces
frame boundaries when unpickling, as the pure Python
implementation already did. An argument that straddles a
frame boundary, or a frame that begins before the previous
one has ended, now raises pickle.UnpicklingError instead of
being silently read across the boundary. This prevents the
loaded data from diverging from the pickletools disassembly
of the same pickle.
- gh-154885: os.get_terminal_size() now checks isatty before
calling ioctl, which reduces log noise on Android.
- gh-154855: Fix curses.window.instr(), in_wstr() and
in_wchstr() returning one character too few when the curses
module is built against a curses library that counts the
terminator in the requested length, such as the NetBSD one.
- gh-154874: Fix curses.termattrs() returning a negative
value on a terminal that supports curses.A_ITALIC, which
left its result unusable as an attribute mask.
- gh-151728: Clear the internal typing caches from an exit
handler. Previously, an extension module that leaked a
reference to typing would also keep every subscripted type
alive past interpreter shutdown, including types owned by
unrelated extension modules.
- gh-154791: Fix asyncio.Future (C implementation) losing the
initial exception traceback frames when Future.result() is
called more than once. Previously, the C implementation
cleared the stored traceback after the first call, causing
subsequent raises to omit the original raise site. The
pure-Python implementation was unaffected.
- gh-94984: Add the mode parameter to
asyncio.loop.create_unix_server() and
asyncio.start_unix_server() to set the permissions of the
Unix socket file created for path, applied before the
server starts accepting connections.
- gh-154744: Improve detection of skipinitialspace in
csv.Sniffer.sniff().
- gh-154726: Fix shutil.copyfile() to copy a symbolic link
to a special file when follow_symlinks=False instead of
raising SpecialFileError.
- gh-154738: Fix ExternalEntityParserCreate() not propagating
the reparse-deferral setting to the subparser, which left
GetReparseDeferralEnabled() returning an uninitialized
value. Patch by tonghuaroot.
- gh-93251: Fix UnicodeDecodeError in socket functions (such
as getaddrinfo() and gethostbyaddr()) when the localized
error message of the C library is not UTF-8: decode it from
the locale encoding.
- gh-148468: Fix a regression in argparse where colorized
argument help containing format specifiers did not accept
string-like proxy objects.
- gh-154638: Improve import time of argparse by lazily
importing several dependencies.
- gh-142035: Fix incorrect wrapping of argparse help text
when color is enabled.
- gh-135736: Fix :asyncio.TaskGroup to not wrap a
GeneratorExit into a BaseExceptionGroup if it was raised
by the body of the task group and none of the tasks in the
group raised exceptions.
- gh-154594: Fix copy.deepcopy() so that an object whose deep
copy is None is still memoized. Patch by tonghuaroot.
- gh-154568: Fix array unpickling of little-endian float16.
- gh-154566: Fix array.array.byteswap() corrupting data for
'Zd' (complex double) arrays with more than one element:
the 16-byte item loop advanced the buffer pointer by only
8 bytes per iteration, causing items after the first to be
scrambled.
- gh-154551: Fix ctypes.util.find_library() returning None in
non-UTF-8 locales.
- gh-154523: Fixed data-race when calling
io.TextIOBase.detach() in free-threaded build.
- gh-135683: logging.FileHandler and
logging.handlers.WatchedFileHandler now honor
logging.raiseExceptions for errors that occur while opening
the file, like for other errors during logging.
- gh-154199: Make ctypes.util.find_msvcrt() always return
None for compatibility reasons.
- gh-135736: Fix asyncio.TaskGroup silently discarding errors
from sibling tasks whenever the async with block exits with
a SystemExit or KeyboardInterrupt. These errors are now
reported via loop.call_exception_handler() instead of being
lost.
- gh-79366: Fixed a race condition in logging: if a handler
was removed while a record was being emitted, the following
handlers of the same logger could be skipped.
- gh-82535: logging.handlers.SysLogHandler no longer fails if
the address cannot be resolved when the handler is created.
The address is resolved again when a record is emit ted.
- gh-70990: logging.handlers.SysLogHandler now accepts
a bytes address of a Unix domain socket, including an
address in the abstract namespace. Previously only str was
recognized, and a bytes address raised ValueError.
- gh-154189: Fixed a potential use-after-free when calling
functools.partial(). Now, when invoking a partial() object,
the stored function, positional arguments, and keyword
arguments are preserved for the duration of the call in
case of reentrancy.
- gh-154470: Fixed a spurious ^J printed at the end of every
source line by the list command of pdb when the output
is colorized (for example when attaching to a running
process). The source line is now stripped before it is
colorized, like the where command already did.
- gh-73458: Fix logging.config.listen(): it left the caller
waiting for the ready event forever if the server could
not be started, for example if the port was invalid or
already in use. It now also binds to an IPv6 address if the
host has no IPv4 address, for example if localhost is only
aliased to ::1.
- gh-154460: Fix time.strftime() and
datetime.datetime.strftime() returning a wrong ISO 8601
week number (%V) on OpenBSD.
- gh-154467: Fixed pdb remote attaching (python -m pdb -p
PID) sending an empty prompt to the client instead of (Pdb)
when the target process has an interactive terminal.
- gh-153970: Calling str() on a subprocess.CalledProcessError
no longer raises TypeError when its returncode is not an
integer, such as None.
- gh-154435: Fix os.posix_fadvise() and os.posix_fallocate()
on DragonFly BSD: they raised OSError with a meaningless
error code, because these functions return -1 and set errno
there.
- gh-154399: Fix venv activation in a non-interactive csh:
activate.csh no longer fails when the prompt variable is
not set.
- gh-154389: Fix uuid.uuid1() on OpenBSD: it returned a
version 4 UUID, because uuid_create() generates random
UUIDs on this platform.
- gh-154335: The profiling.sampling profiler now respects
NO_COLOR, FORCE_COLOR, and PYTHON_COLORS and avoids colored
output when not writing to a terminal.
- gh-154324: Fix os.sendfile() on illumos: it no longer
reports a successful transfer when the underlying system
call failed without writing any data.
- gh-154307: Fix tempfile.TemporaryDirectory.cleanup() on
DragonFly BSD, where removing a file with the UF_NOUNLINK
flag failed with EISDIR instead of EPERM.
- gh-154291: Fix socket.has_dualstack_ipv6() to return
False on platforms such as DragonFly BSD where setting
IPV6_V6ONLY to 0 silently has no effect.
- gh-154283: On DragonFly BSD, threading.get_native_id() now
returns a value that is unique across processes, matching
the other platforms.
- gh-154258: Fix a crash in mmap.mmap.resize() on NetBSD when
growing a shared anonymous mapping. resize() now raises
ValueError in this case, as it already did on Linux.
- gh-131565: ctypes.util.dllist() now works on NetBSD. It
is implemented in the _ctypes extension module so that
dl_iterate_phdr() reports all loaded shared libraries: on
NetBSD it only reports the link-map group of the calling
object, which excluded them when called through ctypes.
- gh-154225: Fix os.openpty() on Solaris and illumos: it
no longer leaves the pseudo-terminal as the controlling
terminal of the calling process.
- gh-154227: Fix os.posix_openpt() on OpenBSD, where it
rejected the O_CLOEXEC flag.
- gh-139373: Fix asyncio.subprocess.Process.communicate()
losing already-read output when it is cancelled; the output
is now retained and returned by a subsequent communicate()
call. Patch by Kumar Aditya.
- gh-145030: Fix asyncio write pipe transports for named
FIFOs on macOS and Solaris. Unread data sitting in the FIFO
made the transport misinterpret a poll event as the reader
disconnecting, wrongly closing the transport.
- gh-154194: Fix the sampling profiler dropping entire
samples when a non-fatal read fails; frames now keep any
readable metadata, and long funcnames and filenames are
truncated instead. Patch by Maurycy Pawłowski-Wieroński.
- gh-154176: Fix a crash in locale.strxfrm() on DragonFly
BSD, whose wcsxfrm() does not support the zero size.
- gh-154836: Fix subprocess.Popen.wait() raising TypeError
(macOS and other BSDs) or OverflowError (Linux) for
very large timeout values such as float('inf'), a
3.15 regression in the new event-driven wait. Also
fix select.kqueue.control() masking OverflowError for
out-of-range timeouts as TypeError.
- gh-154146: Fix accuracy of math.acospi() for arguments
close to 1 on platforms that do not provide acospi() in
libm.
- gh-153005: concurrent.interpreters.Queue.get() and
concurrent.interpreters.Queue.put() now compute their
timeout deadline from time.monotonic() instead of the wall
clock, so adjusting the system clock during the call no
longer makes them over- or under-wait.
- gh-153772: isinstance() checks against collections.abc
classes such as Mapping no longer raise AttributeError when
the instance has no __class__. The abstract base class
machinery now falls back to the object’s type in that case,
matching the behaviour of the built-in isinstance().
- gh-154090: Record the profiling mode in Tachyon binary
profiles and reject differential comparisons whose known
modes do not match.
- gh-154086: Store per-thread sample counts in Tachyon
flamegraphs so filtering a thread updates frame widths and
totals.
- gh-154060: Store measured duration and sampling rate
in Tachyon binary profiles so they remain available in
replayed flamegraphs.
- gh-154085: Prevent differential flamegraphs from
duplicating self time across line nodes for the same
function.
- gh-154088: Make Tachyon count and render elided stacks
consistently in differential flamegraphs.
- gh-154089: Do not show unavailable sampling efficiency
statistics in replayed Tachyon flamegraphs.
- gh-154062: Stop normalizing differential flamegraph
baselines to the duration of the current profile.
- gh-154053: Fix compilation of the ssl
module against LibreSSL, which does not
provide SSL_CTX_set1_sigalgs_list() and
SSL_CTX_set1_client_sigalgs_list(). The
set_server_sigalgs() and set_client_sigalgs() methods of
ssl.SSLContext now raise NotImplementedError on LibreSSL.
- gh-154002: The pure-Python pickle unpickler no longer
replaces a TypeError raised by an old-style instance
constructor with a new one carrying the traceback object in
its args. The original error now propagates, as it already
did in the C implementation.
- gh-154001: Fix random.binomialvariate() raising
ZeroDivisionError when random.random() returns zero.
- gh-118150: Expose automated junk heuristic kwarg-only
flag autojunk from difflib.SequenceMatcher to the
public functions and class methods in the difflib. See
difflib.SequenceMatcher documentation for details and issue
gh-118150 for the motivation.
- gh-153967: argparse.ArgumentParser.print_usage() and
argparse.ArgumentParser.print_help() won’t silently fail
when an invalid file object is specified. Patch by Timothy
Poon.
- gh-153906: Modernize the HTML output of pydoc: use
semantic HTML5 markup and a new style sheet based on the
python-docs-theme used by docs.python.org, with dark mode
support. Class members inherited from other classes are now
collapsed by default.
- gh-153908: Fix data race when calling repr() on
itertools.count under the free-threaded build.
- gh-153896: Deduplicate unhashable args in typing.Literal.
- gh-153903: Add ctypes.util.wrap_dll_function() for creating
_CFuncPtr objects from a function signature.
- gh-81241: Fix OSError when importing ctypes from a
statically linked interpreter.
- gh-153864: On a wide curses build, curses.window.insch()
now inserts a non-ASCII byte as the character it encodes in
the window’s encoding, consistently with addch(), instead
of its code point.
- gh-153862: On a wide curses build, curses.window.inch() now
returns the locale-encoded byte of a non-ASCII character,
matching instr(), instead of the low byte of its code
point.
- gh-153856: Add os.RWF_NOSIGNAL constant for Linux 6.18+.
- gh-153844: symtable.symtable() now accepts an AST object,
like the builtin compile().
- gh-153838: Skip non-regular files in the profiling.sampling
heatmap exporter instead of reading them unconditionally.
Patch by tonghuaroot.
- gh-146011: Fix a heap-use-after-free in the C
implementation of decimal when calling repr() after
deleting the Context.
- gh-141276: Fix duplicate SyntaxWarning messages
when importing source modules from ZIP archives.
zipimport.zipimporter.get_filename(), and therefore
find_spec(), no longer compile source modules. A
SyntaxError in a zipped source module is now raised when
the module is executed rather than when it is found,
matching the behavior of filesystem-based loaders.
- gh-104533: Add ctypes.util.struct() and
ctypes.util.CFieldInfo for generating structure types using
annotations.
- gh-153761: Fix cancelling asyncio.loop.sock_accept()
dropping a pending connection.
- gh-153695: Hashing a sqlite3.Row that contains an
unhashable value now raises TypeError instead of
SystemError. Patch by tonghuaroot.
- gh-127049: Fix a race condition in asyncio on Unix where
asyncio.subprocess.Process.send_signal(), terminate()
or kill() could signal an unrelated process that was
recycled onto the PID of the already-reaped child when
ThreadedChildWatcher is used. Patch by Kumar Aditya.
- gh-83273: csv.Sniffer.sniff() now deduces the dialect
by trial parsing with the actual CSV parser instead of
heuristics based on matching isolated fragments and on
character frequencies. It can now detect the escapechar
parameter, accepts non-ASCII delimiters in the delimiters
argument, no longer misdetects the delimiter when the
sample contains delimiter characters inside quoted fields,
handles samples truncated at an arbitrary point, and no
longer takes quadratic time on quoted samples. A sample
consisting of a single column of quoted fields now raises
csv.Error instead of guessing a delimiter from the content
of the fields.
- gh-153658: Fix sqlite3.Connection.iterdump() raising
sqlite3.OperationalError when a table name contains a
single quote. Patch by tonghuaroot.
- gh-98078: Fix asyncio SSL transports not sending the fatal
TLS alert to the peer when the TLS handshake fails or when
receiving corrupted data, and not sending the close_notify
alert to the peer when the TLS shutdown fails. The peer
can now tell why the connection was dropped (for example,
certificate verification failure or no TLS version in
common) instead of seeing the connection abruptly closed.
- gh-85943: Fix struct functions raising BytesWarning under
the -bb command line option when a str format is used after
an equal bytes format (or vice versa). The internal format
cache no longer mixes str and bytes keys.
- gh-153603: Fix a crash in the ISO-2022 decoders when
decoding a byte after an unknown charset designation is set
via the decoder’s setstate method. Patch by tonghuaroot.
- gh-153539: Fix a crash in the C implementation of
io.TextIOWrapper.tell() when the decoder’s getstate method
triggers a reentrant seek, or when another thread seeks the
same stream concurrently. Patch by tonghuaroot.
- gh-153502: imaplib.IMAP4.copy(), move(), fetch(), store(),
search(), sort(), thread() and expunge() now accept a
keyword-only uid argument that selects the corresponding
UID command, as a more convenient alternative to uid().
- gh-153494: imaplib.IMAP4.search(), sort() and thread()
(and the corresponding uid commands) now encode str search
criteria to the declared charset, so international search
text can be passed as ordinary str. When charset is None
(as it must be under UTF8=ACCEPT), the criteria are sent
using the connection encoding instead. A criterion passed
as bytes is sent unchanged, for use with a charset that
Python has no codec for.
- gh-153513: Values of several Tcl object types returned by
tkinter are now converted to the corresponding Python type
instead of being wrapped in a _tkinter.Tcl_Obj: index,
window, nsName and parsedVarName objects to str, and pixel
screen distances with no unit suffix to int or float.
- gh-153404: urllib.robotparser.RobotFileParser now silently
ignores a Crawl-delay or Request-rate value written with
non-decimal digits (such as U+00B2 SUPERSCRIPT TWO) instead
of raising ValueError and aborting the parse of the whole
robots.txt file.
- gh-151292: Store the sample count in profiling.sampling
binary format, as a 64-bit integer, widening from
previously used 32-bit integer. This breaks the existing
recordings. Long or thread-heavy profiling sessions will
no longer fail because of OverflowError. Patch by Maurycy
Pawłowski-Wieroński.
- gh-152754: Fix a crash when the same os.scandir() iterator
is used concurrently from multiple threads. It no longer
releases the directory handle while another thread is
reading from it. Sharing an iterator between threads
remains subject to race conditions: which entries each
thread receives is unspecified.
- gh-153417: Error messages from imaplib.IMAP4.select() and
imaplib.IMAP4.uid() no longer raise BytesWarning under -bb
when the mailbox or command argument is bytes.
- gh-153422: winfo_exists(), winfo_ismapped() and
winfo_viewable() methods of tkinter widgets and
edit_modified() of tkinter.Text now return a bool instead
of an integer or, depending on wantobjects, a string.
- gh-49555: imaplib now encodes non-ASCII mailbox names as
modified UTF-7 (RFC 3501, section 5.1.3) in the default
mode, so international mailbox names can be passed as
ordinary str; under UTF8=ACCEPT they are sent as UTF-8
instead. A name that is not valid modified UTF-7, such as
one with a bare &, is now encoded correctly instead of
being sent as is. A str that is already valid modified
UTF-7, or a bytes object, is sent unchanged.
- gh-153395: curses.ascii predicates and the ctrl() and
unctrl() functions now accept a curses.complexchar. ctrl()
now returns a non-ASCII argument unchanged instead of
masking it to a control character.
- gh-153290: Fix a data race on the free-threaded build when
io.BytesIO.__setstate__() installs the instance dictionary
while another thread concurrently calls a method on the
same object.
- gh-153406: email.utils.parsedate_to_datetime() now raises
ValueError instead of OverflowError when the parsed year or
timezone offset is out of range, matching its documented
behavior.
- gh-152907: Restore cooked-mode terminal output flags around
PyOS_InputHook callbacks in the new REPL (_pyrepl), so that
output written by an input hook (for example a GUI toolkit
event loop) is no longer emitted with OPOST disabled and
keeps its carriage returns.
- gh-153364: Make frame, coroutine and task-waiter walks
iterative and bounded, avoiding potential hangs and
stack overflows. Fix asyncio task inspection when
awaited-by sets contain removed entries. Patch by Maurycy
Pawłowski-Wieroński.
- gh-153333: The readprofile method of tkinter.Tk now reads
the user’s profile scripts using the encoding declared in
the file, instead of the locale encoding.
- gh-153319: The turtledemo viewer now reads each demo script
as UTF-8 instead of the locale encoding.
- gh-153296: Fix a data race and use-after-free when
iterating over an io.StringIO object while it is being
concurrently mutated. The __next__ method now properly
acquires the object’s lock.
- gh-152936: os.chroot(), os.initgroups(), os.setegid(),
os.seteuid(), os.setgid(), os.setregid(), os.setresgid(),
os.setresuid(), os.setreuid(), os.setuid(), and
socket.sethostname() are now available on Android.
Calling them without sufficient privileges now raises
PermissionError instead of the functions being unavailable.
- gh-153083: Defer GC tracking of an array.array to the end
of its construction. Patch by Donghee Na.
- gh-153292: Fix data race in repr of threading.RLock in
free-threading build.
- gh-153291: Fix a data race in readline.get_completer() and
readline.get_pre_input_hook() on the free-threaded build:
the getters read the stored hook without the critical
section that the corresponding setters hold.
- gh-153293: Fix the live sampling profiler TUI keeping stale
aggregated opcode statistics after a stats reset.
- gh-143990: A tkinter.font.Font created from a named font,
including by copy(), now copies its configured options
rather than the options resolved by Tcl’s font actual,
preserving a size specified in pixels (a negative size).
- gh-148286: Fix undefined behavior in
compression.zstd.ZstdDecompressor.unused_data when a
complete frame was decompressed in a single call.
- gh-153210: Fix crash on array import under a memory
pressure.
- gh-153521: Add support for structured arguments in imaplib
command methods. A message_set and lists of flags or
other atoms can now be passed as sequences instead of
preformatted strings, and the search(), fetch(), sort(),
thread() and uid() methods accept a params keyword argument
that substitutes and quotes ? placeholders.
- gh-153256: Added the tk_print() method to tkinter.Canvas
and tkinter.Text which prints the contents of the widget
using the native print dialog. It requires Tk 8.7/9.0 or
newer.
- gh-153259: Added the tkinter.systray module which provides
the SysTrayIcon class as an interface to the system tray
icon and the notify() function which sends a desktop
notification. They require Tk 8.7/9.0 or newer.
- gh-72880: Added the tkinter.fontchooser module which
provides the FontChooser class as an interface to the
native font selection dialog.
- gh-153200: Fix math.isqrt() returning an incorrect result
for arguments not less than 2**64 that are instances of an
int subclass with an overridden comparison operator.
- gh-153158: Remove the erroneous width argument of
calendar.HTMLCalendar.formatmonthpage(), which could drop
the year from the heading.
- gh-66788: Add the utf-7-imap codec, implementing the
modified UTF-7 encoding used for international IMAP4
mailbox names (RFC 3501, section 5.1.3).
- gh-89869: Add imaplib.IMAP4.login_plain(), which
authenticates using the PLAIN SASL mechanism (RFC 4616).
Unlike login(), it supports non-ASCII user names and
passwords.
- gh-98092: Add imaplib.IMAP4.id(), a wrapper for the IMAP ID
command (RFC 2971).
- gh-153133: Fix a socket leak in
asyncio.loop.create_connection() when the transport cannot
be created.
- gh-153068: Fix cProfile.Profile.enable() to no longer
overwrite errors from sys.monitoring.
- gh-153062: Fix a crash when concurrently iterating an
itertools.tee() iterator on the free-threaded build.
- gh-153056: Fix string.Template raising a spurious
ValueError when the pattern attribute is a compiled regular
expression object, which the documentation allows. On the
free-threaded build this also occurred as a data race on
the first concurrent use.
- gh-59396: tkinter.scrolledtext.ScrolledText gained a
use_ttk parameter to use the themed tkinter.ttk frame and
scroll bar instead of the classic tkinter widgets.
- gh-143921: Narrow the control character check in imaplib
commands: only NUL, CR and LF are now rejected. Other
control characters are valid in quoted strings and can
occur in mailbox names returned by the server, so they are
now accepted and sent quoted.
- gh-153037: Fix ZstdFile raising AttributeError instead of
io.UnsupportedOperation when iterating over a file that is
not open for reading.
- gh-135661: Fix html.parser.HTMLParser: an abruptly closed
empty comment (<!--> or <!--->) no longer extends up to a
later --> in the same feed() call.
- gh-153009: Fix compilation of curses on platforms that
define the stdscr macro. Patch by Bénédikt Tran.
- gh-152851: Prevent a crash when allocation fails while
copying a BLAKE-2s/2b object. Patch by Bénédikt Tran.
- gh-127636: Fix tarfile.TarFile.extract() to accept archive
member names with a trailing forward slash, including those
returned by tarfile.TarFile.getnames(). Contributed by Xiao
Yuan.
- gh-54930: Error responses of
http.server.BaseHTTPRequestHandler to malformed request
lines now include a status line and headers instead of
being sent in the bare HTTP/0.9 style. Only a valid
HTTP/0.9 request (a two-word GET request line) now receives
an HTTP/0.9 style response.
- gh-152997: On platforms providing the C library’s iconv(3)
function, the codecs module now exposes every encoding
known to iconv for which Python has no built-in codec.
Such an encoding can be used by its name (for example
"cp1133") or, to force the iconv-based engine even when a
built-in codec exists, with an "iconv:" prefix (for example
"iconv:latin1").
- gh-119592: Fix concurrent.futures.ProcessPoolExecutor
stranding submitted work forever when a worker process
exited upon reaching its max_tasks_per_child limit after
shutdown() was called with wait=False: a replacement
worker is now spawned and the remaining work executed
as documented. If the executor has instead been garbage
collected without shutdown() (gh-152967), or a replacement
worker cannot be started, the remaining futures now fail
with BrokenProcessPool instead of never resolving. A worker
exit racing shutdown(wait=False) can also no longer crash
the executor management thread.
- gh-150579: concurrent.futures now uses lazy imports for its
executor submodules instead of a module __getattr__ hook.
- gh-152951: collections.deque prevent rare crash when
calling extend under high memory pressure conditions.
- gh-152912: sys.addaudithook() now correctly suppresses only
RuntimeError instead of all Exception subclasses when an
existing audit hook raises during hook registration. Patch
by Yeongu Kim.
- gh-150880: Normalize non-extended Windows paths before
appending the wildcard used by os.listdir() and
os.scandir(), making paths with trailing spaces behave
consistently with other filesystem APIs.
- gh-152068: Fixes a bug when a line was split (particularly
on macOS Terminal.app) in the middle of a colorized
keyword, causing the ANSI Color Reset sequence (ESC0m) to
not be properly printed, causing the output to be colored
when it shouldn’t
- gh-151292: Fix profiling.sampling --binary leaving
unreadable profile files when the binary format reaches
a size limit. Preserve collected samples when the
writer can still finalize safely. Patch by Maurycy
Pawłowski-Wieroński.
- gh-152849: Out-of-range float and integer timestamps
now raise OverflowError with the same message. Patch by
tonghuaroot.
- gh-152847: Reject a POSIX TZ transition rule with non-digit
characters in the day-of-year field in the pure-Python
zoneinfo parser. Patch by tonghuaroot.
- gh-152905: On glibc, locale.nl_langinfo() now decodes the
LC_TIME items (such as the month and day names) using the
wide locale data, so the result no longer depends on the
LC_CTYPE encoding.
- gh-152586: tempfile._TemporaryFileWrapper has been renamed
to the public tempfile.TemporaryFileWrapper. The old
private name is kept as a deprecated alias and will be
removed in Python 3.21.
- gh-152721: Fix quadratic replay time in the
profiling.sampling binary reader when a profile’s
run-length-encoded samples alternate thread status.
- gh-77508: Add imaplib.IMAP4.move(), a wrapper for the IMAP
MOVE command (RFC 6851), analogous to copy().
- gh-49680: Add the translate_line_endings parameter to
imaplib.IMAP4.append(). By default line endings in the
message are translated to CRLF, as before; passing False
sends the message literal exactly as given, preserving bare
CR or LF octets.
- gh-152718: Fix unbounded memory allocation in the
profiling.sampling binary profile reader when a file
declares more string or frame entries than it contains.
- gh-108280: Connecting imaplib to a server that does not
send a valid IMAP4 greeting (for example a POP3 server
answering on the IMAP port) now raises an error reporting
the server’s response instead of imaplib.IMAP4.error: None.
- gh-151126: Fix a crash caused by failing to set MemoryError
on allocation failure when passing ctypes.Structure
or ctypes.Union instances by value to ctypes foreign
functions.
- gh-63121: imaplib now refreshes the cached capability list
after a successful login() or authenticate(), using the
CAPABILITY response sent by the server or, if none was
sent, by querying it, so that capabilities that become
available only after authentication (such as ENABLE on
Gmail) are recognized. Capabilities advertised in the
server greeting are now also used, avoiding a redundant
CAPABILITY command.
- gh-88574: imaplib no longer fails when a server sends a
spurious blank line after the counted data of a literal,
including after a literal that terminates a response (such
as a mailbox name returned by LIST). Such blank lines are
now skipped without swallowing the following line.
- gh-152692: Fix annotationlib.type_repr() returning a string
such as None.list.append for bound built-in methods, whose
__module__ is None. It now returns the qualified name, as
it already did for other builtins.
- gh-152502: Detect the curses mouse interface (getmouse(),
has_mouse(), the BUTTON* constants, and others) and the
window is_* state-query methods with configure capability
probes or library macros instead of gating them on
ncurses-specific macros. They are now also available
with other curses implementations that provide them,
such as NetBSD curses and PDCurses (the latter underpins
windows-curses).
- gh-151842: Fix a crash in _interpreters.capture_exception()
when MemoryError happens. Patch by Amrutha Modela.
- gh-40038: imaplib now again quotes command arguments
when necessary, for example mailbox names containing a
space. Such quoting was inadvertently disabled when the
module was ported to Python 3, and the arguments are now
quoted according to the RFC 3501 grammar. For backward
compatibility, an argument already enclosed in double
quotes is left unchanged, so code that quotes arguments
itself keeps working.
- gh-50966: Fix unbounded recursion in turtle when a
mouse event handler that moves the turtle is reentered
while the screen is being redrawn, for example with
screen.ondrag(turtle.goto). This could previously crash the
interpreter.
- gh-152638: Deprecate tkinter.filedialog.askopenfiles().
Opening several files at once is error-prone
and the returned list cannot be used in a with
statement; iterate over the names returned by
tkinter.filedialog.askopenfilenames() and open them one by
one instead.
- gh-152587: In tkinter, the name parameter of the
wait_variable(), setvar() and getvar() methods and the
value parameter of setvar() are now required. Their former
default values ('PY_VAR' and '1') were not meaningful.
- gh-152569: Fix asyncio.wait() leaking waiting tasks via
the await-graph when racing a future that never resolves.
The waiting task is now discarded from every future’s
awaited_by set once wait() returns, even for pending
futures.
- gh-110357: Importing hashlib no longer logs an error
to stderr when a normally guaranteed hash algorithm
is unavailable in the current runtime (for example
under an OpenSSL FIPS configuration or a build using
- -without-builtin-hashlib-hashes). Code that actually uses
the missing algorithm still gets a clear ValueError.
- gh-152503: Fix curses.window.in_wch(),
curses.window.in_wchstr() and curses.window.getbkgrnd()
returning garbage text when curses is built against a
curses library that does not NUL-terminate the cchar_t text
array (such as NetBSD curses).
- gh-152356: Fix a hang in profiling.sampling run --blocking
on Windows when the target process exits. The profiler now
finalizes binary profiles instead of continuing to sample
the exited process.
- gh-152470: The wide-character curses functions and methods
curses.window.get_wch(), curses.window.get_wstr(),
curses.unget_wch(), curses.erasewchar(), curses.killwchar()
and curses.wunctrl() now also work when Python is not
built against a wide-character-aware curses library, on
an 8-bit locale, where each character is a single byte in
the relevant encoding. curses.ungetch() now also accepts
a one-character string, like curses.unget_wch(); on a
wide-character build it can be any character (previously a
multibyte character raised OverflowError).
- gh-78335: Update the docstrings of tkinter and
tkinter.ttk widget classes to list all supported widget
options, including options added in Tk 9.0 and 9.1.
tkinter.Menubutton and tkinter.Message previously had no
option list at all.
- gh-152431: Fix asyncio.StreamWriter.start_tls() to keep the
linked StreamReader transport in sync with the upgraded
transport.
- gh-103878: The tkinter.filedialog functions that return
a filename (askopenfilename(), asksaveasfilename() and
askdirectory()) now consistently return an empty string
when the dialog is cancelled, instead of an empty tuple or
b'' on some platforms. askopenfilenames() likewise always
returns an empty tuple, and askopenfiles() an empty list.
- gh-151126: Fix two crashes in tkinter and socket modules
initialization under a memory pressure. Sets missing
MemoryError.
- gh-133031: curses.textpad.Textbox now supports entering and
reading back the full Unicode range, including combining
characters, when curses is built with wide-character
support.
- gh-133031: curses.textpad.Textbox now enters and reads
back the non-ASCII characters of an 8-bit locale encoding,
instead of mangling them with a 7-bit mask.
- gh-43699: The drag cursor in tkinter.dnd is now changed
only once the pointer starts moving rather than on the
initial button press, so that a plain click no longer
flashes it.
- gh-50409: Deprecate the tagOrId parameter of
tkinter.PanedWindow.paneconfigure() (and its paneconfig()
alias) in favor of child, for consistency with the other
pane methods; it will be removed in Python 3.18.
- gh-152409: Fix the trace command-line tool not saving
the --file counts when --no-report is used, which
prevented accumulating counts over several runs. Patch by
tonghuaroot.
- gh-71880: curses.textpad.Textbox now lets the lower-right
cell of the window be edited. Writing it with addch()
would move the cursor past the end of the window, raising
an error and scrolling a scrollable window, so it is now
written with insch(), which keeps the cursor in place.
- gh-152334: Add the curses.define_key(),
curses.key_defined() and curses.keyok() key-management
functions.
- gh-152332: Add the curses.term_attrs() function, the
counterpart of curses.termattrs() for the WA_* attributes.
- gh-87904: The curses types and exceptions now report
their public module in __module__, repr() and help() –
for example curses.window instead of _curses.window and
curses.panel.error instead of _curses_panel.error.
- gh-152325: Add the curses.has_mouse() function and the
curses.window.mouse_trafo() method.
- gh-121249: Deprecate using 'F' and 'D' type codes in the
struct module.
- gh-152275: The curses module now raises OverflowError
instead of silently truncating an out-of-range value:
curses.color_pair() rejects a color pair number that does
not fit in the chtype color field, and the attr argument
of the character-cell and attribute methods (addch(),
addstr(), attron(), attrset() and others) is checked
against the chtype range.
- gh-83274: Deallocating a tkinter application from a thread
other than the one it was created in no longer crashes
the interpreter. The underlying Tcl interpreter is leaked
instead, and a RuntimeWarning is reported.
- gh-81954: Deleting a writable, open zipfile.ZipFile now
emits a ResourceWarning. Use as a context manager or call
close() explicitly.
- gh-152305: Fix the pure-Python datetime.time.strftime()
implementation raising AttributeError for the year
directives. Patch by tonghuaroot.
- gh-88758: tkinter.Misc.focus_get(), focus_displayof(),
focus_lastfor() and winfo_containing() now return None
instead of raising KeyError when the widget was not created
by tkinter (for example a torn-off menu).
- gh-152260: Add the curses functions scr_dump(),
scr_restore(), scr_init() and scr_set(), which dump the
whole screen to a file and restore it.
- gh-38464: tkinter.Misc.nametowidget() now resolves the
auto-generated names of cloned menus (a menu used as a
menubar or a cascade) back to the original widget.
- gh-152263: Add the soft-label-key functions to the curses
module: slk_init(), slk_set(), slk_label(), slk_refresh(),
slk_noutrefresh(), slk_clear(), slk_restore(), slk_touch(),
slk_attron(), slk_attroff(), slk_attrset(), slk_attr(),
slk_attr_on(), slk_attr_off(), slk_attr_set() and
slk_color().
- gh-116946: The internal _tkinter tkapp and tktimertoken
types now implement the garbage collector protocol, so
reference cycles involving a Tcl interpreter or a timer
handler can be collected.
- gh-152258: Add the curses window method dupwin(), which
returns a new window that is an independent duplicate of an
existing one.
- gh-152248: Make the C and pure-Python zoneinfo parsers
validate POSIX TZ abbreviations consistently, rejecting
unquoted abbreviations with non-letter characters and empty
quoted abbreviations. Patch by tonghuaroot.
- gh-80937: Fix a memory leak in tkinter when a Tcl command
created with createcommand was not explicitly removed
before the interpreter was deleted. The command no longer
keeps the interpreter alive through a reference cycle.
- gh-111330: Update pure-Python io.BytesIO to close cleanly
when the data has an export such as a memoryview.
- gh-152246: Fix the pure-Python zoneinfo parser accepting
an invalid POSIX TZ transition rule with a non-period
separator. Patch by tonghuaroot.
- gh-152233: Add the curses.complexstr type, an immutable
string of styled character cells (the counterpart of
curses.complexchar), and the curses window method
in_wchstr() that returns one. The string-cell methods
addstr(), addnstr(), insstr() and insnstr() now also accept
a complexstr. Like curses.complexchar, it works whether or
not Python was built against a wide-character-aware curses
library.
- gh-152233: Add the curses.complexchar type, representing a
styled character cell (text, attributes and color pair),
and the curses window methods in_wch() and getbkgrnd()
that return one. The character-cell methods (addch(),
bkgd(), border(), hline() and others) now also accept a
complexchar. This works whether or not Python was built
against a wide-character-aware curses library; on a narrow
build a cell holds a single character representable as one
byte in the window’s encoding.
- gh-152099: asyncio’s loop.sendfile(..., fallback=False)
now consistently raises asyncio.SendfileNotAvailableError
for fallback-only transports, such as SSL/TLS transports,
when native sendfile cannot be used. Previously, this case
raised RuntimeError.
- gh-151496: Fixed profiling.sampling --gecko with
- -async-aware by flattening async task stacks before
generating Gecko samples. --binary now rejects
- -async-aware until the binary format supports async task
data.
- gh-152219: Add the curses window methods attr_get(),
attr_set(), attr_on(), attr_off() and color_set(), which
use a separate color pair argument instead of packing
it into the attribute value, and the corresponding WA_*
attribute constants.
- gh-139816: Fix a hang in tkinter on interactive Python
built without readline. An exception raised in a callback
no longer causes the event loop to stop and wait for the
user to press Enter; pending callbacks now keep running
until input is actually available on stdin.
- gh-139145: Fix a busy loop in tkinter on interactive
Python. When a Tcl command running its own event loop (such
as vwait or wait_variable()) was active and input arrived
on stdin, the event loop kept spinning at 100% CPU. The
stdin file handler is now removed as soon as input is
available. Based on a patch by Michiel de Hoon.
- gh-152204: Fix the pure-Python implementations
of datetime.date.fromisoformat(),
datetime.time.fromisoformat() and
datetime.datetime.fromisoformat() silently accepting some
malformed ISO 8601 strings, such as non-ASCII digits or
a sign in a fixed-width field (for example '2020+12' or
'20201212T0102٣٤'). Each field is now required to be
exactly N ASCII digits, matching the C implementation.
- gh-152212: Fix the pure-Python zoneinfo parser accepting a
POSIX TZ string with a std abbreviation but no offset. This
is invalid per POSIX and now raises ValueError, matching
the C accelerator. Patch by tonghuaroot.
- gh-152156: Fix a possible crash in
concurrent.interpreters.create() under limited memory
conditions.
- gh-152157: The C implementations of fromisoformat() and
fromisoformat() now reject a decimal separator that is
not followed by any fractional digit before a timezone
designator.
- gh-151763: Fix crash in _interpqueues.create() whe
MemoryError happens on queue creation.
- gh-151669: On Windows, when populating tar archives from
filesystem content, to conform to the tar format standard,
backslashes in symlink targets are be replaced by slashes.
- gh-105895: Add match and case to the list of supported
topics by help().
- gh-151378: Fix a bug in the binary collector in
Tachyon that caused unbounded memory growth while
profiling a thread that stayed asleep. Patch by Maurycy
Pawłowski-Wieroński.
- gh-152074: Increase the buffer size to 256 KiB in
asyncio.loop.sendfile() method fallback.
- gh-152100: Support set operations and nested sets in
regular expression character classes, as described in
Unicode Technical Standard #18: set difference ([A--B]),
intersection ([A&&B]) and union ([A||B]).
- gh-152079: Fix datetime.datetime.fromisoformat() in the C
implementation dropping the sub-second part of a UTC offset
whose whole-second part is zero, matching the pure-Python
implementation.
- gh-152052: The json C accelerator now correctly reports an
unterminated string for a \uXXXX escape at the end of the
input.
- gh-152060: Fix datetime.datetime.fromisoformat() raising
AssertionError instead of ValueError for some malformed
strings in the pure-Python implementation, matching the C
implementation.
- gh-152056: Optimize matching of a character set that
contains a single character category, such as [\d] or
[^\s]: it is now compiled to a single CATEGORY opcode,
the same as the corresponding \d or \S escape, instead of
being wrapped in an IN block. This speeds up matching and
reduces the size of the compiled byte code. Patch by Pieter
Eendebak.
- gh-152033: Optimize matching of character class escapes
(\d, \D, \s, \S, \w and \W) that occur outside a character
set: they are now compiled to a single CATEGORY opcode
instead of being wrapped in an IN block. This speeds up
patterns such as \d+ and reduces the size of the compiled
byte code.
- gh-143990: tkinter.font.Font can now wrap a font
description without creating a new named font, by passing
it as font with exists=True and no name. This avoids a loss
of precision in actual(), measure() and metrics(). Keyword
options now override the corresponding settings of the
given font instead of being ignored.
- gh-127802: The deprecated tkinter.Variable methods
trace_variable(), trace(), trace_vdelete() and
trace_vinfo() are now scheduled for removal in Python 3.17.
- gh-126219: Fixed a crash in tkinter.Tk when className
contains a non-BMP character and tkinter is built against
Tcl/Tk 8.x. Such a name is now rejected with a ValueError.
- gh-101284: tkinter.OptionMenu now accepts arbitrary
tkinter.Menubutton options as keyword arguments and uses
them to override its default appearance.
- gh-143070: Automatically generated tkinter widget names now
start with "+" instead of "!", so that they can be used as
tags in the tkinter.Canvas and tkinter.Text widgets.
- gh-151955: Allow more types to be used in the bound
argument to typing.ParamSpec and typing.TypeVarTuple.
- gh-151920: Add the ttk.Style.theme_styles method, wrapping
the Tk ttk::style theme styles subcommand, which returns
the list of styles defined in a theme.
- gh-95555: Regular expressions now support Unicode property
escapes \p{...} and \P{...} for properties that the
engine can resolve without the unicodedata database: many
General_Category values, a number of binary properties, the
POSIX compatibility classes, and properties derivable from
the code point.
- gh-151910: Added tkinter.ttk.Treeview methods wrapping the
enhanced ttk::treeview widget commands added in Tk 9.1 (and
the detached query added in Tk 9.0): item navigation and
queries, opening, hiding, sorting and searching of items,
and cell focus, selection and tagging. The expand() and
collapse() methods (without recursion) also work on Tk
older than 9.1.
- gh-151890: Add the format parameter to the
tkinter.PhotoImage.put() method, the metadata parameter
to the put(), read(), write() and data() methods, and the
withalpha parameter to the get() method. The metadata and
withalpha parameters require Tcl/Tk 9.0 or newer.
- gh-151888: Add the tkinter.PhotoImage.redither() method,
wrapping the photo image redither Tk command.
- gh-151886: Add the tkinter.Misc.tk_appname(),
tkinter.Misc.tk_useinputmethods() and
tkinter.Misc.tk_caret() methods, wrapping the tk appname,
tk useinputmethods and tk caret Tk commands.
- gh-151881: Add the tkinter.Menu.postcascade()
method and the tkinter.Misc.tk_scaling() and
tkinter.Misc.tk_inactive() methods, wrapping the
postcascade, tk scaling and tk inactive Tk commands.
- gh-151878: Add the validate() method to the tkinter.Entry
and tkinter.Spinbox widgets, forcing an evaluation of the
validation command.
- gh-151876: Add the tkinter.Canvas methods rchars() and
rotate(), wrapping the rchars and rotate Tk canvas
commands.
- gh-151874: Add the tkinter methods Misc.winfo_isdark(),
Wm.wm_iconbadge() and Wm.wm_stackorder(), wrapping the
winfo isdark, wm iconbadge and wm stackorder Tk commands.
- gh-59396: The tkinter.filedialog.FileDialog dialog
and its tkinter.filedialog.LoadFileDialog and
tkinter.filedialog.SaveFileDialog subclasses, which follow
the layout of the classic Motif file selection dialog, were
modernized to match its look and feel more closely. They
are now built from the themed tkinter.ttk widgets instead
of the classic tkinter widgets, and gained a use_ttk
parameter that selects between the classic Tk widgets and
the themed ttk widgets. The buttons and field labels gained
Alt key accelerators, the default ring follows the keyboard
focus, and the Escape key cancels the dialog. The directory
and file lists gained a horizontal scrollbar and type-ahead
selection. The dialog is now centered over its parent, and
the overwrite confirmation of SaveFileDialog uses a themed
message box.
- gh-86165: Fix imaplib.Time2Internaldate() to use the local
timezone offset for time.struct_time values with tm_gmtoff
set to None, as returned by datetime.datetime.timetuple().
Contributed by Xiao Yuan.
- gh-151822: Colorize exit, quit, copyright, help, and clear
as commands in the REPL when typed alone on a line. Patch
by Bartosz Sławecki.
- gh-59396: The tkinter.simpledialog dialogs were modernized
to match the look and feel of the native Tk dialogs.
tkinter.simpledialog.SimpleDialog and the askinteger(),
askfloat() and askstring() dialogs are now built from the
themed tkinter.ttk widgets instead of the classic tkinter
widgets; the tkinter.simpledialog.Dialog base class still
defaults to the classic widgets for compatibility. Both
Dialog and SimpleDialog gained a use_ttk parameter that
selects between the classic Tk widgets and the themed
ttk widgets. SimpleDialog also gained bitmap and detail
parameters, draws the standard icons with themed images in
the ttk version, and accepts mappings of button options as
buttons entries, where an underline option adds an Alt key
accelerator. The font and wrap length of the message and
the detail message are taken from the Tk option database
and can be overridden by the application. The dialogs also
follow the keyboard conventions of the Tk message box: the
default ring follows the keyboard focus, the Return key
activates the focused button, and the Dialog OK and Cancel
buttons gained Alt key accelerators. Several bugs were also
fixed.
- gh-151814: Fix unbounded memory growth in io.TextIOWrapper
when repeatedly writing an empty string.
- gh-133998: Fix tarfile.open() in streaming write mode
(w|gz) raising struct.error when given an mtime outside
the range of the gzip header’s 32-bit timestamp field.
Out-of-range values are now stored as 0, matching gzip.
- gh-75666: Fix a reference leak in tkinter: the Tcl commands
created for event callbacks are now deleted when a binding
is replaced or unbound.
- gh-151770: Fix datetime.datetime.fromisoformat() raising
AssertionError instead of ValueError for an out-of-range
month combined with a 24:00 time.
- gh-151776: Add curses functions and window methods that
report state which could previously only be set: the
window methods is_cleared(), is_idcok(), is_idlok(),
is_immedok(), is_keypad(), is_leaveok(), is_nodelay(),
is_notimeout(), is_pad(), is_scrollok(), is_subwin(),
is_syncok(), getdelay(), getparent() and getscrreg(),
and the functions curses.is_cbreak(), curses.is_echo(),
curses.is_nl() and curses.is_raw(). They are only available
when built against an ncurses with NCURSES_EXT_FUNCS.
- gh-151774: Add the curses functions curses.alloc_pair(),
curses.find_pair(), curses.free_pair() and
curses.reset_color_pairs() for dynamic color-pair
management. They are only available when Python is built
against a wide-character version of the underlying curses
library with extended-color support.
- gh-151757: The curses character-cell window methods
now accept a full character cell – a spacing character
optionally followed by combining characters – in
addition to a single integer or byte character. Add the
wide-character read methods curses.window.get_wstr()
and curses.window.in_wstr(), and the functions
curses.erasewchar(), curses.killwchar() and
curses.wunctrl(). On a narrow (non-ncursesw) build the
character cell holds a single character without combining
marks, representable as one byte in the window’s encoding,
and curses.window.in_wstr() returns its decoded text.
- gh-151744: Add curses.nofilter(), which undoes the effect
of curses.filter().
- gh-90092: Add support for multiple terminals to the
curses module: the new functions curses.newterm(),
curses.set_term() and curses.new_prescr(), the
corresponding screen object, and the curses.window.use()
method.
- gh-151675: Add the sync() and pendingsync() methods
of tkinter.Text, wrapping the Tk sync and pendingsync
subcommands.
- gh-151674: Add the edit_canundo() and edit_canredo()
methods of tkinter.Text, wrapping the Tk edit canundo and
edit canredo subcommands.
- gh-151627: Fix a crash in collections.OrderedDict iterators
in free-threaded builds when the dictionary is concurrently
cleared or updated.
- gh-151695: Fix a use-after-free in the curses module. The
encoding of the initial screen, used by curses.unctrl() and
curses.ungetch() to encode non-ASCII characters, is now
kept as a private copy instead of a borrowed pointer to a
window object that may be deallocated.
- gh-151596: Add missing size positional argument to the
pure-Python implementation of io.TextIOBase.readline().
- gh-151640: Fix a data race in io.BytesIO in free-threaded
builds when whole-buffer reads or peeks, or getvalue(),
share the internal buffer with concurrent writes.
- gh-151615: Fix asyncio servers repeatedly logging and
rescheduling on a single event loop iteration when accept()
fails with a resource errors.
- gh-151613: Fix another way the Tachyon profiler frame
cache could produce impossible mixed stack traces when
_PyInterpreterFrame addresses are reused, by validating
cached frame anchors with a sequence counter.
- gh-148660: Fix a crash in collections.OrderedDict.copy()
when a key’s __eq__ or a subclass method mutates the dict
during the copy. Now raises RuntimeError instead, as
iteration does.
- gh-151497: Opening a tarfile archive no longer attempts
to pre-allocate a huge buffer when a crafted or truncated
member claims an oversized extended header (a GNU long
name/link or a pax header). The extended header is now read
in bounded chunks, so its size field can no longer trigger
memory exhaustion.
- gh-151485: Fix command quoting in
subprocess.CalledProcessError. Contributed by Benjy Wiener.
- gh-151436: Fix skewed stack traces in the Tachyon profiler
when caching is enabled and when generators and coroutines
are profiled, by updating tstate->last_profiled_frame
at every frame-removal site. The issue resulted in
total erasure of some callers. Patch by Maurycy
Pawłowski-Wieroński.
- gh-151426: Fix impossible stack traces (callers and callees
cross called, orphans and incorrect lines) in the Tachyon
profiler when caching frames, by snapshotting the stack
chunks before walking the frame chain on a cache miss.
Patch by Maurycy Pawłowski-Wieroński.
- gh-151403: Fixed a crash in subprocess.Popen (and
_posixsubprocess.fork_exec) when an argv item’s
__fspath__() concurrently mutates the args sequence being
converted.
- gh-151390: Colorize match in the REPL when followed by a
unary + or - operator. Patch by Bartosz Sławecki.
- gh-151128: Cross-language keyword suggestions are now shown
for SyntaxError messages. For example, switch x: suggests
match, delete x suggests del, function f(): suggests def.
Contributed by Zang Langyan.
- gh-151126: Fix crash on unset MemoryError on allocation
failure in ctypes.get_errno().
- gh-151416: Fix a crash in os.spawnv() and os.spawnve() when
an argv item’s __fspath__() method mutates the argv list
during argument conversion. os.spawnv() argument conversion
errors other than TypeError, such as the ValueError for
an embedded null, are no longer replaced with a generic
TypeError.
- gh-151337: Avoid possible memory leak in tkinter.c on
Windows.
- gh-150285: pydoc now uses all available space (80 columns)
for formatting reprs of module and class data, but ensure
that they do not overflow.
- gh-151126: Fix a crash when MemoryError in
os._path_splitroot() was not set properly.
- gh-149671: Restore compatibility with setuptools -nspkg.pth
files in the site module. Inject sitedir variable in the
frame which executes pth code. Patch by Victor Stinner.
- gh-119710: Fix asyncio subprocess wait() hanging when the
process has exited but one of its pipes is kept open by an
inherited child process (so the pipe never reaches EOF).
wait() now returns as soon as the process exits, regardless
of the pipes’ state.
- gh-151295: Fixed a crash (use-after-free) in bytes.join()
and bytearray.join() that could occur if an item’s
__buffer__() concurrently mutates the sequence being
joined. The mutation is now reported as a RuntimeError
instead.
- gh-109940: Fix Windows venv activation in cmd.exe to
respect VIRTUAL_ENV_DISABLE_PROMPT.
- gh-117807: Fix mimetypes initialization from MIME map files
containing invalid UTF-8 bytes.
- gh-151179: Fix a pidfd leak in _PidfdChildWatcher on
Linux: the watcher no longer leaks the process file
descriptor when waitpid() fails with an error other than
ChildProcessError.
- gh-80384: weakref.ref() and weakref.proxy() now raise
TypeError if the callback argument is not callable or None.
- gh-150771: Fix email messages created with shift_jis or
euc-jp charsets. set_content() now stores the payload using
the output charset (iso-2022-jp) so printing the message no
longer raises UnicodeEncodeError.
- gh-150285: pydoc now wraps long single-line summary in text
output.
- gh-151049: ipaddress: fix is_global and is_private for
the 2001:1::3/128 (DNS-SD Service Registration Protocol
Anycast) address, which IANA registered as globally
reachable per RFC 9665. It is now correctly reported with
is_global True and is_private False.
- gh-151039: Fix a crash when static datetime types outlive
the _datetime module.
- gh-151042: Fixed venv exporting mixed path styles to PATH
on Windows inside fish (via Cygwin, MinGW or MSYS2)
- gh-151021: Fix mmap.mmap.find() and rfind() to return
- 1 when searching for an empty subsequence with a start
position past the end of the mapping.
- gh-151022: Fix _remote_debugging stack traces for code
objects with large line tables.
- gh-150994: Make the type annotations in the private
_colorize module resolvable.
- gh-143768: venv: Replace a dangling interpreter symlink
in an existing virtual environment instead of failing or
silently leaving it broken. Fix by Clay Dugo.
- gh-62825: Encodings “KS_C_5601-1987”, “KS X 1001”, etc are
now aliases of “CP949” instead of “EUC-KR”.
- gh-150913: Fix sqlite3.Blob slice assignment to raise
TypeError and IndexError for type and size mismatches
respectively, even when the target slice is empty.
- gh-140006: The venv activate.fish script now calls fish
builtins through builtin so a user function that shadows
./source, echo, printf, set_color, or functions can no
longer hijack the virtual environment prompt or break
exit-status reporting.
- gh-143008: Fix race conditions when re-initializing a
io.TextIOWrapper object.
- gh-150889: Speed up unicodedata.normalize() for the NFC and
NFKC forms of non-ASCII text up to a factor 2.
- gh-150898: Unconditionally assume
ssl.SSLContext.keylog_filename exists.
- gh-150886: Remove the private, undocumented function
importlib._bootstrap._object_name(). It had no caller after
load_module() and its deprecation warnings were removed
from importlib.
- gh-150583: Correctly set the default compression level in
compression.zstd when passing a digested dictionary during
compression.
- gh-150866: Fix asyncio.loop.shutdown_asyncgens() to report
any BaseException raised during asynchronous generator
cleanup.
- gh-150662: Fix the --gecko collector in profiling.sampling
that kept every sample in memory. It now writes sample
and marker data to temporary files and reads them back,
ultimately building the output file at the end. Patch by
Pablo Galindo and Maurycy Pawłowski-Wieroński.
- gh-150820: Speed up json.dumps() for small documents. Patch
by Bernát Gábor.
- gh-150818: Speed up logging.getLogger() with a lock-free
fast path that returns an already-registered logger without
acquiring the logging lock. Patch by Bernát Gábor.
- gh-150817: Speed up the |, & and ^ operations on enum.Flag
members. Patch by Bernát Gábor.
- gh-150750: Fix a race condition in
collections.deque.index() with free-threading.
- gh-150751: http.client now validates the Content-Length
header and the chunked chunk-size against the RFC 9112
grammar (1*DIGIT and 1*HEXDIG) before parsing them,
rejecting values such as +5, 5_0 or a 0x-prefixed or
negative chunk size that int() would otherwise accept. This
avoids framing a response differently from a strict peer.
- gh-150717: Avoid an unnecessary per-call memory allocation
when matching re patterns that have no capturing groups.
Patch by Bernát Gábor.
- gh-150685: Update bundled pip to 26.1.2
- gh-150641: Fix bug where typing.evaluate_forward_ref() with
the STRING format could leak internal names used by the
annotation machinery.
- gh-150942: Speed up re.findall(), re.sub() and re.subn()
by appending result items to the output list without an
extra reference-count round-trip (using the internal
reference-stealing list append helper).
- gh-150942: Speed up json.loads() decoding of arrays and
objects by storing parsed values into the result list/dict
without an extra reference-count round-trip (using the
internal reference-stealing append/insert helpers).
- gh-117404: Add a number of constants in modules zlib, bz2,
lzma, and compression.zstd, which provide information
about the version of libraries that were used for
building the module and that are actually loaded. Make
compression.zstd.zstd_version_info a named tuple.
- gh-150478: Add show_jit option to dis.dis to show JIT entry
points in the bytecode. This is useful for visualizing
where JIT traces are entered from the interpreter.
- gh-148932: Fix profiling.sampling on Windows virtual
environments to resolve the actual Python PID from a
virtual environment shim.
- gh-150534: Added trigonometric functions that work
in units of half turns, rather than radians. The new
functions math.acospi(), math.asinpi(), math.atanpi(), and
math.atan2pi() return half-turn angles. The new functions
math.cospi(), math.sinpi(), and math.tanpi() take half-turn
angle arguments. These functions are recommended by IEEE
754-2019 and standardized in C23.
- gh-150228: The new site.StartupState class lets callers
batch-process PEP 829 startup configuration files across
multiple site directories before any startup code
runs, with public addsitedir(), addusersitepackages(),
addsitepackages(), and process() methods. The signature
of site.addsitedir() is unchanged from Python 3.14.
The defer_processing_start_files argument and the
process_startup_files() function added earlier in the 3.15
cycle have been removed; use site.StartupState instead.
- gh-150479: email.utils.formataddr() now raises ValueError
when the name or address contains a carriage return or line
feed, matching email.headerregistry.Address. This check can
be disabled by passing strict=False.
- gh-150449: sqlite3.Blob now supports negative-step slices
for reading and writing (e.g. blob[9:0:-2]). Previously,
such slices would raise SystemError or ValueError.
- gh-150406: Fix a possible crash occurring during socket
module initialization when the system is out of memory on
platforms without a reentrant gethostbyname.
- gh-150372: readline: Fix a potential crash during tab
completion caused by an out-of-memory error during module
initialization.
- gh-132372: Speed up logging.config.fileConfig() and
logging.config.dictConfig() when handling many existing
loggers.
- gh-150157: Fix a crash in free-threaded builds that
occurs when pickling by name objects without a __module__
attribute while sys.modules is concurrently being modified.
- gh-150175: Fix race condition in
unittest.mock.ThreadingMock where concurrent calls could
lose increments to call_count and other attributes due to a
missing lock in _increment_mock_call.
- gh-145856: Fix plistlib.dumps() and plistlib.dump() so
that skipkeys=True together with sort_keys=True correctly
drops non-string keys when the dictionary contains a mix of
string and non-string keys. Previously the sort ran before
the filter and raised TypeError.
- gh-84353: Preserve non-UTF-8 encoded filenames when
appending to a zipfile.ZipFile. Previously, non-ASCII names
stored in a legacy encoding (without the UTF-8 flag bit
set) could be corrupted when the central directory was
rewritten: they were decoded as cp437 and then re-stored as
UTF-8.
- gh-150077: Fix tarfile.TarFile.zstopen to close the
underlying zstd file object when opening the tar archive
is interrupted by a BaseException subclass such as
KeyboardInterrupt.
- gh-149980: Fix tarfile so that GNU long-name directory
entries have all trailing slashes stripped from their
names, matching the behavior for short-name entries.
Previously, only a single trailing slash was removed.
- gh-127949: Remove the deprecated asyncio event loop policy
system. Patch by Kumar Aditya.
- gh-149816: Fix race condition in
ssl.SSLContext.sni_callback
- gh-149189: Revert the changes to pprint defaults. Patch by
Hugo van Kemenade.
- gh-79413: Update dataclasses.make_dataclass() to add a
qualname parameter. The qualname parameter will be used to
set the __qualname__ of the created dataclass.
- gh-149816: Fix a potential use after free condition in
pickle.dumps() in free-threaded mode when serializing
lists.
- gh-149995: Update various docstrings in typing.
- gh-88726: The email package now uses standard MIME charset
names “gb2312” and “big5” instead of non-standard names
“eucgb2312_cn” and “big5_tw”.
- gh-53144: The email package now supports all aliases
of Python codecs and uses MIME/IANA names for all IANA
registered charsets.
- gh-149571: Fix the C implementation of
xml.etree.ElementTree.Element.itertext(): it no longer
emits text for comments and processing instructions.
- gh-146406: Add cross-language hints for .clear() on
tuple, frozenset, and frozendict, suggesting the mutable
counterpart. Follow-up to gh-146406.
- gh-149921: Fix reference leaks in error paths of the
_interpchannels and _interpqueues extension modules.
- gh-149891: Add support for more encoding aliases officially
registered in IANA.
- gh-142349: Add lazy to the list of support topic by help().
- gh-149819: Fix regression in site.addsitedir() where .pth
files were no longer processed in Python subprocesses.
This happened because site.main() seeded known_paths
with entries inherited from the parent process, causing
addsitedir to skip .pth processing.
- gh-62259: Add support for multiple multi-byte encodings
in the XML parser: “cp932”, “cp949”, “cp950”,
“Big5”,”EUC-JP”, “GB2312”, “GBK”, “johab”, and
“Shift_JIS”. Add partial support (only BMP characters)
for multi-byte encodings “Big5-HKSCS”, “EUC_JIS-2004”,
“EUC_JISX0213”, “Shift_JIS-2004”, “Shift_JISX0213”,
“utf-8-sig” and non-standard aliases like “UTF8” (without
hyphen). The parser now raises ValueError for known
unsupported multi-byte encodings such us “ISO-2022-JP”
or “raw-unicode-escape” instead of failing later, when
encounter non-ASCII data.
- gh-149816: Fix a race condition in _random.Random.__init__
method in free-threading mode.
- gh-149801: Add IANA registered names and aliases with
leading zeros before number (like IBM00858, CP00858,
IBM01140, CP01140) for corresponding codecs.
- gh-149473: Calling os.environ.clear() now emits
os._clearenv auditing event. Patch by Victor Stinner.
- gh-149720: Remove support for undotted ext in
mimetypes.MimeTypes.add_type().
- gh-149718: Coalesce consecutive identical stack frames in
Tachyon, so aggregating collectors (pstats, collapsed,
flamegraph, gecko) receive one collect. Improves sample
rate 3x, error rate and missed rate drop by 70%. Patch by
Maurycy Pawłowski-Wieroński.
- gh-149701: Fix bad return code from Lib/venv/bin/activate
if hashing is disabled
- gh-149504: Fix site.addsitedir() to allow re-entrant
calls from within startup files. Previously, a .pth file
containing an import line that called site.addsitedir()
(or a .start entry point doing the same) could crash with
RuntimeError: dictionary changed size during iteration
during site initialization, breaking tools such as uv run
- -with.
- gh-149584: Fix excessive overhead in the Tachyon profiler
when inspecting a remote process by avoiding repeated
remote page-cache scans, batching predicted remote reads,
and reusing cached profiler result objects. Patch by Pablo
Galindo and Maurycy Pawłowski-Wieroński.
- gh-149609: Raise DeprecationWarning on using
abc.abstractclassmethod, abc.abstractstaticmethod, and
abc.abstractproperty, schedule its removal for Python 3.21.
- gh-149634: Remove deprecated and unused
tarfile.TarInfo.tarfile attribute.
- gh-149578: Fix tarfile.open() failing with ReadError when
opening a PAX format tar archive that contains only global
headers and no regular members.
- gh-139489: Add xml.is_valid_text() to xml.__all__.
- gh-149614: Fix a regression that broke the ability to
deepcopy argparse.ArgumentParser instances.
- gh-149600: Remove deprecated asyncio.iscoroutinefunction()
function.
- gh-149598: Remove support of deprecated strm argument for
logging handlers.
- gh-149595: Remove the sys._enablelegacywindowsfsencoding()
function which has been deprecated since Python 3.13.
- gh-149567: Remove the shutil.ExecError exception which has
been deprecated since Python 3.14.
- gh-112821: In the REPL, autocompletion might run arbitrary
code in the getter of a descriptor. If that getter raised
an exception, autocompletion would fail to present any
options for the entire object. Autocompletion now works as
expected for these objects.
- gh-149436: Improve performance of inspect.getattr_static().
- gh-149534: Fix merging of collections.defaultdict and
frozendict.
- gh-149537: Remove kw parameters from python version of
functools.reduce() function.
- gh-80480: Remove deprecated 'u' type code (wchar_t) for the
array module. Use 'w' format code instead (Py_UCS4, always
4 bytes).
- gh-149530: Removed symtable.Class.get_methods() which has
been deprecated since 3.14.
- gh-149528: Remove annotationlib.ForwardRef._evaludate
deprecated method.
- gh-149388: Make asyncio.windows_utils.PipeHandle closing
idempotent.
- gh-149499: Removed the sysconfig.expand_makefile_vars()
function which has been deprecated since Python 3.14. Use
the vars argument of sysconfig.get_paths() instead.
- gh-149489: Fix ElementTree serialization to HTML. The
content of comments, processing instructions and elements
“xmp”, “iframe”, “noembed”, “noframes”, and “plaintext” is
no longer escaped. The “plaintext” element no longer have
the closing tag. Add support of empty attributes (with
value None).
- gh-149319: The asyncio REPL now ignores PYTHONSTARTUP and
PYTHON_BASIC_REPL when -E or -I is used. Patch by Jonathan
Dung.
- gh-149464: Add os.pidfd_getfd() for duplicating a file
descriptor from another process via a pidfd. Available on
Linux 5.6+. Patch by Maurycy Pawłowski-Wieroński.
- gh-149056: Fix json.load() not forwarding the array_hook
argument to json.loads(). Patch by Thomas Kowalski.
- gh-149046: io: Fix io.StringIO serialization: no longer
call str(obj) on str subclasses. Patch by Thomas Kowalski.
- gh-118158: Ensure py_compile CLI error messages end with a
newline. Contributed by Xiao Yuan.
- gh-148954: Fix XML injection vulnerability in
xmlrpc.client.dumps() where the methodname was not being
escaped before interpolation into the XML body.
- gh-148441: xml.parsers.expat: prevent a crash in
CharacterDataHandler() when the character data size exceeds
the parser’s buffer size.
- gh-119670: Add keyword-only parameter force to
shlex.quote() to force quoting a string, even if it is
already safe for a shell without being quoted.
- gh-92455: Fix mimetypes to prefer case-sensitive matches
for suffix mappings and MIME type suffixes before falling
back to case-insensitive matches. Contributed by Xiao Yuan.
- gh-148736: Fix a latent AttributeError in asyncio
call-graph capture when walking an async generator’s
ag_await chain: the walker referenced cr_frame instead of
ag_frame.
- gh-148665: socket.shutdown function is now enabled for
Emscripten builds. However, if the runtime does not
implement the shutdown syscall, it will show “Function not
implemented” error.
- gh-148085: Speed up timetuple() and strftime() by caching
the time.struct_time and time.strftime lookups, and
today() by reading the clock directly instead of calling
time.time(). Patching time after importing datetime
no longer affects these methods. Patch by Maurycy
Pawłowski-Wieroński.
- gh-147950: Bind yank-arg to M-_ in the REPL.
- gh-146452: Fix segfault in pickle when pickling a
dictionary concurrently mutated by another thread in the
free-threaded build.
- gh-47005: Fix urllib.request.AbstractHTTPHandler.do_open()
to give regular headers set via add_header() priority over
unredirected headers, consistent with get_header() and
header_items().
- gh-145107: Simplify asyncio.staggered_race by using
eager_start=False.
- gh-140729: Fix a pickling error in the cProfile module when
profiling a script that uses multiprocessing.Process with
the spawn and forkserver start methods.
- gh-143988: Fixed crashes in socket.socket.sendmsg() and
socket.socket.recvmsg_into() that could occur if buffer
sequences are concurrently mutated.
- gh-143008: Fix crash in io.TextIOWrapper when reentrant
io.TextIOBase.detach() is called reentrantly from the
underlying buffer.
- gh-81881: shutil.copyfile() now raises SpecialFileError for
sockets and device files.
- gh-140924: Add locale.localize(), locale.delocalize() and
platform-specific locale constants from the _locale module
to locale.__all__.
- gh-115634: Fix a deadlock in
concurrent.futures.ProcessPoolExecutor when using
max_tasks_per_child, present since the feature was
introduced in Python 3.11. The executor stopped scheduling
queued tasks after a worker process exited upon reaching
its task limit. Based on a fix proposed by Tabrez Mohammed.
- gh-140344: The classes ast.slice, ast.ExtSlice, ast.Index,
ast.Suite, ast.AugLoad, ast.AugStore, and ast.Param,
deprecated since Python 3.9, now issue deprecation warnings
on use. They are now scheduled for removal in Python 3.21.
- The dims property of ast.Tuple objects, deprecated since
Python 3.9, now issues a deprecation warning when accessed.
The property is scheduled for removal in Python 3.21. Use
the (non-deprecated) elts property of ast.Tuple objects
instead.
- The deprecated global names are also no longer imported by
from ast import *.
- gh-140326: Fix the asyncio REPL namespace so that relative
imports no longer resolve against the asyncio package and
__file__ is no longer set.
- gh-139398: Add supported _sunder_ names to the dir() method
of the enum module to support them in REPL autocompletion.
- gh-139819: rlcompleter: Avoid suggesting attributes that
are not accessible on instances (e.g., Enum members showing
__name__). Patch by Peter (ttw225).
- gh-79638: Disallow all access in urllib.robotparser if the
robots.txt file is unreachable due to server or network
errors.
- gh-86533: The os.makedirs() function and
pathlib.Path.mkdir() method now have a parent_mode
parameter to specify the mode for intermediate directories
when creating parent directories. This allows one to match
the behavior from Python 3.6 and earlier for os.makedirs().
- gh-64192: Add the optional buffersize parameter
to multiprocessing.pool.Pool.imap() and
multiprocessing.pool.Pool.imap_unordered() to limit the
number of submitted tasks whose results have not yet
been yielded. If the buffer is full, iteration over the
iterables pauses until a result is yielded from the buffer.
To fully utilize pool’s capacity when using this feature,
set buffersize at least to the number of processes in
pool (to consume iterable as you go), or even higher (to
prefetch the next N=buffersize-processes arguments).
- gh-51067: Add remove() and repack() to ZipFile.
- gh-134261: zip: On reproducible builds, ZipFile uses UTC
instead of the local time when writing file datetimes to
avoid underflows.
- gh-133998: Fix struct.error exception when creating a file
with gzip.GzipFile or compressing data with gzip.compress()
if the system time is outside the range 00:00:00 UTC,
January 1, 1970 through 06:28:15 UTC, February 7, 2106, or
explicitly passed mtime argument is outside the range 0 to
2**32-1.
- gh-68164: Fix zipfile.ZipFile.writestr() so it sets the
“regular file” bit by default.
- gh-46927: Prevent readline from overriding the COLUMNS and
LINES environment variables, as values are not updated on
terminal resize.
- gh-72902: Optimize (~x1.4 speedup)
fractions.Fraction.from_decimal() and
fractions.Fraction.from_float() for Decimal and float
inputs, respectively. Patch by Sergey B Kirpichev.
- gh-128110: Fix bug in the parsing of email address headers
that could result in extraneous spaces in the decoded text
when using a modern email policy. Space between pairs of
adjacent RFC 2047 encoded-words is now ignored, per section
6.2 (and consistent with existing parsing of unstructured
headers like Subject).
- gh-129382: The venv.EnvBuilder and venv.create() APIs now
use the platform-dependent default for symlinks from venv’s
command-line interface.
- gh-125763: Remove the broken spacebar quit binding from
turtledemos sorting_animate example.
- gh-107398: Fix tarfile stream mode exception when process
the file with the gzip extra field.
- gh-121109: Fix tarfile performance issue when reading
archives in streaming mode (e.g. r|*).
- gh-120665: Fixed an issue where unittest loaders would
load and instantiate unittest.TestCase-derived subclasses
that are also abstract base classes, which can’t be
instantiated.
- gh-115988: lzma adds constants to support the newer BCJ
filters for ARM64 and RISC-V.
- gh-108518: The iterator returned by
concurrent.futures.Executor.map() is no longer
automatically closed if a function call raises an
exception. Use method close() to explicitly close the
iterator.
- gh-113329: Fix OSError being raised when trying to run
doctests on a class objects in the REPL. Patch by Sten
Wessel.
- gh-105708: Accept an uppercase V prefix in IPvFuture
addresses in urllib.parse.urlsplit().
- gh-103925: Fix csv.Sniffer.sniff() for a sample with \r\n
line endings in which a quoted field ends a line: a letter
could be detected as the delimiter.
- gh-60055: Let urllib.robotparser.RobotFileParser accept a
urllib.request.Request object as well as a url string when
setting a robots.txt url.
- gh-102967: A bug in doctest._SpoofOut.truncate() was
causing None to be passed to StringIO.seek() when no size
was given. A simple fix skips the seek call when no size
is given so the buffer can be truncated from the current
position.
- gh-91099: imaplib.IMAP4.login() now raises exceptions with
str instead of bytes. Patch by Florian Best.
- gh-82039: http.cookiejar.FileCookieJar.load() now checks
the first, format signature line in a case-insensitive
manner. Patch by Ashley Harvey.
- gh-101267: When a worker process terminates unexpectedly,
concurrent.futures.ProcessPoolExecutor now sets a separate
BrokenProcessPool exception on each pending future
instead of sharing a single instance among them all.
Sharing one exception produced malformed tracebacks: each
Future.result() call re-raised the same object, appending
another copy of the traceback to it.
- bpo-46375: Add io.BytesIO.peek() method to read without
advancing position.
- bpo-47216: Added mtime option to gzip.open(), which will be
passed to the constructor of GzipFile.
- gh-70758: Creating a new turtle screen after the previous
one was closed no longer raises turtle.Terminator on the
first turtle command.
- bpo-45509: Gzip headers are now checked for corrupted NAME,
COMMENT and HCRC fields.
- gh-75245: socket.socket.makefile() now supports line
buffering (buffering=1) in text mode, as open() does and as
it worked in Python 2. Previously it silently used block
buffering. In binary mode it now emits a RuntimeWarning and
uses the default buffer size, also as open() does.
- bpo-44012: The exploded attribute of ipaddress.IPv6Address
and ipaddress.IPv6Interface now supports addresses with
a scope ID (link-local addresses). Previously the former
raised AddressValueError and the latter omitted the scope
ID.
- bpo-40469: TimedRotatingFileHandler now uses the creation
time instead of the last modification time of an existing
log file as the basis for the first rotation after handler
creation, if supported by the OS and file system. This
allows it to be used in short-running programs that start
and end before the rotation interval expires.
- bpo-42861: Add IPv4Network.next_network() and
IPv6Network.next_network(). Patch by Faisal Mahmood.
- gh-84687: The os.exec* functions now set the filename
attribute of the raised FileNotFoundError or
NotADirectoryError to the program name passed by the
caller.
- gh-83869: Fix tarfile reading an archive with a GNU sparse
1.0 member whose size is set in the pax extended header.
The offset of the next header was computed from the offset
of the data, which is already past the sparse map, and from
the size of the member, which can be the apparent size of
the sparse file. All following members were unreachable.
- gh-61366: http.cookiejar.MozillaCookieJar now reads session
cookies written by curl and Wget, which use 0 in the
expiration time field. Contributed by Jérémie Detrey.
- Documentation
- gh-57491: Reduce the depth of the table of contents in the
EPUB documentation from three levels to two, making it much
shorter and easier to navigate in e-book readers.
- gh-142083: Document the 'w' type code in the array.array
docstring, so that it lists the same type codes as
array.typecodes and the array module documentation.
- gh-118150: Clarify in the difflib documentation what junk
actually does, its drawbacks, and how to control it.
- gh-59551: Rename Doc/library/dialog.rst to
tkinter.dialogs.rst.
- gh-86726: Greatly expand the tkinter documentation
to cover the full public API of the package and its
submodules. The descriptions are oriented towards Python
rather than Tcl/Tk, with corrected return types and
versionadded/versionchanged information.
- gh-150319: Generic builtin and standard library types now
document the meaning of their type parameters.
- gh-109503: Fix documentation for shutil.move() on usage of
os.rename() since nonatomic move might be used even if the
files are on the same filesystem. Patch by Fang Li
- Tests
- gh-159211: The iOS testbed no longer gathers simulator
diagnostics when a test run fails.
- gh-158051: The iOS testbed has been updated for
compatibilty with Xcode 27.
- gh-157628: In regrtest, only consider that a test leaks
if all test runs leak at least one file descriptor. For
example, ignore “[0, 1, -1] file descriptors, sum=0”
deltas, instead of reporting a leak. Patch by Victor
Stinner.
- gh-140550: Enable limited C API tests on Free Threading i n
test_cext and test_cppext: test the Py_TARGET_ABI3T macro.
Patch by Victor Stinner.
- gh-75876: In verbose mode, a test decorated with
bigmemtest() now reports how much memory it really used,
and the number of major page faults it took, if any.
- gh-75876: A test decorated with bigmemtest() now runs in a
subprocess if it really allocates the memory it asks for
(that is, if the -M option is used), so that the memory it
uses and the address space it fragments are released when
it ends. A dummy run stays in the process. The separate
memory watchdog process is no longer needed: the parent
process watches the memory usage of the subprocess.
- gh-109817: Add the --single-process-per-case option to
libregrtest to run every test case in a separate process.
Test cases from the same test module are run sequentially.
This helps to detect order dependencies and environment
leaks between test cases.
- gh-155411: Fix test.support.subTests() for asynchronous
test methods. They were wrapped in a synchronous function,
which discarded the coroutine without awaiting it, so the
test silently did not run at all.
- gh-108885: Running the Python test suite with -vv now
reports every example of a doctest. A single -v reports the
test names, as before.
- gh-132581: The list of tests which altered the execution
environment now includes the reasons why the environment
was considered altered, for example an unraisable exception
or a modified sys.path. The final result no longer repeats
the same state twice (like ENV CHANGED then ENV CHANGED).
- gh-155109: Add test.support.run_with_limited_c_stack()
and use it in tests that exhaust the C stack with a fixed
number of recursive calls, so that their outcome no longer
depends on the C stack size.
- gh-76595: Add C API tests for PyCapsule_Import().
- gh-154211: Add test.support.skip_if_huge_c_stack() and use
it to skip tests that exhaust the C stack if the stack
limit is very large (e.g. on DragonFly BSD or with ulimit
- s unlimited).
- gh-154167: The test runner (regrtest) now restores the
default SIGINT handler if it was inherited as ignored,
so the test suite no longer hangs when run as a shell
background job.
- gh-154144: Fix building the _testcapi module on NetBSD.
- gh-154137: Check for Windows handle leaks in regrtest.
Patch by Victor Stinner.
- gh-152548: Add the test.support.isolation.runInSubprocess()
decorator to run a test method or TestCase subclass in a
fresh interpreter subprocess, isolated from the rest of the
test run.
- gh-151626: Fix several tests in test.test_inspect,
test.test_import, test.test_importlib, test.test_py_compile
and test.test_compileall that failed when the test suite
was run with PYTHONPYCACHEPREFIX set. These tests now
neutralize the pycache prefix where they assume the default
__pycache__ bytecode layout.
- gh-151096: Fix test_embed failing when CPython is
configured with a split exec prefix (--exec-prefix
differing from --prefix).
- gh-151130: Add more tests for PyWeakref_* C API.
- gh-150966: Avoid prematurely terminating failing live
sampling profiler test targets, which made stderr
assertions flaky on ASAN buildbots.
- gh-150387: Fix hang in
test.test_profiling.test_sampling_profiler.test_live_collec
tor_ui.TestLiveModeErrors.test_run_failed_script_live
on slow buildbots. The test now always queues a final q
keystroke so the live TUI loop exits even when the profiler
collects enough samples to enter the post-finished input
loop.
- gh-150114: On Linux, regrtest now logs the total memory
usage of all Python processes. Read the private memory in
/proc/pid/smaps. Patch by Victor Stinner.
- gh-149776: Fix test_socket on Linux kernel 7.1 and newer:
skip UDP Lite tests if it’s not supported. Patch by Victor
Stinner.
- gh-148853: Fix tests failing on FreeBSD in test.support’s
in_systemd_nspawn_sync_suppressed() due to unreadable /run
directory.
- gh-142414: Isolate reloading modules in test_interpreters
to avoid having broken references.
- Build
- gh-158878: Stop creating an empty Modules/Setup.local file
as it no longer seems to be required to statically link the
extension modules.
- gh-158683: Fix the Modules/Setup entry for the _zstd module
by adding missing source files.
- gh-129040: Added support for function call adaptor
trampolines for wasi to prevent traps when C handlers take
the wrong number of arguments. Dropped Emscripten function
call adaptors support for JS runtimes that don’t support
wasm-gc.
- gh-158010: Update Android and iOS build scripts to use
OpenSSL 3.5.9.
- gh-136872: Python built with --with-address-sanitizer
or --with-memory-sanitizer now includes pymalloc,
but uses malloc as the default memory allocator. Set
PYTHONMALLOC=pymalloc to use pymalloc.
- gh-157923: Support WASI SDK 34.
- gh-157549: Use sysconf(_SC_PAGESIZE) instead of
getpagesize() in remote_debug.h so _remote_debugging builds
on Darwin with -Werror=implicit-function-declaration.
- gh-157142: Fix the link of Programs/_freeze_module when
extension modules are built in (MODULE_BUILDTYPE=static)
and the test modules are enabled: Modules/getpath_noop.c
now defines _Py_Get_Getpath_CodeObject(), which
_testinternalcapi uses.
- gh-155292: In makeunicodedata.py, the script for updating
Unicode data, skip generating stringprep.py if the current
interpreter’s Unicode data version does not match the
target version.
- gh-156049: Add --with-hwaddress-sanitizer to build with
HWAddressSanitizer.
- gh-156554: Update PY_SUPPORT_TIER according to PEP 11
for these target triples: aarch64-*-linux-gnu/gcc,
aarch64-pc-windows-msvc/msvc, x86_64-apple-darwin*/clang,
and powerpc64le-*-linux-gnu/gcc.
- gh-156244: Update configure to reflect that the
riscv64-unknown-linux-gnu target triple is now a PEP 11
tier 3 supported platform.
- gh-155911: Fix curses detection with libraries in LIBS and
- -without-curses. Patch by Shamil Abdulaev.
- gh-156115: iOS simulator builds are now configured with
- mios-simulator-version-min instead of the device’s
- mios-version-min. The device flag made the linker reject
libraries resolved from the simulator SDK, so library
detection silently failed.
- gh-156109: iOS builds may now be configured without a
framework, producing a static libpython for embedding in
an app binary. Such a build cannot load extension modules
at runtime, and requires MODULE_BUILDTYPE=static and
- -disable-test-modules to be requested explicitly. A shared
iOS build must still be a framework build.
- gh-153400: Support os.getrandom() when building Python with
old glibc versions and recent Linux kernel (glibc 2.25 or
older and Linux kernel 3.17 or newer). Get the syscall
number from kernel headers, rather than glibc headers.
- gh-90604: configure no longer sets MULTIARCH on OpenBSD
platforms.
- gh-152023: Update Android builds to SQLite 3.53.4.
Additionally, enable the median() and percentile()
functions.
- gh-154271: Define _XOPEN_SOURCE=600 on Solaris and illumos,
so that on illumos the socket module is built with
sendmsg(), recvmsg() and the CMSG_* helpers. This also
enables the forkserver multiprocessing start method.
- gh-154136: Fix building the math module on FreeBSD. Define
_ISOC23_SOURCE to make the C23 library declarations (such
as sinpi() in math.h) visible.
- gh-154070: Build the curses module against a wide-character
capable ncurses even when it is not named ncursesw – for
example the pkgsrc ncurses on NetBSD and illumos, or the
system ncurses on macOS. Such a library previously produced
a narrow build.
- gh-152902: Added Intel icx compiler support to
configure.ac. Contributed by High Performance Kernels LLC.
- gh-154055: The curses and curses.panel modules can now
be built against a curses library that lacks the X/Open
attr_t and soft-label attribute functions, scr_set() or
resizeterm() – such as the native SVr4 curses of illumos
and Solaris. These functions are probed and used only when
present.
- gh-136687: Add the --with-curses option to configure
to select the curses backend (ncursesw, ncurses or the
system’s native curses) or, as --without-curses, to exclude
the curses and curses.panel modules from the build.
- gh-126877: Fix the configure check for Tcl/Tk which
could wrongly succeed with optimizing compilers when the
libraries are missing.
- gh-153511: Removes the legacy MSI and Nuget build scripts,
the legacy py.exe launcher (now replaced by the Python
install manager), and adds a PC/layout readme.
- gh-153438: Update Windows build and installer tooling
and documentation to use the current download URL for
nuget.exe.
- gh-152870: Fix a compilation error in the decimal
C extension (_decimal) when it is built with
EXTRA_FUNCTIONALITY. Context.apply() called the internal
_apply helper using its pre-Argument-Clinic signature; the
call is now made through the generated _impl function.
- gh-152769: Enable the perf profiler trampoline on Alpine
Linux with the musl C library on x86_64 and aarch64. The
trampoline is architecture-specific and does not depend on
the C library, so the same assembly trampoline used for
glibc is reused for musl.
- gh-152502: The curses module now detects its optional
functions with configure capability probes instead of
assuming ncurses, so it builds against narrow (non-wide)
ncurses and other curses implementations such as NetBSD
curses, exposing exactly the functions they provide.
- gh-152240: Fix C stack unwinding tests on Linux LoongArch
builds by teaching the manual frame pointer unwinder to
recognize the LoongArch frame layout.
- gh-151163: Updated Android build to include SQLite version
3.53.2.
- gh-115119: Fix the detection of libmpdec header when no .pc
files are available.
- gh-148294: Corrected the use of AC_PATH_TOOL in
configure.ac to allow a C++ compiler to be found on PATH.
- gh-131372: Add a --with-build-details-suffix configure
flag to allow Linux distributions that co-install
multiple versions of Python in the same tree to avoid
build-details.json clashes.
- gh-148260: On Linux when Python is linked to the musl C
library, use a thread stack size of at least 1 MiB instead
of musl default which is 128 kiB. Patch by Victor Stinner.
- gh-148832: Fix --enable-bolt build by switching the default
BOLT flag from -icf=1 to -icf=0. -icf=1 folds address-taken
functions and breaks type-slot dispatch, crashing on list
and tuple concatenation. Patched by Shamil Abdulaev.
- gh-144712: Fix _testinternalcapi import failure due
to missing _Py_jit_entry symbol when built with
- -enable-experimental-jit. Patch by Shamil Abdulaev.
- gh-138800: Fix library name in python3.pc on Android.
- gh-139314: Add the --with-zlib and --with-bzip2 configure
options to select the zlib and bzip2 implementations
used to build the zlib and bz2 modules. In addition to
the default system libraries, they can build against
zlib-rs and libbzip2-rs, and --with-zlib=zlib-ng verifies
that the detected zlib is zlib-ng. --without-zlib and
- -without-bzip2 exclude the modules from the build.
- gh-115119: Removed bundled copy of the libmpdec, use system
library if it’s available. Patch by Sergey B Kirpichev.
- IDLE
- gh-158067: Fix the IDLE File Open dialog listing text files
before Python files when opened from the Shell or an Output
window.
- gh-56596: Make IDLE keyboard shortcuts with ascii letters
work when Caps Lock is on even when only one of the upper
and lowercase versions are defined.
- gh-75512: Output from a thread printed in the IDLE Shell
while a statement is being entered no longer takes over the
prompt of the statement.
- gh-64007: IDLE no longer applies syntax coloring to the
text entered for input() in the Shell.
- gh-85560: Fix IDLE failing to find the opening parenthesis
when a continuation line inside the parentheses starts with
else of a conditional expression or with yield.
- gh-75487: Fix saving a truncated number when an integer
entry in the IDLE Settings dialog is blanked with the
Backspace key.
- gh-74112: Ctrl-C in the IDLE Shell now interrupts blocking
calls such as time.sleep() and socket.recv.
- gh-151471: Colorize the soft keyword type in IDLE.
- gh-103089: IDLE no longer hangs when opening a file with
very long lines. Only the first 2,000 characters of a line
are colorized.
- gh-89544: Fix IDLE hanging after Restart Shell while
receiving a large output from the user process.
- gh-70331: IDLE no longer fails to start with python -m
idlelib, and its user process no longer fails to start,
when the current directory contains user files with the
same names as standard library modules that IDLE imports,
such as random.py or tkinter.py.
- gh-93016: Fix parsing of command line arguments in the IDLE
“Run… Customized” dialog on Windows: backslashes are no
longer treated as escape characters. Fix also display of
the previous arguments in the dialog.
- gh-59568: Fix “Save As” and “Open” dialogs in IDLE for
a file whose name starts with ~ on Windows and X11 with
Tcl/Tk older than 9.
- gh-69004: The Debugger item of the IDLE Debug menu is now
disabled while user code runs, like Stack Viewer.
- gh-69365: The IDLE search dialogs now show a regular
expression error below the entry instead of in a message
box.
- gh-93966: The highlighting of a syntax error in the IDLE
Shell is now removed when the next statement is entered,
not only when the next syntax error occurs.
- gh-105689: Fix calltips, parenthesis matching and
auto-indent in the IDLE Shell after output containing
unbalanced quotes or parentheses.
- gh-60402: In IDLE, Tab in a string that is not the start of
a file name inserts a tab instead of opening the completion
list.
- gh-68453: Fix running IDLE with the -s option together
with -c, -r or -: the command or script now runs after
the startup file, without an error dialog and without
restarting the shell.
- gh-75234: Fix editing help sources and key bindings in
the IDLE Settings dialog after selecting them with the
keyboard.
- gh-69919: IDLE now reports any exception raised by
compiling the source, such as MemoryError for too deeply
nested source, instead of hanging the Shell.
- gh-91398: Remove the border around the IDLE Shell sidebar,
which was drawn in the window background color and stood
out with dark themes.
- gh-71136: Fix a hang of the IDLE Shell when code run under
the debugger raises KeyboardInterrupt.
- gh-154511: Consolidate IDLE’s mouse wheel handling in
idlelib.util. wheel_event moves there from idlelib.tree and
joins x11_buttons, which tells whether Tk reports wheel
rotations to a widget as <Button-4>/<Button-5> events, and
bind_wheel, which binds whichever events Tk sends.
- gh-156896: Stop deleting tkinter submodules when
idlelib.run is imported.
- gh-153480: Fix IDLE failing to start when opening a file
which does not exist yet. Fix a traceback when a file open
in the IDLE editor is deleted by another program; IDLE now
asks whether to close the window, save the file elsewhere,
or ignore it.
- gh-55646: Fix IDLE crash at startup when the user
configuration contains an invalid key binding, such as
<Alt-Key-up> instead of <Alt-Key-Up>. The invalid binding
is now ignored with a warning.
- gh-82183: When the shell is busy running code, using “Run…
Customized” with “Restart shell” unchecked now reports that
the shell is executing instead of restarting it anyway.
- gh-83653: Blanking an integer entry in IDLE’s Settings
dialog, such as “Auto squeeze min lines”, no longer saves
an empty string as an invalid configuration value.
- gh-65339: Saving the IDLE Shell or an Output window now
defaults to a .txt extension and lists text files before
Python files, since their content is not Python source.
- gh-80504: The “In files:” field of IDLE’s Find in Files
dialog now always contains a full directory path, even for
an unsaved editor or the Shell. This shows in the grep
output which directory was searched.
- gh-134300: Do not add the idlelib directory to the path of
the IDLE user process. User code run in IDLE can no longer
import idlelib submodules as top-level modules, such as
import help.
- gh-89360: Fix a rare crash in the IDLE editor when the
completion window is closed: deleting a key binding for
a sequence that is not bound to the virtual event is now
ignored instead of raising a ValueError.
- gh-66172: IDLE no longer fails to start when a user
configuration file is corrupt. The unparsable file is
renamed with a “.bad” suffix, default settings are used
instead, and a warning lists the affected files.
- gh-71956: Fix Replace All in the IDLE editor’s Replace
dialog when the search direction is “Up” and “Wrap around”
is off: it now replaces all matches above the current
position instead of only the first one.
- gh-152728: Move functions run.fix_scaling,
editor.fixwordbreaks (as fix_word_breaks) and
pyshell.fix_x11_paste to idlelib.util.
- gh-66331: Set the WM_CLASS window property of IDLE’s
windows to Idle on X11, so that window managers group and
label them correctly instead of using the default Toplevel.
- gh-85320: IDLE now reads and writes its configuration files
and the breakpoints file using UTF-8 instead of the locale
encoding. This keeps non-ASCII data (such as non-ASCII
paths) from being corrupted and makes the files portable
between environments.
- gh-90304: Prevent IDLE from failing to start when a font
reports a zero width for the '0' character. Such a broken
font caused a ZeroDivisionError; the editor now falls back
to the configured width.
- gh-135511: Fix display of NameError and AttributeError with
multi-line message.
- bpo-6699: Warn the user if a file will be overwritten when
saving.
- Tools/Demos
- gh-158451: python-gdb.py is now able to format an invalid
Unicode string: render invalid characters as \Uhhhhhhhh
instead of raising an exception. Patch by Victor Stinner.
- gh-156261: Argument Clinic: the pid_t, uid_t, gid_t,
Py_off_t, HANDLE, DWORD and BOOL converters, previously
defined in individual files, are now provided by Argument
Clinic itself.
- gh-156219: Fix Argument Clinic generating code which reads
an optional positional argument which was not passed, if
the function has a **kwds parameter.
- gh-113318: The value of a setter generated by Argument
Clinic is now a parameter, which can use a converter, and
a getter can define a return converter. It is optional
to declare the value of the setter. The accessors of the
same attribute are now identified by the Python name of
that attribute instead of the C basename, so they can use
different C basenames, and several implementations of the
same accessor can be defined in different preprocessor
conditional blocks.
- gh-113318: Fix Argument Clinic for @getter and @setter in a
preprocessor conditional block. It failed with an internal
error. Argument Clinic now also rejects the accessors of
the same attribute with different C basenames, and the same
accessor defined twice, which silently generated invalid or
duplicated entries of PyGetSetDef.
- gh-155373: Argument Clinic now generates the inlined code
of the converters for functions with optional groups,
instead of a PyArg_ParseTuple() call for every number of
arguments. Every argument is now parsed once, most such
functions now use the fastcall convention, and the errors
for a wrong type of an argument are the same as in other
functions.
- gh-64660: Argument Clinic return converters no longer
need to hardcode the name of the variable returned
by the parsing function. It is now available as
data.parser_retval.
- gh-155266: Fix Argument Clinic for a function whose only
parameter is in an optional group. It generated METH_O,
which made the argument mandatory and did not pass the flag
of the group.
- gh-64595: Argument Clinic now touches the source file if a
file generated from it was changed, and keeps the generated
files newer than the source file. The build system does not
know that the source file depends on the files generated
from it, so it did not recompile the source file if only
the generated file was changed.
- gh-155263: Add the --list option to Argument Clinic. It
prints the modules, classes and functions which Argument
Clinic defines in the specified files, each function with
its signature.
- gh-107570: Argument Clinic: report errors on the offending
line. Errors in a docstring were reported on the line which
ends the block, and errors detected when generating the
code were reported without any position.
- gh-108270: Argument Clinic: add support for deprecating
a parameter with the [until X.Y] marker. Passing such
argument emits a DeprecationWarning.
- gh-108271: Argument Clinic: add support for parameter
aliases. A keyword-only parameter with a default value
which shares the C name of a preceding parameter declares
an alternative name for it.
- gh-155218: Fix Argument Clinic generating the flags of the
optional groups in different order on 32-bit and 64-bit
platforms.
- gh-155212: The --converters option of Argument Clinic now
accepts file names and can be used with --make. It prints
the converters and return converters which the specified
files define, instead of the built-in ones.
- gh-155207: Argument Clinic now supports the --dry-run and
- -diff options. They list the files which would be changed,
or write a unified diff of the changes to the standard
output, without modifying any file.
- gh-64502: Argument Clinic now supports several optional
groups on the same nesting level, like in [y, x,] [n,]
attr. Such groups can be omitted independently of each
other.
- gh-64502: Fix Argument Clinic support of parameters with
a default value used together with optional groups. Such
parameters were always required in the generated parsing
code.
- gh-154580: Fix python-gdb.py raising UnicodeEncodeError
when pretty-printing a non-ASCII str in a locale whose host
charset cannot encode it, such as any non-ASCII string in
the C locale.
- gh-154059: Fix the time units in Tachyon flame graph
tooltips by accounting for the sampling interval when
converting samples to milliseconds.
- gh-153804: Add
Tools/inspection/oracle_external_inspection.py, a
harness for measuring the accuracy of Tachyon. It
reports impossible-stack rates, speed, error rates and
the statistical distance from the blocking non-cached
best reference on selected snippets. Patch by Maurycy
Pawłowski-Wieroński.
- gh-152384: The CPython Pixi packages are now all accessible
at the same Tools/pixi-packages subdirectory, rather than
at Tools/pixi-packages/{variant} as before. Variants are
now selected not via subdirectory but via flags; see
https://pixi.prefix.dev/latest/concepts/package_specificati
ons/#extras-and-flags for usage instructions. The
tsan-freethreading variant has been renamed to
tsan_freethreading, while the default, asan, and
freethreading variants retain their previous names.
- gh-150258: Update the tooltip on the Tachyon flame graph to
show both absolute and relative percentages.
- gh-87613: Add a @vectorcall decorator to Argument Clinic
to generate The Vectorcall Protocol parsing code for
object.__init__() and object.__new__().
- gh-130647: Add --omit-header option to pygettext.
- gh-111501: PS1 is no longer exported by venv activate
script
- C API
- gh-129724: PyMarshal_WriteObjectToFile() now builds the
marshalled data in memory before writing it to the file,
instead of writing it piece by piece using a buffer of
constant size. Nothing is written any more if the object
cannot be marshalled.
- gh-149044: Fix the PySlot_END macro for C++: initialize
all members to avoid compiler warnings. Patch by Victor
Stinner.
- gh-158842: Add Py_SETREF and Py_XSETREF macros to the
limited C API. Patch by Nathan Goldbaum and Victor Stinner.
- gh-158810: Fix Py_ARRAY_LENGTH() macro on C++: do not use
__builtin_types_compatible_p() on C++. Patch by Victor
Stinner.
- gh-158451: Fix _PyUnicodeWriter_WriteLatin1String() when
the writer buffer kind is UCS-2 or UCS-4. Patch by Victor
Stinner.
- gh-158439: If PyUnicodeWriter_WriteUTF8() or
PyUnicodeWriter_Format() fails, PyUnicodeWriter_Finish()
now checks if the string uses the most efficient storage.
Previously, PyUnicodeWriter_Finish() could return a string
with an inefficient storage. Patch by Victor Stinner.
- gh-158080: Deprecate PyInitConfig_GetExitCode(),
PyStatus_Exit(), and PyStatus_IsExit() functions, and
PyStatus.exitcode member. Py_InitializeFromInitConfig()
and Py_InitializeFromConfig() can no longer return an exit
code. Instead, if a command line option wants to exit
Python, the option is now processed in Py_RunMain(). Patch
by Victor Stinner.
- gh-154757: PyModule_GetFilename() is no longer deprecated,
but using PyModule_GetFilenameObject() instead is still
recommended. Patch by Victor Stinner.
- gh-157649: Fix Py_CLEAR and Py_SETREF macros on C++:
implement them using auto instead of decltype(). Using
decltype() produced invalid code when clearing/setting an
array item. Patch by Victor Stinner.
- gh-154757: Remove PyEval_InitThreads() function which did
nothing since Python 3.7 and was deprecated since Python
3.9. Patch by Victor Stinner.
- gh-158001: Remove Py_SetProgramName(), Py_SetPythonHome(),
PySys_SetArgv() and PySys_SetArgvEx() functions, deprecated
since Python 3.11. Patch by Victor Stinner.
- gh-158001: Remove 21 global configuration variables:
- Py_BytesWarningFlag,
- Py_DebugFlag,
- Py_DontWriteBytecodeFlag,
- Py_FileSystemDefaultEncodeErrors,
- Py_FileSystemDefaultEncoding,
- Py_FrozenFlag,
- Py_HasFileSystemDefaultEncoding,
- Py_HashRandomizationFlag,
- Py_IgnoreEnvironmentFlag,
- Py_InspectFlag,
- Py_InteractiveFlag,
- Py_IsolatedFlag,
- Py_LegacyWindowsFSEncodingFlag,
- Py_LegacyWindowsStdioFlag,
- Py_NoSiteFlag,
- Py_NoUserSiteDirectory,
- Py_OptimizeFlag,
- Py_QuietFlag,
- Py_UTF8Mode,
- Py_UnbufferedStdioFlag,
- Py_VerboseFlag.
- Patch by Victor Stinner.
- gh-148233: Add Py_HashBuffer() to the limited C API. Patch
by Victor Stinner.
- gh-157710: When Python is built in debug mode,
PyUnicodeWriter_Finish() now checks if the trailing null
byte has been overridden to detect buffer overflow. Patch
by Victor Stinner.
- gh-157710: Soft deprecate functions modifying Unicode
strings: PyUnicode_New(), PyUnicode_CopyCharacters(),
PyUnicode_Fill(), PyUnicode_Resize(), PyUnicode_WRITE() and
PyUnicode_WriteChar(). Use the PyUnicodeWriter API instead.
Patch by Victor Stinner.
- gh-142217: Add tests on the undocumented and deprecated
_Py_Identifier C API. Patch by Victor Stinner.
- gh-140550: Fix the PyABIInfo_VAR macro: remove redundant ;.
Before, PyABIInfo_VAR(abi_info); code added two ;; which is
illegal in C++03. Patch by Victor Stinner.
- gh-157495: If typeof() is available, implement Py_MIN,
Py_MAX and Py_ABS using typeof() and statement expression
to only evaluate each argument once. Patch by Victor
Stinner.
- gh-157384: PyImport_CreateModuleFromInitfunc() now sets
the package context while calling initfunc, so that a
single-phase init submodule created with only the last
component of its name gets the full name from the spec.
- gh-155526: _Py_c_abs() no longer sets errno to zero on
success, but rather leaves it unchanged. Patch by Sergey B
Kirpichev.
- gh-157242: Fix PyBytesWriter_Resize() to handle properly
memory allocation failure. Leave the writer unchanged on
error, instead of leaving it in an inconsistent state.
Patch by Victor Stinner.
- gh-156939: When Python is built in debug mode,
PyBytesWriter now detects buffer overflow. Patch by Victor
Stinner.
- gh-156101: Don’t set the result in error in
PyLong_AsInt32(), PyLong_AsUInt32(), PyLong_AsInt64() and
PyLong_AsUInt64(). Leave the result unchanged in this case.
Patch by Victor Stinner.
- gh-131740: On the free-threaded build,
PyUnstable_GC_VisitObjects() now also visits frozen objects
(objects moved to the permanent generation by gc.freeze()),
matching the behavior of the default build.
- gh-155907: PyMarshal_ReadObjectFromFile() and
other functions reading marshalled data from
a FILE* now raise OSError for I/O errors and
KeyboardInterrupt for interrupted reading, instead
of EOFError. PyMarshal_WriteObjectToFile() and
PyMarshal_WriteLongToFile() now detect I/O errors
and interrupted writing instead of ignoring them.
PyMarshal_WriteObjectToFile() now also sets the error
indicator if the value cannot be marshalled.
- gh-155742: PyBytesWriter_FinishWithSize() now returns
single byte singletons if size equals to 1. Patch by Victor
Stinner.
- gh-152105: Remove the PyUnstable_ExecutableKinds array,
as well as the macros PyUnstable_EXECUTABLE_KIND_SKIP,
PyUnstable_EXECUTABLE_KIND_PY_FUNCTION,
PyUnstable_EXECUTABLE_KIND_BUILTIN_FUNCTION,
PyUnstable_EXECUTABLE_KIND_METHOD_DESCRIPTOR and
PyUnstable_EXECUTABLE_KINDS, from the C API.
- gh-153740: If available on the platform, use native
_Float16 in PyFloat_Pack2() and PyFloat_Unpack2()
functions. Patch by Sergey B Kirpichev.
- gh-152132: Fix Py_RunMain() to return an exit code, rather
than calling Py_Exit(), when running a script, a command,
or the REPL. Patch by Victor Stinner.
- gh-145633: PyFloat_Pack8() and PyFloat_Unpack* functions
are no longer guaranteed to always succeed on CPython.
- gh-153300: PyConfig_Set() now also set global configuration
variables. For example, PyConfig_Set("inspect", value) now
also sets Py_InspectFlag. Patch by Victor Stinner.
- gh-141510: Add frozendict to the fast paths of
PyMapping_GetOptionalItem(), PyMapping_Keys(),
PyMapping_Values(), and PyMapping_Items().
- gh-123619: PyUnstable_Object_EnableDeferredRefcount() now
returns 0 if the object is not tracked by the garbage
collector: if gc.is_tracked() is false. Patch by Victor
Stinner.
- gh-149044: Improved error message when specifying non-type
base classes in Py_tp_bases, Py_tp_base, and bases argument
to PyType_FromMetaclass() and other PyType_From* functions.
- gh-80384: PyWeakref_NewRef() and PyWeakref_NewProxy() now
raise TypeError if the callback argument is not callable,
None, or NULL.
- gh-150907: Fix dynamic_annotations.h header file when built
with C++ and Valgrind: add extern "C++" scope for the C++
template. Patch by Victor Stinner.
- gh-150671: Deprecate these C-API functions:
PyGen_New(), PyGen_NewWithQualName(), PyCoro_New(), and
PyAsyncGen_New(). Schedule them for removal in 3.18
- gh-149725: Add PySentinel_CheckExact() for exact sentinel
type tests to accompany the existing PySentinel_Check().
- gh-145235: Made PyDict_AddWatcher(), PyDict_ClearWatcher(),
PyDict_Watch(), and PyDict_Unwatch() thread-safe on the
free threaded build.
- gh-122931: Allow importing stable ABI C extensionst
tha include a multiarch tuple in their filename, e.g.
foo.abi3-x86-64-linux-gnu.so.
- bpo-32414: PyCapsule_Import() now imports submodules if
needed. Previously names like package.module.attribute
worked only if package.module was already imported.
- Remove gh139257-Support-docutils-0.22.patch; upstream dropped
the docutils monkey-patch (gh#python/cpython#139257).
- Clean up patches for 3.16:
- F00251-change-user-install-location.patch: drop unused
_prefix_addition and _EXEC_PREFIX, fix indentation.
- python-3.3.0b1-fix_date_time_compiler.patch: add
$(PYTHON_HEADERS) dependency.
- bpo-31046_ensurepip_honours_prefix.patch: drop wrong
versionchanged note and NEWS entry.
- skip-test_pyobject_freed_is_freed.patch: skip only on SLE 15.
- skip-test_array_alignment.patch: skip only with mimalloc
(gh#python/cpython#144725).
- CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch,
fix-test-recursion-limit-15.6.patch,
bsc1243155-sphinx-non-determinism.patch,
subprocess-raise-timeout.patch: style fixes.
- Add descriptions to all downstream patches.
/usr/lib64/python3.16t/curses /usr/lib64/python3.16t/curses/__init__.py /usr/lib64/python3.16t/curses/__pycache__ /usr/lib64/python3.16t/curses/__pycache__/__init__.cpython-316.opt-1.pyc /usr/lib64/python3.16t/curses/__pycache__/__init__.cpython-316.opt-2.pyc /usr/lib64/python3.16t/curses/__pycache__/__init__.cpython-316.pyc /usr/lib64/python3.16t/curses/__pycache__/ascii.cpython-316.opt-1.pyc /usr/lib64/python3.16t/curses/__pycache__/ascii.cpython-316.opt-2.pyc /usr/lib64/python3.16t/curses/__pycache__/ascii.cpython-316.pyc /usr/lib64/python3.16t/curses/__pycache__/has_key.cpython-316.opt-1.pyc /usr/lib64/python3.16t/curses/__pycache__/has_key.cpython-316.opt-2.pyc /usr/lib64/python3.16t/curses/__pycache__/has_key.cpython-316.pyc /usr/lib64/python3.16t/curses/__pycache__/panel.cpython-316.opt-1.pyc /usr/lib64/python3.16t/curses/__pycache__/panel.cpython-316.opt-2.pyc /usr/lib64/python3.16t/curses/__pycache__/panel.cpython-316.pyc /usr/lib64/python3.16t/curses/__pycache__/textpad.cpython-316.opt-1.pyc /usr/lib64/python3.16t/curses/__pycache__/textpad.cpython-316.opt-2.pyc /usr/lib64/python3.16t/curses/__pycache__/textpad.cpython-316.pyc /usr/lib64/python3.16t/curses/ascii.py /usr/lib64/python3.16t/curses/has_key.py /usr/lib64/python3.16t/curses/panel.py /usr/lib64/python3.16t/curses/textpad.py /usr/lib64/python3.16t/lib-dynload/_curses.cpython-316t-s390x-linux-gnu.so /usr/lib64/python3.16t/lib-dynload/_curses_panel.cpython-316t-s390x-linux-gnu.so
Generated by rpm2html 1.8.1
Fabrice Bellet, Sun Nov 8 23:19:24 2026