Changelog¶
Python next¶
Release date: XXXX-XX-XX
macOS¶
Windows¶
gh-124487: Increases Windows required OS and API level to Windows 10.
gh-124609: Fix
_Py_ThreadId
for Windows builds using MinGW. Patch by Tony Roberts.gh-124448: Updated bundled Tcl/Tk to 8.6.15.
gh-124254: Ensures experimental free-threaded binaries remain installed when updating.
gh-123915: Ensure that
Tools\msi\buildrelease.bat
uses different directories for AMD64 and ARM64 builds.gh-123418: Updated Windows build to use OpenSSL 3.0.15.
gh-123476: Add support for
socket.TCP_QUICKACK
on Windows platforms.gh-122573: The Windows build of CPython now requires 3.10 or newer.
gh-100256:
mimetypes
no longer fails when it encounters an inaccessible registry key.gh-119679: Ensures correct import libraries are included in Windows installs.
gh-119690: Adds Unicode support and fixes audit events for
_winapi.CreateNamedPipe
.gh-111201: Add support for new pyrepl on Windows
gh-119070: Fixes
py.exe
handling of shebangs like/usr/bin/env python3.12
, which were previously interpreted aspython3.exe
instead ofpython3.12.exe
.gh-117505: Fixes an issue with the Windows installer not running ensurepip in a fully isolated environment. This could cause unexpected interactions with the user site-packages.
gh-118209: Avoid crashing in
mmap
on Windows when the mapped memory is inaccessible due to file system errors or access violations.gh-79846: Makes
ssl.create_default_context()
ignore invalid certificates in the Windows certificate store
Tools/Demos¶
gh-123418: Update GitHub CI workflows to use OpenSSL 3.0.15 and multissltests to use 3.0.15, 3.1.7, and 3.2.3.
Tests¶
gh-124378: Updated
test_ttk
to pass with Tcl/Tk 8.6.15.gh-124213: Detect whether the test suite is running inside a systemd-nspawn container with
--suppress-sync=true
option, and skip thetest_os
andtest_mmap
tests that are failing in this scenario.gh-124190: Add capability to ignore entire files or directories in check warning CI tool
gh-121921: Update
Lib/test/crashers/bogus_code_obj.py
so that it crashes properly again.gh-112301: Add tooling to check for changes in compiler warnings. Patch by Nate Ohlson.
gh-59022: Add tests for
pkgutil.extend_path()
. Patch by Andreas Stocker.gh-99242:
os.getloadavg()
may throwOSError
when running regression tests under certain conditions (e.g. chroot). This error is now caught and ignored, since reporting load average is optional.gh-121084: Fix test_typing random leaks. Clear typing ABC caches when running tests for refleaks (
-R
option): call_abc_caches_clear()
on typing abstract classes and their subclasses. Patch by Victor Stinner.gh-121160: Add a test for
readline.set_history_length()
. Note that this test may fail on readline libraries.gh-121200: Fix
test_expanduser_pwd2()
oftest_posixpath
. Callgetpwnam()
to getpw_dir
, since it can be different thangetpwall()
pw_dir
. Patch by Victor Stinner.gh-121188: When creating the JUnit XML file, regrtest now escapes characters which are invalid in XML, such as the chr(27) control character used in ANSI escape sequences. Patch by Victor Stinner.
gh-120801: Cleaned up fixtures for importlib.metadata tests and consolidated behavior with 'test.support.os_helper'.
gh-119727: Add
--single-process
command line option to Python test runner (regrtest). Patch by Victor Stinner.gh-119273: Python test runner no longer runs tests using TTY (ex: test_ioctl) in a process group (using
setsid()
). Previously, tests using TTY were skipped. Patch by Victor Stinner.gh-119050: regrtest test runner: Add XML support to the refleak checker (-R option). Patch by Victor Stinner.
gh-101525: Skip
test_gdb
if the binary is relocated by BOLT. Patch by Donghee Na.
Security¶
gh-123678: Upgrade libexpat to 2.6.3
gh-112301: Enable compiler options that warn of potential security vulnerabilities.
gh-122792: Changed IPv4-mapped
ipaddress.IPv6Address
to consistently use the mapped IPv4 address value for deciding properties. Properties which have their behavior fixed areis_multicast
,is_reserved
,is_link_local
,is_global
, andis_unspecified
.gh-112301: Add ability to ignore warnings per file with warning count in warning checking tooling. Patch by Nate Ohlson.
gh-112301: Add macOS warning tracking to warning check tooling. Patch by Nate Ohlson.
gh-122133: Authenticate the socket connection for the
socket.socketpair()
fallback on platforms whereAF_UNIX
is not available like Windows.Patch by Gregory P. Smith <greg@krypto.org> and Seth Larson <seth@python.org>. Reported by Ellie <el@horse64.org>
gh-121957: Fixed missing audit events around interactive use of Python, now also properly firing for
python -i
, as well as forpython -m asyncio
. The events in question arecpython.run_stdin
andcpython.run_startup
.gh-112301: Enable runtime protections for glibc to abort execution when unsafe behavior is encountered, for all platforms except Windows.
gh-121285: Remove backtracking from tarfile header parsing for
hdrcharset
, PAX, and GNU sparse headers.gh-112301: Add default compiler options to improve security. Enable -Wimplicit-fallthrough, -fstack-protector-strong, -Wtrampolines.
gh-118773: Fixes creation of ACLs in
os.mkdir()
on Windows to work correctly on non-English machines.gh-118486:
os.mkdir()
on Windows now accepts mode of0o700
to restrict the new directory to the current user. This fixes CVE-2024-4030 affectingtempfile.mkdtemp()
in scenarios where the base temporary directory is more permissive than the default.
Library¶
gh-117151: The default buffer size used by
shutil.copyfileobj()
has been increased from 64k to 256k on non-Windows platforms. It was already larger on Windows.gh-124858: Fix reference cycles left in tracebacks in
asyncio.open_connection()
when used withhappy_eyeballs_delay
gh-124835: Make
tomllib.loads()
raiseTypeError
notAttributeError
on bad input types that do not have thereplace
attribute. Improve error message whenbytes
is received.gh-66436: Improved Le paramètre prog default value for
argparse.ArgumentParser
. It will now include the name of the Python executable along with the module or package name, or the path to a directory, ZIP file, or directory within a ZIP file if the code was run that way.gh-116850: Fix
argparse
for namespaces with not directly writable dict (e.g. classes).gh-58573: Fix conflicts between abbreviated long options in the parent parser and subparsers in
argparse
.gh-124594: All
asyncio
REPL prompts run in the samecontext
. Contributed by Bartosz Sławecki.gh-61181: Fix support of Le paramètre choices with string value in
argparse
. Substrings of the specified string no longer considered valid values.gh-116750: Provide
sys.monitoring.clear_tool_id()
to unregister all events and callbacks set by the tool.gh-124552: Improve the accuracy of
bdb
's check for the possibility of breakpoint in a frame. This makes it possible to disable unnecessary events in functions.gh-124538: Fixed crash when using
gc.get_referents()
on a capsule object.gh-80259: Fix
argparse
support of positional arguments withnargs='?'
,default=argparse.SUPPRESS
and specifiedtype
.gh-120378: Fix a crash related to an integer overflow in
curses.resizeterm()
andcurses.resize_term()
.gh-124498: Fix
typing.TypeAliasType
not to be generic, whentype_params
is an empty tuple.gh-53834: Fix support of arguments with Le paramètre choices in
argparse
. Positional arguments with Le paramètre nargs equal to'?'
or'*'
no longer check Le paramètre default againstchoices
. Optional arguments withnargs
equal to'?'
no longer check Le paramètre const againstchoices
.gh-123884: Fixed bug in itertools.tee() handling of other tee inputs (a tee in a tee). The output now has the promised n independent new iterators. Formerly, the first iterator was identical (not independent) to the input iterator. This would sometimes give surprising results.
gh-123017: Due to unreliable results on some devices,
time.strftime()
no longer accepts negative years on Android.gh-123014:
os.pidfd_open()
andsignal.pidfd_send_signal()
are now unavailable when building against Android API levels older than 31, since the underlying system calls may cause a crash.gh-124176: Add support for
dataclasses.dataclass()
inunittest.mock.create_autospec()
. Nowcreate_autospec
will check for potential dataclasses and usedataclasses.fields()
function to retrieve the spec information.gh-124345:
argparse
vim supports abbreviated single-dash long options separated by=
from its value.gh-124400: Fixed a
pdb
bug whereuntil
has no effect when it appears in acommands
sequence. Also avoid printing the frame information at a breakpoint that has a command list containing a command that resumes execution.gh-90562: Modify dataclasses to support zero-argument super() when
slots=True
is specified. This works by modifying all references to__class__
to point to the newly created class.gh-104860: Fix disallowing abbreviation of single-dash long options in
argparse
withallow_abbrev=False
.gh-63143: Fix parsing mutually exclusive arguments in
argparse
. Arguments with the value identical to the default value (e.g. booleans, small integers, empty or 1-character strings) are no longer considered "not present".gh-72795: Positional arguments with Le paramètre nargs equal to
'*'
orargparse.REMAINDER
are no longer required. This allows to use positional argument withnargs='*'
and withoutdefault
in mutually exclusive group and improves error message about required arguments.gh-59317: Fix parsing positional argument with Le paramètre nargs equal to
'?'
or'*'
if it is preceded by an option and another positional argument.gh-100980: The
_fields_
attribute ofctypes.Structure
andUnion
is no longer set if the setattr operation raises an error.gh-53780:
argparse
now ignores the first"--"
(double dash) between an option and command.gh-124217: Add RFC 9637 reserved IPv6 block
3fff::/20
inipaddress
module.gh-111513: Improve the error message that may be raised by
datetime.date.fromtimestamp()
.gh-124248: Fixed potential crash when using
struct
to process zero-width 'Pascal string' fields (0p
).gh-81691: Fix handling of multiple
"--"
(double dashes) inargparse
. Only the first one has now been removed, all subsequent ones are now taken literally.gh-87041: Fix a bug in
argparse
where lengthy subparser argument help is incorrectly indented.gh-84559: The default
multiprocessing
start method on Linux and other POSIX systems has been changed away from often unsafe"fork"
to"forkserver"
(when the platform supports sending file handles over pipes as most do) or"spawn"
. Mac and Windows are unchanged as they already default to"spawn"
.gh-124212: Fix invalid variable in
venv
handling of failed symlink on Windowsgh-124171: Add workaround for broken
fmod()
implementations on Windows, that loose zero sign (e.g.fmod(-10, 1)
returns0.0
). Patch by Sergey B Kirpichev.gh-123978: Remove broken
time.thread_time()
andtime.thread_time_ns()
on NetBSD.gh-123934: Fix
unittest.mock.MagicMock
resetting magic methods return values after.reset_mock(return_value=True)
was called.gh-124016: Update
unicodedata
database to Unicode 16.0.0.gh-123968: Fix the command-line interface for the
random
module to select floats between 0 and N, not 1 and N.gh-123945: Fix a bug where
argparse
doesn't recognize negative numbers with underscoresgh-123935: Fix parent slots detection for dataclasses that inherit from classes with
__dictoffset__
.gh-123892: Add
"_wmi"
tosys.stdlib_module_names
. Patch by Victor Stinner.gh-84808: Fix error handling in
socket
methodconnect_ex()
on platforms whereerrno
can be negative.gh-123756: Added a new argument
mode
topdb.Pdb
. Only allowpdb
from command line to userestart
command.gh-122765: Fix unbalanced quote errors occurring when activate.csh in
venv
was sourced with a custom prompt containing unpaired quotes or newlines.gh-123657: Fix crash and memory leak in
decimal.getcontext()
. It crashed when using a thread-local context by--with-decimal-contextvar=no
.gh-123339: Fix
inspect.getsource()
for classes incollections.abc
anddecimal
(for pure Python implementation) modules.inspect.getcomments()
now raises OSError instead of IndexError if the__firstlineno__
value for a class is out of bound.gh-123374: Remove check for redefined memo entry in
pickletools.dis()
.gh-123504: Fixed reference leak in the finalization of
tkinter
.gh-123430: Pages generated by the
http.server
module allow the browser to apply its default dark mode.gh-123446: Fix empty function name in
TypeError
whencsv.reader()
,csv.writer()
, orcsv.register_dialect()
are used without the required args.gh-123448: Fixed memory leak of
typing.NoDefault
by moving it to the static types array.gh-123409: Fix
ipaddress.IPv6Address.reverse_pointer
output according to RFC 3596, §2.5. Patch by Bénédikt Tran.gh-123089: Make
weakref.WeakSet
safe against concurrent mutations while it is being iterated. Patch by Kumar Aditya.gh-123363: Show string value of
CONTAINS_OP
oparg indis
output. Patch by Alexandr153.gh-123341: Add
__class_getitem__()
totkinter.Event
for type subscript support at runtime. Patch by Adonis Rakateli.gh-119518: Speed up normalization of
pathlib.PurePath
andPath
objects by not interning string parts.gh-123270: Applied a more surgical fix for malformed payloads in
zipfile.Path
causing infinite loops (gh-122905) without breaking contents using legitimate characters.gh-73991: Add
pathlib.Path.copy_into()
andmove_into()
, which copy and move files and directories into existing directories.gh-123228: Fix return type for
_pyrepl.readline._ReadlineWrapper.get_line_buffer()
to bestr()
. Patch by Sergey B Kirpichev.gh-123240: Raise audit events for the
input()
in the new REPL.gh-76960: Fix
urllib.parse.urljoin()
andurllib.parse.urldefrag()
for URIs containing empty components. For example,urljoin()
with relative reference "?" now sets empty query and removes fragment. Preserve empty components (authority, params, query, fragment) inurljoin()
. Preserve empty components (authority, params, query) inurldefrag()
.gh-116810: Resolve a memory leak introduced in CPython 3.10's
ssl
when thessl.SSLSocket.session
property was accessed. Speeds up read and write access to said property by no longer unnecessarily cloning session objects via serialization.gh-123243: Fix memory leak in
_decimal
.gh-122546: Consistently use same file name for different exceptions in the new repl. Patch by Sergey B Kirpichev.
gh-123213:
xml.etree.ElementTree.Element.extend()
andElement
assignment no longer hide the internal exception if an erroneous generator is passed. Patch by Bar Harel.gh-85110: Preserve relative path in URL without netloc in
urllib.parse.urlunsplit()
andurllib.parse.urlunparse()
.gh-122909: In urllib.request when URLError is raised opening an ftp URL, the exception argument is now consistently a string. Earlier versions passed either a string or an ftplib exception instance as the argument to URLError.
gh-123084: Deprecate
shutil.ExecError
, which hasn't been raised by anyshutil
function since Python 3.4. It's now an alias forRuntimeError
.gh-123085: In a bare call to
importlib.resources.files()
, ensure the caller's frame is properly detected whenimportlib.resources
is itself available as a compiled module only (no source).gh-123067: Fix quadratic complexity in parsing
"
-quoted cookie values with backslashes byhttp.cookies
.gh-123049: Add support for
UNNAMED_SECTION
inconfigparser.ConfigParser.add_section()
.gh-121735: When working with zip archives, importlib.resources now properly honors module-adjacent references (e.g.
files(pkg.mod)
and not justfiles(pkg)
).gh-122981: Fix
inspect.getsource()
for generated classes with Python base classes (e.g. enums).gh-122903:
zipfile.Path.glob
now correctly matches directories instead of silently omitting them.gh-122905:
zipfile.Path
objects now sanitize names from the zipfile.gh-122873: Enable
json
module to work as a script using the-m
switch:python -m json
. See the JSON command-line interface documentation. Patch by Trey Hunner.gh-122858: Deprecate
asyncio.iscoroutinefunction()
in favor ofinspect.iscoroutinefunction()
.gh-116263:
logging.handlers.RotatingFileHandler
no longer rolls over empty log files.gh-105376: Restore the deprecated
logging
warn()
method. It was removed in Python 3.13 alpha 1. Keep the deprecatedwarn()
method in Python 3.13. Patch by Victor Stinner.gh-122311: Improve errors in the
pickle
module.PicklingError
is now raised more often instead ofUnicodeEncodeError
,ValueError
andAttributeError
, and the original exception is chained to it. Improve and unify error messages in Python and C implementations.gh-122744: Bump the version of pip bundled in ensurepip to version 24.2.
gh-118761: Improve import time of
pprint
by around seven times. Patch by Hugo van Kemenade.gh-118974: Add
decorator
parameter todataclasses.make_dataclass()
to customize the functional creation of dataclasses.gh-118814: Fix the
typing.TypeVar
constructor when name is passed by keyword.gh-122637: Adjust
cmath.tanh(nanj)
andcmath.tanh(infj)
for recent C standards.gh-122478: Remove internal frames from tracebacks shown in
code.InteractiveInterpreter
with non-defaultsys.excepthook()
. Save correct tracebacks insys.last_traceback
and update__traceback__
attribute ofsys.last_value
andsys.last_exc
.gh-116622: On Android, the
FICLONE
andFICLONERANGE
constants are no longer exposed byfcntl
, as these ioctls are blocked by SELinux.gh-82378: Make sure that the new REPL interprets
sys.tracebacklimit
in the same way that the classic REPL did.gh-122334: Fix crash when importing
ssl
after the main interpreter restarts.gh-122459: Optimize
pickling
by name objects without the__module__
attribute.gh-87320: In
code.InteractiveInterpreter
, handle exceptions caused by calling a non-defaultsys.excepthook()
. Before, the exception bubbled up to the caller, ending the REPL.gh-122272: On some platforms such as Linux, year with century was not 0-padded when formatted by
strftime()
with C99-specific specifiers'%C'
or'%F'
. The 0-padding behavior is now guaranteed when the format specifiers'%C'
and'%F'
are supported by the C library. Patch by Ben Hsinggh-122400: Handle
ValueError
s raised byos.stat()
infilecmp.dircmp
andfilecmp.cmpfiles()
. Patch by Bénédikt Tran.gh-121650:
email
headers with embedded newlines are now quoted on output. Thegenerator
will now refuse to serialize (write) headers that are unsafely folded or delimited; seeverify_generated_headers
. (Contributed by Bas Bloemsaat and Petr Viktorin in gh-121650.)gh-122332: Fixed segfault with
asyncio.Task.get_coro()
when using an eager task factory.gh-105733:
ctypes.ARRAY()
is now soft deprecated: it no longer emits deprecation warnings and is not scheduled for removal.gh-122213: Add notes for pickle serialization errors that allow to identify the source of the error.
gh-119180: As part of PEP 749, add the following attributes for customizing evaluation of annotation scopes:
evaluate_value
ontyping.TypeAliasType
evaluate_bound
,evaluate_constraints
, andevaluate_default
ontyping.TypeVar
evaluate_default
ontyping.ParamSpec
evaluate_default
ontyping.TypeVarTuple
gh-119180: Fix handling of classes with custom metaclasses in
annotationlib.get_annotations
.gh-122170: Handle
ValueError
s raised byos.stat()
inlinecache
. Patch by Bénédikt Tran.gh-122163: Add notes for JSON serialization errors that allow to identify the source of the error.
gh-122129: Improve support of method descriptors and wrappers in the help title.
gh-122145: Fix an issue when reporting tracebacks corresponding to Python code emitting an empty AST body. Patch by Nikita Sobolev and Bénédikt Tran.
gh-121723: Make
logging.config.dictConfig()
accept any object implementing the Queue public API. See the queue configuration section for details. Patch by Bénédikt Tran.gh-82951: Serializing objects with complex
__qualname__
(such as unbound methods and nested classes) by name no longer involves serializing parent objects by value in pickle protocols < 4.gh-120754:
Pathlib.read_bytes
no longer opens the file in Python's buffered I/O mode. This reduces overheads as the code reads a file in whole leading to a modest speedup.gh-113785:
csv
now correctly parses numeric fields (when used withcsv.QUOTE_NONNUMERIC
orcsv.QUOTE_STRINGS
) which start with an escape character.gh-122088:
@warnings.deprecated
now copies the coroutine status of functions and methods so thatinspect.iscoroutinefunction()
returns the correct result.gh-122081: Fix a crash in the
decimal.IEEEContext()
optional function available via theEXTRA_FUNCTIONALITY
configuration flag.gh-73991: Add
pathlib.Path.move()
, which moves a file or directory tree.gh-121268: Remove workarounds for non-IEEE 754 systems in
cmath
.gh-119698: Due to the lack of interest for
symtable.Class.get_methods()
, the method is marked as deprecated and will be removed in Python 3.16. Patch by Bénédikt Tran.gh-121889: Adjusts
cmath.acosh(complex('0+nanj'))
for recent C standards.gh-121804: Correctly show error locations, when
SyntaxError
raised in new repl. Patch by Sergey B Kirpichev.gh-120930: Fixed a bug introduced by gh-92081 that added an incorrect extra blank to encoded words occurring in wrapped headers.
gh-57141: The shallow argument to
filecmp.dircmp
(new in Python 3.13) is now keyword-only.gh-121245: Simplify handling of the history file in
site.register_readline()
helper. TheCAN_USE_PYREPL
variable now will be initialized, when imported. Patch by Sergey B Kirpichev.gh-121486:
math
functionsisqrt()
,log()
,log2()
andlog10()
now support integers larger than2**2**32
on 32-bit platforms.gh-121474: Fix missing sanity check for
parties
arg inthreading.Barrier
constructor. Patch by Clinton Christian (pygeek).gh-121450: Hard-coded breakpoints (
breakpoint()
andpdb.set_trace()
) now reuse the most recentPdb
instance that callsPdb.set_trace()
, instead of creating a new one each time. As a result, all the instance specific data likedisplay
andcommands
are preserved across Hard-coded breakpoints.gh-119169: Slightly speed up
os.walk()
by simplifying exception handling.gh-121423: Improve import time of
socket
by lazy importing modules and writingsocket.errorTab
as a constant.gh-59110:
zipimport
supports now namespace packages when no directory entry exists.gh-119004: Fix a crash in OrderedDict.__eq__ when operands are mutated during the check. Patch by Bénédikt Tran.
gh-121313: Limit the reading size in the
multiprocessing.connection.Connection
class to 64 KiB to prevent memory overallocation and unnecessary memory management system calls.gh-121332: Fix constructor of
ast
nodes with custom_attributes
. Previously, passing custom attributes would raise aDeprecationWarning
. Passing arguments to the constructor that are not in_fields
or_attributes
remains deprecated. Patch by Jelle Zijlstra.gh-121245: Fix a bug in the handling of the command history of the new REPL that caused the history file to be wiped at REPL exit.
gh-121210: Handle AST nodes with missing runtime fields or attributes in
ast.compare()
. Patch by Bénédikt Tran.gh-121163: Add support for
all
as an validaction
forwarnings.simplefilter()
andwarnings.filterwarnings()
.gh-121151: Fix wrapping of long usage text of arguments inside a mutually exclusive group in
argparse
.gh-121141: Add support for
copy.replace()
to AST nodes. Patch by Bénédikt Tran.gh-87744: Fix waitpid race while calling
send_signal()
in asyncio. Patch by Kumar Aditya.gh-121027: Add a future warning in
functools.partial.__get__()
. In future Python versionsfunctools.partial
will be a method descriptor.gh-121027: Make the
functools.partial
object a method descriptor.gh-117784: CPython now detects whether its linked TLS library supports TLSv1.3 post-handshake authentication and disables that feature if support is lacking.
gh-121025: Improve the
__repr__()
offunctools.partialmethod
. Patch by Bénédikt Tran.gh-121018: Fixed issues where
argparse.ArgumentParser.parse_args()
did not honorexit_on_error=False
. Based on patch by Ben Hsing.gh-119614: Fix truncation of strings with embedded null characters in some internal operations in
tkinter
.gh-120910: When reading installed files from an egg, use
relative_to(walk_up=True)
to honor files installed outside of the installation root.gh-61103: Support float complex, double complex and long double complex C types in
ctypes
asc_float_complex
,c_double_complex
andc_longdouble_complex
if the compiler has C11 complex arithmetic. Patch by Sergey B Kirpichev.gh-120888: Upgrade pip wheel bundled with ensurepip (pip 24.1.1)
gh-101830: Accessing the
tkinter
object's string representation no longer converts the underlying Tcl object to a string on Windows.gh-120678: Fix regression in the new REPL that meant that globals from files passed using the
-i
argument would not be included in the REPL's global namespace. Patch by Alex Waygood.gh-120811: Fix possible memory leak in
contextvars.Context.run()
.gh-120782: Fix wrong references of the
datetime
types after reloading the module.gh-120713:
datetime.datetime.strftime()
now 0-pads years with less than four digits for the format specifiers%Y
and%G
on Linux. Patch by Ben Hsinggh-120769: Make empty line in
pdb
repeats the last command even when the command is fromcmdqueue
.gh-120780: Show string value of LOAD_SPECIAL oparg in
dis
output.gh-41431: Add
datetime.time.strptime()
anddatetime.date.strptime()
. Contributed by Wannes Boeykens.gh-120743: Soft deprecate
os.popen()
andos.spawn*
functions. They should no longer be used to write new code. Thesubprocess
module is recommended instead. Patch by Victor Stinner.gh-120732: Fix
name
passing tounittest.mock.Mock
object when usingunittest.mock.create_autospec()
.gh-111259:
re
now handles patterns like"[\s\S]"
or"\s|\S"
which match any character as effectively as a dot with theDOTALL
modifier ("(?s:.)"
).gh-120683: Fix an error in
logging.LogRecord
, when the integer part of the timestamp is rounded up, while the millisecond calculation truncates, causing the log timestamp to be wrong by up to 999 ms (affected roughly 1 in 8 million timestamps).gh-118710:
ipaddress.IPv4Address
andipaddress.IPv6Address
attributesversion
andmax_prefixlen
are now available on the class.gh-120633: Move scrollbar and remove tear-off menus in turtledemo.
gh-120606: Allow users to use EOF to exit
commands
definition inpdb
gh-120284: Allow
asyncio.Runner.run()
to accept awaitable objects instead of simply coroutines.gh-120541: Improve the prompt in the "less" pager when
help()
is called with non-string argument.gh-120495: Fix incorrect exception handling in Tab Nanny. Patch by Wulian233.
gh-120388: Improve a warning message when a test method in
unittest
returns something other thanNone
. Now we show the returned object type and optional asyncio-related tip.gh-120381: Correct
inspect.ismethoddescriptor()
to check also for the lack of__delete__()
. Patch by Jan Kaliszewski.gh-90425: The OS byte in gzip headers is now always set to 255 when using
gzip.compress()
.gh-120343: Fix column offset reporting for tokens that come after multiline f-strings in the
tokenize
module.gh-119180: As part of implementing PEP 649 and PEP 749, add a new module
annotationlib
. Add support for unresolved forward references in annotations todataclasses
,typing.TypedDict
, andtyping.NamedTuple
.gh-119600: Fix
unittest.mock.patch()
to not read attributes of the target whennew_callable
is set. Patch by Robert Collins.gh-120289: Fixed the use-after-free issue in
cProfile
by disallowingdisable()
andclear()
in external timers.gh-82017: Added support for converting any objects that have the
as_integer_ratio()
method to aFraction
.gh-114053: Fix edge-case bug where
typing.get_type_hints()
would produce incorrect results if type parameters in a class scope were overridden by assignments in a class scope andfrom __future__ import annotations
semantics were enabled. Patch by Alex Waygood.gh-114053: Fix erroneous
NameError
when callinginspect.get_annotations()
witheval_str=True`
on a class that made use of PEP 695 type parameters in a module that hadfrom __future__ import annotations
at the top of the file. Patch by Alex Waygood.gh-120268: Prohibit passing
None
to pure-Pythondatetime.date.fromtimestamp()
to achieve consistency with C-extension implementation.gh-120244: Fix memory leak in
re.sub()
when the replacement string contains backreferences.gh-120254: Added
commands
argument topdb.set_trace()
which allows users to send debugger commands from the source file.gh-120211: Fix
tkinter.ttk
with Tcl/Tk 9.0.gh-71587: Fix crash in C version of
datetime.datetime.strptime()
when called again on the restarted interpreter.gh-117983: Defer the
threading
import inimportlib.util
until lazy loading is used.gh-120157: Remove unused constant
concurrent.futures._base._FUTURE_STATES
inconcurrent.futures
. Patch by Clinton Christian (pygeek).gh-120161:
datetime
no longer crashes in certain complex reference cycle situations.gh-119698: Fix
symtable.Class.get_methods()
and document its behaviour. Patch by Bénédikt Tran.gh-120121: Add
concurrent.futures.InvalidStateError
to module's__all__
.gh-119933: Add the
symtable.SymbolTableType
enumeration to represent the possible outputs of thesymtable.SymbolTable.get_type
method. Patch by Bénédikt Tran.gh-120029: Expose
symtable.Symbol
methodsis_free_class()
,is_comp_iter()
andis_comp_cell()
. Patch by Bénédikt Tran.gh-120108: Fix calling
copy.deepcopy()
onast
trees that have been modified to have references to parent nodes. Patch by Jelle Zijlstra.gh-120056: Add
socket.IP_RECVERR
andsocket.IP_RECVTTL
constants (both available since Linux 2.2). Andsocket.IP_RECVORIGDSTADDR
constant (available since Linux 2.6.29).gh-120057: Added the
os.environ.refresh()
method to updateos.environ
with changes to the environment made byos.putenv()
, byos.unsetenv()
, or made outside Python in the same process. Patch by Victor Stinner.gh-120029: Expose
symtable.Symbol.is_type_parameter()
in thesymtable
module. Patch by Bénédikt Tran.gh-119819: Fix regression to allow logging configuration with multiprocessing queue types.
gh-65454:
unittest.mock.Mock.attach_mock()
no longer triggers a call to aPropertyMock
being attached.gh-117142: The
ctypes
module may now be imported in all subinterpreters, including those that have their own GIL.gh-118835: Fix _pyrepl crash when using custom prompt with ANSI escape codes.
gh-81936:
help()
andshowtopic()
methods now respect a configured output argument topydoc.Helper
and not use the pager in such cases. Patch by Enrico Tröger.gh-117398: The
_datetime
module (C implementation fordatetime
) now supports being imported in multiple interpreters.gh-119824: Print stack entry in
pdb
when and only when user input is needed.gh-119838: In mixed arithmetic operations with
Fraction
and complex, the fraction is now converted tofloat
instead ofcomplex
.gh-119770: Make
termios
ioctl()
constants positive. Patch by Victor Stinner.gh-89727: Fix issue with
shutil.rmtree()
where aRecursionError
is raised on deep directory trees.gh-119577: The
DeprecationWarning
emitted when testing the truth value of anxml.etree.ElementTree.Element
now describes unconditionally returningTrue
in a future version rather than raising an exception in Python 3.14.gh-89727: Partially fix issue with
shutil.rmtree()
where aRecursionError
is raised on deep directory trees. A recursion error is no longer raised whenrmtree.avoids_symlink_attacks
is false.gh-93963: Remove deprecated names from
importlib.abc
as found inimportlib.resources.abc
.gh-119118: Fix performance regression in the
tokenize
module by caching theline
token attribute and calculating the column offset more efficiently.gh-89727: Fix issue with
os.fwalk()
where aRecursionError
was raised on deep directory trees by adjusting the implementation to be iterative instead of recursive.gh-119594: If one calls pow(fractions.Fraction, x, module) with modulo not None, the error message now says that the types are incompatible rather than saying pow only takes 2 arguments. Patch by Wim Jeantine-Glenn and Mark Dickinson.
gh-119588:
zipfile.Path.is_symlink
now assesses if the given path is a symlink.gh-119562: Remove
ast.Num
,ast.Str
,ast.Bytes
,ast.NameConstant
andast.Ellipsis
. They had all emitted deprecation warnings since Python 3.12. Patch by Alex Waygood.gh-119555: Catch
SyntaxError
fromcompile()
in the runsource() method of the InteractiveColoredConsole. Patch by Sergey B Kirpichev.gh-118908: Limit exposed globals from internal imports and definitions on new REPL startup. Patch by Eugene Triguba and Pablo Galindo.
gh-117865: Improve the import time of the
ast
module by deferring the import ofre
. Patch by Jelle Zijlstra.gh-119127: Positional arguments of
functools.partial()
objects now support placeholders viafunctools.Placeholder
.gh-113892: Now, the method
sock_connect
ofasyncio.ProactorEventLoop
raises aValueError
if given socket is not in non-blocking mode, as well as in other loop implementations.gh-119506: Fix
io.TextIOWrapper.write()
method breaks internal buffer when the method is called again during flushing internal buffer.gh-69214: Fix
fcntl.ioctl()
request parameter: use anunsigned long
instead of anunsigned int
for the request parameter offcntl.ioctl()
to support requests larger thanUINT_MAX
. Patch by Victor Stinner.gh-119105:
difflib
'sDIffer.compare()
(and so alsondiff
) can no longer be provoked into cubic-time behavior, or into unbounded recursion, and should generally be faster in ordinary cases too. Results may change in some cases, although that should be rare. Correctness of diffs is not affected. Some similar lines far apart may be reported as deleting one and adding the other, where before they were displayed on adjacent output lines with markup showing the intraline differences.gh-119443: The interactive REPL no longer runs with
from __future__ import annotations
enabled. Patch by Jelle Zijlstra.gh-119461: Add
socket.VMADDR_CID_LOCAL
constant. Patch by Victor Stinner.gh-117398: Objects in the datetime C-API are now all statically allocated, which means better memory safety, especially when the module is reloaded. This should be transparent to users.
gh-118894:
asyncio
REPL now has the same capabilities as PyREPL.gh-118911: In PyREPL, updated
maybe-accept
's logic so that if the user hits Enter twice, they are able to terminate the block even if there's trailing whitespace. Also, now when the user hits arrow up, the cursor is on the last functional line. This matches IPython's behavior. Patch by Aya Elsayed.gh-115225: Raise error on certain technically valid but pathological ISO 8601 strings passed to
datetime.time.fromisoformat()
that were previously parsed incorrectly.gh-111201: Remove dependency to
readline
from the new Python REPL.gh-119189: When using the
**
operator orpow()
withFraction
as the base and an exponent that is not rational, a float, or a complex, the fraction is no longer converted to a float.gh-119174: Fix high DPI causes turtledemo(turtle-graphics examples) windows blurry Patch by Wulian233 and Terry Jan Reedy
gh-119121: Fix a NameError happening in
asyncio.staggered.staggered_race
. This function is now tested.gh-119105:
difflib.Differ
is much faster for some cases of diffs where many pairs of lines are equally similar.gh-119113: Fix issue where
pathlib.PurePath.with_suffix()
didn't raiseTypeError
when givenNone
as a suffix.gh-118643: Fix an AttributeError in the
email
module when re-fold a long address list. Also fix more cases of incorrect encoding of the address separator in the address list.gh-73991: Add
pathlib.Path.copy()
, which copies a file or directory to another.gh-58933: Make
pdb
return to caller frame correctly whenf_trace
of the caller frame is not setgh-82805: Support single-dot file extensions in
pathlib.PurePath.suffix
and related attributes and methods. For example, thesuffixes
ofPurePath('foo.bar.')
are now['.bar', '.']
rather than[]
. This brings file extension splitting in line withos.path.splitext()
.gh-118924: Remove
version
andversion_info
fromsqlite3
. Patch by Hugo van Kemenade.gh-118928: Disallow using a sequence of parameters with named placeholders in
sqlite3
queries. Patch by Erlend E. Aasland.gh-118895: Setting attributes on
typing.NoDefault
now raisesAttributeError
instead ofTypeError
.gh-118868: Fixed issue where kwargs were no longer passed to the logging handler QueueHandler
gh-118827: Remove deprecated
Quoter
class fromurllib.parse
. It had previously raised aDeprecationWarning
since Python 3.11. Patch by Nikita Sobolev.gh-118824: Remove deprecated
pty.master_open()
andpty.slave_open()
. Usepty.openpty()
instead. Patch by Nikita Sobolev.gh-118851:
ctx
arguments to the constructors ofast
node classes now default toast.Load()
. Patch by Jelle Zijlstra.gh-101588: Remove copy, deepcopy, and pickle from itertools. These had previously raised a DeprecationWarning since Python 3.12.
gh-118805: Remove type, choices, and metavar parameters of
argparse.BooleanOptionalAction
. They were deprecated since Python 3.12.gh-118803:
typing.ByteString
andcollections.abc.ByteString
are removed. They had previously raised aDeprecationWarning
since Python 3.12.gh-118798: The isdst parameter has been removed from
email.utils.localtime()
. Patch by Hugo van Kemenade.gh-118760: Restore the default value of
tkiter.wantobjects
to1
.gh-118760: Fix errors in calling Tkinter bindings on Windows.
gh-74033: Drop support for passing keyword arguments to
pathlib.Path
.gh-101357: Suppress all
OSError
exceptions frompathlib.Path.exists()
andis_*()
methods, rather than a selection of more common errors. The new behaviour is consistent withos.path.exists()
,os.path.isdir()
, etc. Usepathlib.Path.stat()
to retrieve the file status without suppressing exceptions.gh-78707: Drop support for passing additional positional arguments to
pathlib.PurePath.relative_to()
andis_relative_to()
.gh-118507: Fix
os.path.isfile()
on Windows for pipes. Speedupos.path.isjunction()
andos.path.lexists()
on Windows with a native implementation.gh-118772: Allow
typing.TypeVar
instances without a default to follow instances without a default in some cases. Patch by Jelle Zijlstra.gh-118714: Allow
restart
in post-mortem debugging ofpdb
. Removed restart message when the user quits pdb from post-mortem mode.gh-118673: Removed executable bits and shebang from stdlib modules.
gh-110863:
os.path.realpath()
now suppresses anyOSError
fromos.readlink()
when strict mode is disabled (the default).gh-118263: Speed up
os.path.splitroot()
&os.path.normpath()
with a direct C call.gh-110190: Fix ctypes structs with array on SPARC by setting
MAX_STRUCT_SIZE
to 32 in stgdict. Patch by Jakub Kulikgh-118033: Fix
dataclasses.dataclass()
not creating a__weakref__
slot when subclassingtyping.Generic
.gh-106531: In
importlib.resources
, sync with importlib_resources 6.3.2, including:MultiplexedPath
now expectsTraversable
paths, deprecating string arguments toMultiplexedPath
; Enabled support for resources in namespace packages in zip files; FixedNotADirectoryError
when calling files on a subdirectory of a namespace package.gh-115808: Add
operator.is_none()
andoperator.is_not_none()
functions.gh-114264: Improve performance of
copy.deepcopy()
by adding a fast path for atomic types.gh-113878: Add doc parameter to
dataclasses.field()
, so it can be stored and shown as a documentation / metadata. If@dataclass(slots=True)
is used, then the supplied string is availabl in the__slots__
dict. Otherwise, the supplied string is only available in the correspondingdataclasses.Field
object.In order to support this feature we are changing the
__slots__
format in dataclasses fromtuple
todict
when documentation / metadata is present.gh-113978: Ignore warnings on text completion inside REPL.
gh-113008: Correct argparse usage output for required, mutually exclusive groups containing a positional argument
gh-108172:
webbrowser
honors OS preferred browser on Linux when its desktop entry name contains the text of a known browser name.gh-109109: You can now get the raw TLS certificate chains from TLS connections via
ssl.SSLSocket.get_verified_chain()
andssl.SSLSocket.get_unverified_chain()
methods.Contributed by Mateusz Nowak.
gh-105623: Fix performance degradation in
logging.handlers.RotatingFileHandler
. Patch by Craig Robson.gh-102450: Add missing ISO-8601 24:00 alternative to midnight of next day to
datetime.datetime.fromisoformat()
anddatetime.time.fromisoformat()
. Patch by Izan "TizzySaurus" Robinson (tizzysaurus@gmail.com)gh-103956: Fix lack of newline characters in
trace
module output when line tracing is enabled but source code line for current frame is not available.gh-92081: Fix missing spaces in email headers when the spaces are mixed with encoded 8-bit characters.
gh-103194: Prepare Tkinter for C API changes in Tcl 8.7/9.0 to avoid
_tkinter.Tcl_Obj
being unexpectedly returned instead ofbool
,str
,bytearray
, orint
.gh-87106: Fixed handling in
inspect.Signature.bind()
of keyword arguments having the same name as positional-only arguments when a variadic keyword argument (e.g.**kwargs
) is present.gh-103134: Add additional methods to proxy objects in the
multiprocessing
module:clear()
andcopy()
for proxies oflist
fromkeys()
,reversed(d)
,d | {}
,{} | d
,d |= {'b': 2}
for proxies ofdict
bpo-45767: Fix integer conversion in
os.major()
,os.minor()
, andos.makedev()
. Support device numbers larger than2**63-1
. Support non-existent device number (NODEV
).bpo-44864: Do not translate user-provided strings in
argparse.ArgumentParser
.bpo-41843: Solaris now uses
os.sendfile()
fast-copy syscall for more efficientshutil
file copy related functions.bpo-15987: Implemented
ast.compare()
for comparing two ASTs. Patch by Batuhan Taskaya with some help from Jeremy Hylton.gh-67693: Fix
urllib.parse.urlunparse()
andurllib.parse.urlunsplit()
for URIs with path starting with multiple slashes and no authority. Based on patch by Ashwin Ramaswami.bpo-14074: Fix
argparse
metavar processing to allow positional arguments to have a tuple metavar.
IDLE¶
gh-112938: Fix uninteruptable hang when Shell gets rapid continuous output.
gh-122482: Change About IDLE to direct users to discuss.python.org instead of the now unused idle-dev email and mailing list.
gh-78889: Stop Shell freezes by blocking user access to non-method sys.stdout.shell attributes, which are all private.
gh-120083: Add explicit black IDLE Hovertip foreground color needed for recent macOS. Fixes Sonoma showing unreadable white on pale yellow. Patch by John Riggles.
gh-120104: Fix padding in config and search dialog windows in IDLE.
Documentation¶
gh-124720: Update "Using Python on a Mac" section of the "Python Setup and Usage" document and include information on installing free-threading support.
gh-124457: Remove coverity scan from the CPython repo. It has not been used since 2020 and is currently unmaintained.
gh-116622: Add an Android platform guide, and flag modules not available on Android.
gh-123976: Refresh docs around custom providers.
gh-121277: Writers of CPython's documentation can now use
next
as the version for theversionchanged
,versionadded
,deprecated
directives.gh-117765: Improved documentation for
unittest.mock.patch.dict()
gh-121749: Fix documentation for
PyModule_AddObjectRef()
.gh-120012: Clarify the behaviours of
multiprocessing.Queue.empty()
andmultiprocessing.SimpleQueue.empty()
on closed queues. Patch by Bénédikt Tran.gh-119574: Added some missing environment variables to the output of
--help-env
.
Core and Builtins¶
gh-125008: Fix
tokenize.untokenize()
producing invalid syntax for double braces preceded by certain escape characters.gh-124871: Fix compiler bug (in some versions of 3.13) where an assertion fails during reachability analysis.
gh-118093: Improve the experimental JIT compiler's ability to stay "on trace" when encountering highly-biased branches.
gh-124642: Fixed scalability issue in free-threaded builds for lock-free reads from dictionaries in multi-threaded scenarios
gh-116510: Fix a bug that can cause a crash when sub-interpreters use "basic" single-phase extension modules. Shared objects could refer to PyGC_Head nodes that had been freed as part of interpreter cleanup.
gh-119180: The
__main__
module no longer always contains an__annotations__
dictionary in its global namespace.gh-124547: When deallocating an object with inline values whose
__dict__
is still live: if memory allocation for the inline values fails, clear the dictionary. Prevents an interpreter crash.gh-124513: Fix a crash in FrameLocalsProxy constructor: check the number of arguments. Patch by Victor Stinner.
gh-124442: Fix nondeterminism in compilation by sorting the value of
__static_attributes__
. Patch by kp2pml30.gh-124285: Fix bug where
bool(a)
can be invoked more than once during the evaluation of a compound boolean expression.gh-123856: Fix PyREPL failure when a keyboard interrupt is triggered after using a history search
gh-65961: Deprecate the setting and using
__package__
and__cached__
.gh-119726: The JIT now generates more efficient code for calls to C functions resulting in up to 0.8% memory savings and 1.5% speed improvement on AArch64. Patch by Diego Russo.
gh-122878: Use the
pager
binary, if available (e.g. on Debian and derivatives), to display REPLhelp()
.gh-124188: Fix reading and decoding a line from the source file witn non-UTF-8 encoding for syntax errors raised in the compiler.
gh-124027: Support
<page up>
,<page down>
, and<delete>
keys in the Python REPL when$TERM
is set tovt100
.gh-124022: Fix bug where docstring is removed from classes in interactive mode.
gh-123958: docstrings are now removed from the optimized AST in optimization level 2.
gh-123923: The
f_executable
field in the internal_PyInterpreterFrame
struct now uses a tagged pointer. Profilers and debuggers that uses this field should clear the least significant bit to recover the PyObject* pointer.gh-77894: Fix possible crash in the garbage collector when it tries to break a reference loop containing a
memoryview
object. Now amemoryview
object can only be cleared if there are no buffers that refer it.gh-120221: asyncio REPL is now again properly recognizing KeyboardInterrupts. Display of exceptions raised in secondary threads is fixed.
gh-119310: Allow the new interactive shell to read history files written with the editline library that use unicode-escaped entries. Patch by aorcajo and Łukasz Langa.
gh-123572: Fix key mappings for various F-keys in Windows for the new REPL. Patch by devdanzin
gh-123614: Add
turtle.save()
to easily save Turtle drawings as PostScript files. Patch by Marie Roald and Yngve Mardal Moe.gh-123339: Setting the
__module__
attribute for a class now removes the__firstlineno__
item from the type's dict, so they will no longer be inconsistent.gh-119034: Change
<page up>
and<page down>
keys of the Python REPL to history search forward/backward. Patch by Victor Stinner.gh-123562: Improve
SyntaxError
message for usingcase ... as ...
with not a name.gh-123545: Fix a double decref in rare cases on experimental JIT builds.
gh-123484: Fix
_Py_DebugOffsets
for long objects to be relative to the start of the object rather than the start of a subobject.gh-123446: Fix empty function name in
TypeError
when builtin magic methods are used without the required args.gh-123440: Improve
SyntaxError
message for usingexcept as
with not a name.gh-116017: Improved JIT memory consumption by periodically freeing memory used by infrequently-executed code. This change is especially likely to improve the memory footprint of long-running programs.
gh-123344: Add AST optimizations for type parameter defaults.
gh-123321: Prevent Parser/myreadline race condition from segfaulting on multi-threaded use. Patch by Bar Harel and Amit Wienner.
gh-123177: Fix a bug causing stray prompts to appear in the middle of wrapped lines in the new REPL.
gh-122982: Extend the deprecation period for bool inversion (
~
) by two years.gh-123271: Make concurrent iterations over the same
zip()
iterator safe under free-threading.gh-123275: Support
-X gil=1
andPYTHON_GIL=1
on non-free-threaded builds.gh-123177: Deactivate line wrap in the Apple Terminal via a ANSI escape code. Patch by Pablo Galindo
gh-123229: Fix valgrind warning by initializing the f-string buffers to 0 in the tokenizer. Patch by Pablo Galindo
gh-122298: Restore printout of GC stats when
gc.set_debug(gc.DEBUG_STATS)
is called. This feature was accidentally removed when implementing incremental GC.gh-121804: Correctly show error locations when a
SyntaxError
is raised in the basic REPL. Patch by Sergey B Kirpichev.gh-115776: Enables inline values (Python's equivalent of hidden classes) on any class who's instances are of a fixed size.
gh-123142: Fix too-wide source location in exception tracebacks coming from broken iterables in comprehensions.
gh-123048: Fix a bug where pattern matching code could emit a
JUMP_FORWARD
with no source location.gh-118093: Break up
CALL_ALLOC_AND_ENTER_INIT
into micro-ops and relax requirement for exact args, in order to increase the amount of code supported by tier 2.gh-123123: Fix displaying
SyntaxError
exceptions covering multiple lines. Patch by Pablo Galindogh-123083: Fix a potential use-after-free in
STORE_ATTR_WITH_HINT
.gh-123022: Fix crash in free-threaded build when calling
Py_Initialize()
from a non-main thread.gh-118093: Add three specializations for
CALL_KW
:CALL_KW_PY
for calls to Python functionsCALL_KW_BOUND_METHOD
for calls to bound methodsCALL_KW_NON_PY
for all other calls
gh-122821: Make sure that branches in
while
statements have consistent offsets forsys.monitoring
.while
statements are now compiled with a simple jump at the end of the body, instead of duplicating the test.gh-122907: Building with
HAVE_DYNAMIC_LOADING
now works as well as it did in 3.12. Existing deficiences will be addressed separately. (See https://github.com/python/cpython/issues/122950.)gh-122888: Fix crash on certain calls to
str()
with positional arguments of the wrong type. Patch by Jelle Zijlstra.gh-118093: Improve the experimental JIT's handling of polymorphic code.
gh-122697: Fixed memory leaks at interpreter shutdown in the free-threaded build, and also reporting of leaked memory blocks via
-X showrefcount
.gh-116622: Fix Android stdout and stderr messages being truncated or lost.
gh-122527: Fix a crash that occurred when a
PyStructSequence
was deallocated after its type's dictionary was cleared by the GC. The type'stp_basicsize
now accounts for non-sequence fields that aren't included in thePy_SIZE
of the sequence.gh-122445: Add only fields which are modified via self.* to
__static_attributes__
.gh-122417: In the free-threaded build, the reference counts for heap type objects are now partially stored in a distributed manner in per-thread arrays. This reduces contention on the heap type's reference count fields when creating or destroying instances of the same type from multiple threads concurrently.
gh-116090: Fix an issue in JIT builds that prevented some
for
loops from correctly firingRAISE
monitoring events.gh-122300: Preserve AST nodes for f-string with single-element format specifiers. Patch by Pablo Galindo
gh-120906:
frame.f_locals
now supports arbitrary hashable objects as keys.gh-122239: When a
list
,tuple
ordict
with too many elements is unpacked, show the actual length in the error message.gh-122245: Detection of writes to
__debug__
is moved from the compiler's codegen stage to the symtable. This means that these errors are now detected even in code that is optimized away before codegen (such as assertions with the-O
command line option).gh-122234: Specializations for sums with float and complex inputs in
sum()
now always use compensated summation. Also, for integer items in above specializations:PyLong_AsDouble()
is used, instead ofPyLong_AsLongAndOverflow()
. Patch by Sergey B Kirpichev.gh-122208: Dictionary watchers now only deliver the PyDict_EVENT_ADDED event when the insertion is in a known good state to succeed.
gh-122160: Remove the
BUILD_CONST_KEY_MAP
opcode. UseBUILD_MAP
instead.gh-122029: Emit
c_call
events insys.setprofile()
when aPyMethodObject
pointing to aPyCFunction
is called.gh-122026: Fix a bug that caused the tokenizer to not correctly identify mismatched parentheses inside f-strings in some situations. Patch by Pablo Galindo
gh-99108: Python's hashlib now unconditionally uses the vendored HACL* library for Blake2. Python no longer accepts libb2 as an optional dependency for Blake2.
We refreshed HACL* to the latest version, and now vendor HACL*'s 128-bit and 256-bit wide vector implementations for Blake2, which are used on x86/x64 toolchains when the required CPU features are available at runtime.
HACL*'s 128-bit wide vector implementation of Blake2 can also run on ARM NEON and Power8, but lacking evidence of a performance gain, these are not enabled (yet).
gh-121999: The default extraction filter for the
tarfile
module is now set to'data'
.gh-121860: Fix crash when rematerializing a managed dictionary after it was deleted.
gh-121795: Improve performance of set membership testing,
set.remove()
andset.discard()
when the argument is a set.gh-121814: Fixed the SegFault when
PyEval_SetTrace()
is used with no Python frame on stack.gh-121295: Fix PyREPL console getting into a blocked state after interrupting a long paste
gh-121794: Fix bug in free-threaded Python where a resurrected object could lead to a negative ref count assertion failure.
gh-121657: Improve the
SyntaxError
message if the user tries to useyield from
outside a function.gh-121609: Fix pasting of characters containing unicode character joiners in the new REPL. Patch by Marta Gomez Macias
gh-121297: Previously, incorrect usage of
await
or asynchronous comprehensions in code removed by the-O
option was not flagged by the Python compiler. Now, such code raisesSyntaxError
. Patch by Jelle Zijlstra.gh-117482: Unexpected slot wrappers are no longer created for builtin static types in subinterpreters.
gh-121562: Optimized performance of hex_from_char by replacing switch-case with a lookup table
gh-121499: Fix a bug affecting how multi-line history was being rendered in the new REPL after interacting with the new screen cache. Patch by Pablo Galindo
gh-121497: Fix a bug that was preventing the REPL to correctly respect the history when an input hook was set. Patch by Pablo Galindo
gh-121012: Tier 2 execution now ensures that list iterators remain exhausted, once they become exhausted.
gh-121439: Allow tuples of length 20 in the freelist to be reused.
gh-121288:
ValueError
messages forlist.index()
,range.index()
,deque.index()
,deque.remove()
andShareableList.index()
no longer contain the repr of the searched value (which can be arbitrary large) and are consistent with error messages for otherindex()
andremove()
methods.gh-121368: Fix race condition in
_PyType_Lookup
in the free-threaded build due to a missing memory fence. This could lead to_PyType_Lookup
returning incorrect results on arm64.gh-121149: Added specialization for summation of complexes, this also improves accuracy of builtin
sum()
for such inputs. Patch by Sergey B Kirpichev.gh-121130: Fix f-strings with debug expressions in format specifiers. Patch by Pablo Galindo
gh-121381: Remove
subprocess._USE_VFORK
escape hatch code and documentation. It was added just in case, and doesn't have any known cases that require it.gh-119726: Optimize code layout for calls to C functions from the JIT on AArch64. Patch by Diego Russo.
gh-121115:
PyLong_AsNativeBytes()
no longer uses__index__()
methods by default. ThePy_ASNATIVEBYTES_ALLOW_INDEX
flag has been added to allow it.gh-120838:
Py_Finalize()
andPy_FinalizeEx()
now always run with the main interpreter active.gh-113433: Subinterpreters now get cleaned up automatically during runtime finalization.
gh-119726: Improve the speed and memory use of C function calls from JIT code on AArch64. Patch by Diego Russo
gh-116017: Simplify the warmup mechanism used for "side exits" in JIT code, resulting in slightly better performance and slightly lower memory usage for most platforms.
gh-98442: Fix too wide source locations of the cleanup instructions of a with statement.
gh-120754: Reduce the number of system calls invoked when reading a whole file (ex.
open('a.txt').read()
). For a sample program that reads the contents of the 400+.rst
files in the cpython repositoryDoc
folder, there is an over 10% reduction in system call count.gh-119462: Make sure that invariants of type versioning are maintained: * Superclasses always have their version number assigned before subclasses * The version tag is always zero if the tag is not valid. * The version tag is always non-if the tag is valid.
gh-120437: Fix
_CHECK_STACK_SPACE
optimization problems introduced in gh-118322.gh-120722: Correctly set the bytecode position on return instructions within lambdas. Patch by Jelle Zijlstra.
gh-120367: Fix bug where compiler creates a redundant jump during pseudo-op replacement. Can only happen with a synthetic AST that has a try on the same line as the instruction following the exception handler.
gh-120507: Remove the
BEFORE_WITH
andBEFORE_ASYNC_WITH
instructions. Add the newLOAD_SPECIAL
instruction. Generate code forwith
andasync with
statements using the new instruction.gh-113993: Strings interned with
sys.intern()
are again garbage-collected when no longer used, as per the documentation. Strings interned with the C functionPyUnicode_InternInPlace()
are still immortal. Internals of the string interning mechanism have been changed. This may affect performance and identities ofstr
objects.gh-120485: Add an override of
allow_reuse_port
on classes subclassingsocketserver.TCPServer
whereallow_reuse_address
is also overridden.gh-120384: Fix an array out of bounds crash in
list_ass_subscript
, which could be invoked via some specifically tailored input: including concurrent modification of a list object, where one thread assigns a slice and another clears it.gh-120367: Fix crash in compiler on code with redundant NOPs and JUMPs which show up after exception handlers are moved to the end of the code.
gh-120380: Fix Python implementation of
pickle.Pickler
forbytes
andbytearray
objects when using protocol version 5. Patch by Bénédikt Tran.gh-120397: Improve the throughput by up to two times for the
str.count()
,bytes.count()
andbytearray.count()
methods for counting single characters.gh-120221: Deliver real signals on Ctrl-C and Ctrl-Z in the new REPL. Patch by Pablo Galindo
gh-120346: Respect
PYTHON_BASIC_REPL
when running in interactive inspect mode (python -i
). Patch by Pablo Galindogh-93691: Fix source locations of instructions generated for the iterator of a for statement.
gh-120198: Fix a crash when multiple threads read and write to the same
__class__
of an object concurrently.gh-120298: Fix use-after free in
list_richcompare_impl
which can be invoked via some specifically tailored evil input.gh-119666: Fix a compiler crash in the case where two comprehensions in class scope both reference
__class__
.gh-119726: JIT: Re-use trampolines on AArch64 when creating stencils. Patch by Diego Russo
gh-120225: Fix crash in compiler on empty block at end of exception handler.
gh-93691: Fix source locations of instructions generated for with statements.
gh-120097:
FrameLocalsProxy
now subclassescollections.abc.Mapping
and can be matched as a mapping inmatch
statementsgh-120080: Direct call to the
int.__round__()
now acceptsNone
as a valid argument.gh-119933: Improve
SyntaxError
messages for invalid expressions in a type parameters bound, a type parameter constraint tuple or a default type parameter. Patch by Bénédikt Tran.gh-119724: Reverted improvements to error messages for
elif
/else
statements not matching any valid statements, which made in hard to locate the syntax errors inside thoseelif
/else
blocks.gh-119879: String search is now slightly faster for certain cases. It now utilizes last character gap (good suffix rule) for two-way periodic needles.
gh-119842: Honor
PyOS_InputHook()
in the new REPL. Patch by Pablo Galindogh-119180:
classmethod()
andstaticmethod()
now wrap the__annotations__
and__annotate__
attributes of their underlying callable lazily. See PEP 649. Patch by Jelle Zijlstra.gh-119821: Fix execution of annotation scopes within classes when
globals
is set to a non-dict. Patch by Jelle Zijlstra.gh-118934: Make
PyEval_GetLocals
return borrowed referencegh-119740: Remove the previously-deprecated delegation of
int()
to__trunc__()
.gh-119689: Generate stack effect metadata for pseudo instructions from bytecodes.c.
gh-109218:
complex()
accepts now a string only as a positional argument. Passing a complex number as the "real" or "imag" argument is deprecated; it should only be passed as a single positional argument.gh-119548: Add a
clear
command to the REPL. Patch by Pablo Galindogh-111999: Fix the signature of
str.format_map()
.gh-119560: An invalid assert in beta 1 has been removed. The assert would fail if
PyState_FindModule()
was used in an extension module's init function before the module def had been initialized.gh-119369: Fix deadlock during thread deletion in free-threaded build, which could occur when the GIL was enabled at runtime.
gh-119525: Fix deadlock involving
_PyType_Lookup()
cache in the free-threaded build when the GIL is dynamically enabled at runtime.gh-119258: Eliminate type version guards in the tier two interpreter.
Note that setting the
tp_version_tag
manually (which has never been supported) may result in crashes.gh-119311: Fix bug where names are unexpectedly mangled in the bases of generic classes.
gh-119395: Fix bug where names appearing after a generic class are mangled as if they are in the generic class.
gh-119372: Correct invalid corner cases in complex division (resulted in
(nan+nanj)
output), e.g.1/complex('(inf+infj)')
. Patch by Sergey B Kirpichev.gh-119180: Evaluation of annotations is now deferred. See PEP 649 for details.
gh-119180: Replace
LOAD_ASSERTION_ERROR
opcode withLOAD_COMMON_CONSTANT
and add support forNotImplementedError
.gh-119213: Non-builtin modules built with argument clinic were crashing if used in a subinterpreter before the main interpreter. The objects that were causing the problem by leaking between interpreters carelessly have been fixed.
gh-119011: Fixes
type.__type_params__
to return an empty tuple instead of a descriptor.gh-118692: Avoid creating unnecessary
StopIteration
instances for monitoring.gh-119180: Add an
__annotate__
attribute to functions, classes, and modules as part of PEP 649. Patch by Jelle Zijlstra.gh-119049: Fix displaying the source line for warnings created by the C API if the
warnings
module had not yet been imported.gh-119057: Improve
ZeroDivisionError
error message. Now, all error messages are harmonized: all/
,//
, and%
operations just use "division by zero" message. And0 ** -1
operation uses "zero to a negative power".gh-118844: Fix build failures when configuring with both
--disable-gil
and--enable-experimental-jit
.gh-118921: Add
copy()
method forFrameLocalsProxy
which returns a snapshotdict
for local variables.gh-117657: Fix data races on the field that stores a pointer to the interpreter's main thread that occur in free-threaded builds.
gh-118750: If the C version of the
decimal
module is available,int(str)
now uses it to supply an asymptotically much faster conversion. However, this only applies if the string contains over about 2 million digits.gh-118767: Using
NotImplemented
in a boolean context now raisesTypeError
. Contributed by Jelle Zijlstra.gh-118561: Fix race condition in free-threaded build where
list.extend()
could expose uninitialised memory to concurrent readers.gh-117139: Convert the Python evaluation stack to use internal stack references. The purpose is to support tagged pointers. In PEP 703, this will allow for its form of deferred reference counting. For both the default and free-threaded builds, this sets up the infrastructure for unboxed integers in the future.
gh-115801: Raise
TypeError
when passing a string todifflib.unified_diff()
anddifflib.context_diff()
.gh-117558: Improve error messages when a string, bytes or bytearray object of length 1 is expected.
gh-117195: Avoid assertion failure for debug builds when calling
object.__sizeof__(1)
gh-116022: Improve the
__repr__()
output ofAST
nodes.gh-114091: Changed the error message for awaiting something that can't be awaited from "object <type> can't be used in an await expression" to "'<type>' object can't be awaited".
gh-113190:
Py_Finalize()
now deletes all interned strings.gh-84978: Add class methods
float.from_number()
andcomplex.from_number()
.gh-95144: Improve the error message from
a in b
whenb
is not a container to mention the term "container".bpo-24766: Fix handling of
doc
argument to subclasses ofproperty
.
C API¶
gh-123961: Convert the curses.window static type exposed by the
PyCursesWindow_Type
macro inInclude/py_curses.h
to a heap type. Patch by Bénédikt Tran.gh-124296:
PyDictObject
no longer maintains a private version tag fieldma_version_tag
per PEP 699. This field was originally added in Python 3.6 (PEP 509) and deprecated in Python 3.12.gh-124160: Fix crash when importing modules containing state and single-phase initialization in a subinterpreter.
gh-124153: Add
PyType_GetBaseByToken()
andPy_tp_token
slot for easier type checking, related to PEP 489 and PEP 630.gh-124127: In the limited C API 3.14 and newer,
Py_REFCNT()
is now implemented as an opaque function call to hide implementation details. Patch by Victor Stinner.gh-123880: Fixed a bug that prevented circular imports of extension modules that use single-phase initialization.
gh-123909:
PyType_FromSpec()
,PyType_FromSpecWithBases()
andPyType_FromModuleAndSpec()
will now fail if the metaclass of the new type has customtp_new
.gh-107954: Add functions to configure the Python initialization (PEP 741):
Patch by Victor Stinner.
gh-107954: Add functions to get and set the current runtime Python configuration:
Patch by Victor Stinner.
gh-123465:
Py_RELATIVE_OFFSET
is now allowed inPyMemberDef
for the special offset member"__vectorcalloffset__"
, as well as the discouraged special offset members"__dictoffset__"
and"__weaklistoffset__"
gh-100554: Added a slot
Py_tp_vectorcall
to settp_vectorcall
via thePyType_FromSpec()
function family. Limited API extensions can use this feature to provide more efficient vector call-based implementation of__new__
and__init__
.gh-122854: Add
Py_HashBuffer()
to compute and return the hash value of a buffer. Patch by Antoine Pitrou and Victor Stinner.gh-122728: Fix
PyEval_GetLocals()
to avoidSystemError
("bad argument to internal function"). Patch by Victor Stinner.gh-116622: Make
PyObject_Print
work around a bug in Android and OpenBSD which prevented it from throwing an exception when trying to write to a read-only stream.gh-105201: Add
PyIter_NextItem()
to replacePyIter_Next()
, which has an ambiguous return value. Patch by Irit Katriel and Erlend Aasland.gh-121489: Export private
_PyBytes_Join()
again.gh-121645: Add
PyBytes_Join(sep, iterable)
function, similar tosep.join(iterable)
in Python. Patch by Victor Stinner.gh-89364: Export the
PySignal_SetWakeupFd()
function. Previously, the function was documented but it couldn't be used in 3rd party code. Patch by Victor Stinner.gh-113993:
PyUnicode_InternInPlace()
no longer prevents its argument from being garbage collected.Several functions that take
char *
are now documented as possibly preventing string objects from being garbage collected; refer to their documentation for details:PyUnicode_InternFromString()
,PyDict_SetItemString()
,PyObject_SetAttrString()
,PyObject_DelAttrString()
,PyUnicode_InternFromString()
, andPyModule_Add*
convenience functions.gh-113601: Removed debug build assertions related to interning strings, which were falsely triggered by stable ABI extensions.
gh-112136: Restore the private
_PyArg_Parser
structure and the private_PyArg_ParseTupleAndKeywordsFast()
function, previously removed in Python 3.13 alpha 1. Patch by Victor Stinner.gh-120642: Remove the private
_Py_CODEUNIT
type from the public C API. The internalpycore_code.h
header should now be used to get this internal type. Patch by Victor Stinner.gh-120858:
PyDict_Next()
no longer locks the dictionary in the free-threaded build. The locking needs to be done by the caller around the entire iteration loop.gh-120642: Remove the following unstable functions:
PyUnstable_Replace_Executor()
PyUnstable_SetOptimizer()
PyUnstable_GetOptimizer()
PyUnstable_GetExecutor()
PyUnstable_Optimizer_NewCounter()
PyUnstable_Optimizer_NewUOpOptimizer()
Patch by Victor Stinner.
gh-120389: Add new functions to convert C
<stdint.h>
numbers from/to Pythonint
:Patch by Victor Stinner.
gh-120600: In the limited C API 3.14 and newer,
Py_TYPE()
is now implemented as an opaque function call to hide implementation details. Patch by Victor Stinner.gh-70278:
PyUnicode_FromFormat()
no longer produces the ending\ufffd
character for truncated C string when use precision with%s
and%V
. It now truncates the string before the start of truncated multibyte sequences.gh-119771: Set
errno
in_Py_c_pow()
on overflows. Patch by Sergey B Kirpichev.gh-119182: Add a new
PyUnicodeWriter
API to create a Pythonstr
object:Patch by Victor Stinner.
gh-119613: Soft deprecate the
Py_MEMCPY
macro: use directlymemcpy()
instead. Patch by Victor Stinner.gh-119775: Creating
immutable types
with mutable bases was deprecated since 3.12 and now raises aTypeError
.gh-119585: Fix crash when a thread state that was created by
PyGILState_Ensure()
calls a destructor that duringPyThreadState_Clear()
that calls back intoPyGILState_Ensure()
andPyGILState_Release()
. This might occur when in the free-threaded build or when using thread-local variables whose destructors callPyGILState_Ensure()
.gh-119613: Macros
Py_IS_NAN
,Py_IS_INFINITY
andPy_IS_FINITE
are soft deprecated.gh-119336: Restore the removed
_PyLong_NumBits()
function. It is used by the pywin32 project. Patch by Ethan Smithgh-119344: The critical section API is now public as part of the non-limited C API.
gh-119333: Add
PyContext_AddWatcher()
andPyContext_ClearWatcher()
APIs to register callbacks to receive notification on enter and exit of context objects.gh-119247: Added
Py_BEGIN_CRITICAL_SECTION_SEQUENCE_FAST
andPy_END_CRITICAL_SECTION_SEQUENCE_FAST
macros to make it possible to use PySequence_Fast APIs safely when free-threaded, and update str.join to work without the GIL using them.gh-111389: Add
PyHASH_MULTIPLIER
constant: prime multiplier used in string and various other hashes. Patch by Victor Stinner.gh-118771: Several C declarations with names that didn't start with the
Py
or_Py
prefixes, which were added by mistake in 3.13 alpha and beta releases, were moved to internal headers.gh-116984: Make mimalloc includes relative to the current file to avoid embedders or extensions needing to include
Internal/mimalloc
if they are already including internal CPython headers.gh-118789: Add
PyUnstable_Object_ClearWeakRefsNoCallbacks()
, which clears weakrefs without calling their callbacks.gh-118789: Restore
_PyWeakref_ClearRef
that was previously removed in Python 3.13 alpha 1.gh-117511: Make the
PyMutex
public in the non-limited C API.gh-116560: Add
PyLong_GetSign()
function. Patch by Sergey B Kirpichev.gh-97588: Fix creating bitfields in
ctypes
structures and unions. Fields no longer overlap.gh-87135: Attempting to acquire the GIL after runtime finalization has begun in a different thread now causes the thread to hang rather than terminate, which avoids potential crashes or memory corruption caused by attempting to terminate a thread that is running code not specifically designed to support termination. In most cases this hanging is harmless since the process will soon exit anyway.
The
PyThread_exit_thread
function is now deprecated. Its behavior is inconsistent across platforms, and it can only be used safely in the unlikely case that every function in the entire call stack has been designed to support the platform-dependent termination mechanism. It is recommended that users of this function change their design to not require thread termination. In the unlikely case that thread termination is needed and can be done safely, users may migrate to calling platform-specific APIs such aspthread_exit
(POSIX) or_endthreadex
(Windows) directly.
Build¶
gh-123990: Remove
WITH_FREELISTS
macro and--without-freelists
build configurationgh-124102: Update internal documentation under PCbuild, so it now correctly states that Windows requires VS2017 or later and Python 3.10 or later
gh-124043: Building using
--with-trace-refs
is (temporarily) disallowed when the GIL is disabled.gh-123418: Updated Android build to use OpenSSL 3.0.15.
gh-123297: Propagate the value of
LDFLAGS
toLDCXXSHARED
insysconfig
. Patch by Pablo Galindogh-121634: Allow for specifying the target compile triple for WASI.
gh-122578: Use WASI SDK 24 for testing.
gh-116622: Rename build variable
MODULE_LDFLAGS
back toLIBPYTHON
, as it's used by package build systems (e.g. Meson).gh-118943: Fix an issue where the experimental JIT could be built several times by the
make regen-all
target, leading to possible race conditions on heavily parallelized builds.gh-121996: Introduce ./configure --disable-safety and --enable-slower-safety options. Patch by Donghee Na.
gh-120522: Added a
--with-app-store-compliance
option to patch out known issues with macOS/iOS App Store review processes.gh-120371: Support WASI SDK 22 by explicitly skipping functions that are just stubs in wasi-libc.
gh-121731: Fix mimalloc compile error on GNU/Hurd
gh-121487: Fix deprecation warning for ATOMIC_VAR_INIT in mimalloc.
gh-121467: Fix a Makefile bug that prevented mimalloc header files from being installed.
gh-121103: On POSIX systems, excluding macOS framework installs, the lib directory for the free-threaded build now includes a "t" suffix to avoid conflicts with a co-located default build installation.
gh-120831: The default minimum iOS version was increased to 13.0.
gh-121082: Fix build failure when the developer use
--enable-pystats
arguments in configuration command after #118450.gh-120671: Fix failing configure tests due to a missing space when appending to CFLAGS.
gh-120602: Correctly handle LLVM installs with
LLVM_VERSION_SUFFIX
when building with--enable-experimental-jit
.gh-120688: On WASI in debug mode, Python is now built with compiler flag
-O3
instead of-Og
, to support more recursive calls. Patch by Victor Stinner.gh-118943: Fix a possible race condition affecting parallel builds configured with
--enable-experimental-jit
, in whichFileNotFoundError
could be caused by another process already movingjit_stencils.h.new
tojit_stencils.h
.gh-120326: On Windows, fix build error when
--disable-gil
and--experimental-jit
options are combined.gh-120291: Make the
python-config
shell script compatible with non-bash shells.gh-113565: Improve
curses
andcurses.panel
dependency checks in configure.gh-119729: On POSIX systems, the pkg-config (
.pc
) filenames now include the ABI flags, which may include debug ("d") and free-threaded ("t"). For example: *python-3.14.pc
(default, non-debug build) *python-3.14d.pc
(default, debug build) *python-3.14t.pc
(free-threaded build)gh-119400:
make_ssl_certs
, the script that prepares certificate data for the test suite, now allows specifying expiration dates.gh-115119: Fall back to the bundled libmpdec if a system version cannot be found.
gh-119132: Update
sys.version
to identify whether the build is default build or free-threading build. Patch By Donghee Na.gh-118836: Fix an
AssertionError
when building with--enable-experimental-jit
and the compiler emits aSHT_NOTE
section.gh-118943: Fix a possible race condition affecting parallel builds configured with
--enable-experimental-jit
, in which compilation errors could be caused by an incompletely-generated header file.
Python 3.13.0 beta 1¶
Release date: 2024-05-08
Security¶
Core and Builtins¶
gh-118414: Add instrumented opcodes to YIELD_VALUE assertion for tracing cases.
gh-117953: When a builtin or extension module is imported for the first time, while a subinterpreter is active, the module's init function is now run by the main interpreter first before import continues in the subinterpreter. Consequently, single-phase init modules now fail in an isolated subinterpreter without the init function running under that interpreter, whereas before it would run under the subinterpreter before failing, potentially leaving behind global state and callbacks and otherwise leaving the module in an inconsistent state.
gh-117549: Don't use designated initializer syntax in inline functions in internal headers. They cause problems for C++ or MSVC users who aren't yet using the latest C++ standard (C++20). While internal, pycore_backoff.h, is included (indirectly, via pycore_code.h) by some key 3rd party software that does so for speed.
gh-95382: Improve performance of
json.dumps()
andjson.dump()
when using the argument indent. Depending on the data the encoding usingjson.dumps()
with indent can be up to 2 to 3 times faster.gh-116322: In
--disable-gil
builds, the GIL will be enabled while loading C extension modules. If the module indicates that it supports running without the GIL, the GIL will be disabled once loading is complete. Otherwise, the GIL will remain enabled for the remainder of the interpreter's lifetime. This behavior does not apply if the GIL has been explicitly enabled or disabled withPYTHON_GIL
or-Xgil
.gh-118513: Fix incorrect
UnboundLocalError
when two comprehensions in the same function both reference the same name, and in one comprehension the name is bound while in the other it's an implicit global.gh-118518: Allow the Linux perf support to work without frame pointers using perf's advanced JIT support. The feature is activated when using the
PYTHON_PERF_JIT_SUPPORT
environment variable or when running Python with-Xperf_jit
. Patch by Pablo Galindo.gh-117514: Add
sys._is_gil_enabled()
function that returns whether the GIL is currently enabled. In the default build it always returnsTrue
because the GIL is always enabled. In the free-threaded build, it may returnTrue
orFalse
.gh-118164: Break a loop between the Python implementation of the
decimal
module and the Python code for integer to string conversion. Also optimize integer to string conversion for values in the range from 9_000 to 135_000 decimal digits.gh-118473: Fix
sys.set_asyncgen_hooks()
not to be partially set when raisingTypeError
.gh-118465: Compiler populates the new
__firstlineno__
field on a class with the line number of the first line of the class definition.gh-118492: Fix an issue where the type cache can expose a previously accessed attribute when a finalizer is run.
gh-117714: update
async_generator.athrow().close()
andasync_generator.asend().close()
to close their section of the underlying async generatorgh-111201: The interactive interpreter is now implemented in Python, which allows for a number of new features like colors, multiline input, history viewing, and paste mode. Contributed by Pablo Galindo, Łukasz Langa and Lysandros Nikolaou based on code from the PyPy project.
gh-74929: Implement PEP 667: converted
FrameType.f_locals
andPyFrame_GetLocals()
to return a write-through proxy object when the frame refers to a function or comprehension.gh-116767: Fix crash in compiler on 'async with' that has many context managers.
gh-118335: Change how to use the tier 2 interpreter. Instead of running Python with
-X uops
or setting the environment variablePYTHON_UOPS=1
, this choice is now made at build time by configuring with--enable-experimental-jit=interpreter
.Beware! This changes the environment variable to enable or disable micro-ops to
PYTHON_JIT
. The oldPYTHON_UOPS
is no longer used.gh-118306: Update JIT compilation to use LLVM 18
gh-118160: Annotation scopes within classes can now contain comprehensions. However, such comprehensions are not inlined into their parent scope at runtime. Patch by Jelle Zijlstra.
gh-118272: Fix bug where
generator.close
does not free the generator frame's locals.gh-118216: Don't consider
__future__
imports with dots before the module name.gh-118074: Make sure that the Executor objects in the COLD_EXITS array aren't assumed to be GC-able (which would access bytes outside the object).
gh-107674: Lazy load frame line number to improve performance of tracing
gh-118082: Improve
SyntaxError
message for imports without names, like infrom x import
andimport
cases. It now points out to users thatimport
expects at least one name after it.gh-118090: Improve
SyntaxError
message for empty type param brackets.gh-117958: Added a
get_jit_code()
method to access JIT compiled machine code from the UOp Executor when the experimental JIT is enabled. Patch by Anthony Shaw.gh-117901: Add option for compiler's codegen to save nested instruction sequences for introspection.
gh-116622: Redirect stdout and stderr to system log when embedded in an Android app.
gh-109118: annotation scope within class scopes can now contain lambdas.
gh-117894: Prevent
agen.aclose()
objects being re-used after.throw()
.gh-117881: prevent concurrent access to an async generator via athrow().throw() or asend().throw()
gh-117536: Fix a
RuntimeWarning
when callingagen.aclose().throw(Exception)
.gh-117755: Fix mimalloc allocator for huge memory allocation (around 8,589,934,592 GiB) on s390x. Patch by Victor Stinner.
gh-117750: Fix issue where an object's dict would get out of sync with the object's internal values when being cleared.
obj.__dict__.clear()
now clears the internal values, but leaves the dict attached to the object.gh-117431: Improve the performance of the following
bytes
andbytearray
methods by adapting them to theMETH_FASTCALL
calling convention:count()
find()
index()
rfind()
rindex()
gh-117709: Speed up calls to
str()
with positional-only argument, by using the PEP 590vectorcall
calling convention. Patch by Erlend Aasland.gh-117680: Give
_PyInstructionSequence
a Python interface and use it in tests.gh-115776: Statically allocated objects are, by definition, immortal so must be marked as such regardless of whether they are in extension modules or not.
gh-117385: Remove unhandled
PY_MONITORING_EVENT_BRANCH
andPY_MONITORING_EVENT_EXCEPTION_HANDLED
events fromsys.settrace()
.gh-116322: Extension modules may indicate to the runtime that they can run without the GIL. Multi-phase init modules do so by calling providing
Py_MOD_GIL_NOT_USED
for thePy_mod_gil
slot, while single-phase init modules callPyUnstable_Module_SetGIL(mod, Py_MOD_GIL_NOT_USED)
from their init function.gh-116129: Implement PEP 696, adding support for defaults on type parameters. Patch by Jelle Zijlstra.
gh-93502: Add two new functions to the C-API,
PyRefTracer_SetTracer()
andPyRefTracer_GetTracer()
, that allows to track object creation and destruction the same way thetracemalloc
module does. Patch by Pablo Galindogh-107674: Improved the performance of
sys.settrace()
significantlygh-95754: Improve the error message when a script shadowing a module from the standard library causes
AttributeError
to be raised. Similarly, improve the error message when a script shadowing a third party module attempts to access an attribute from that third party module while still initialising.gh-99180: Elide uninformative traceback indicators in
return
and simpleassignment
statements. Patch by Pablo Galindo.gh-105879: Allow the globals and locals arguments to
exec()
andeval()
to be passed as keywords.
Library¶
gh-118418: A
DeprecationWarning
is now emitted if you fail to pass a value to the new type_params parameter oftyping._eval_type()
ortyping.ForwardRef._evaluate()
. (Using either of these private and undocumented functions is discouraged to begin with, but failing to pass a value to thetype_params
parameter may lead to incorrect behaviour on Python 3.12 or newer.)gh-118660: Add an optional second type parameter to
typing.ContextManager
andtyping.AsyncContextManager
, representing the return types of__exit__()
and__aexit__()
respectively. This parameter defaults tobool | None
.gh-118650: The
enum
module allows method named_repr_*
to be defined onEnum
types.gh-118648: Add type parameter defaults to
typing.Generator
andtyping.AsyncGenerator
.gh-101137: Mime type
text/x-rst
is now supported bymimetypes
.gh-118164: The Python implementation of the
decimal
module could appear to hang in relatively small power cases (like2**117
) if context precision was set to a very high value. A different method to check for exactly representable results is used now that doesn't rely on computing10**precision
(which could be effectively too large to compute).gh-111744:
breakpoint()
andpdb.set_trace()
now enter the debugger immediately after the call rather than before the next line is executed.gh-118406: Add signature for
sqlite3.Connection
objects.gh-101732: Use a Y2038 compatible openssl time function when available.
gh-118404: Fix
inspect.signature()
for non-comparable callables.gh-118402: Fix
inspect.signature()
for the result of thefunctools.cmp_to_key()
call.gh-116622: On Android,
sysconfig.get_platform
now returns the format specified by PEP 738.gh-118285: Allow to specify the signature of custom callable instances of extension type by the
__text_signature__
attribute. Specify signatures ofoperator.attrgetter
,operator.itemgetter
, andoperator.methodcaller
instances.gh-118314: Fix an edge case in
binascii.a2b_base64()
strict mode, where excessive padding is not detected when no padding is necessary.gh-118271: Add the
PhotoImage
methodsread()
to read an image from a file anddata()
to get the image data. Add background and grayscale parameters toPhotoImage
methodwrite()
.gh-118225: Add the
PhotoImage
methodcopy_replace()
to copy a region from one image to other image, possibly with pixel zooming and/or subsampling. Add from_coords parameter toPhotoImage
methodscopy()
,zoom()
andsubsample()
. Add zoom and subsample parameters toPhotoImage
methodcopy()
.gh-118221: Fix a bug where
sqlite3.Connection.iterdump()
could fail if a customrow factory
was used. Patch by Erlend Aasland.gh-118013: Fix regression introduced in gh-103193 that meant that calling
inspect.getattr_static()
on an instance would cause a strong reference to that instance's class to persist in an internal cache in theinspect
module. This caused unexpected memory consumption if the class was dynamically created, the class held strong references to other objects which took up a significant amount of memory, and the cache contained the sole strong reference to the class. The fix for the regression leads to a slowdown ingetattr_static()
, but the function should still be significantly faster than it was in Python 3.11. Patch by Alex Waygood.gh-118218: Speed up
itertools.pairwise()
in the common case by up to 1.8x.gh-117486: Improve the behavior of user-defined subclasses of
ast.AST
. Such classes will now require no changes in the usual case to conform with the behavior changes of theast
module in Python 3.13. Patch by Jelle Zijlstra.gh-90848: Fixed
unittest.mock.create_autospec()
to configure parent mock with keyword arguments.gh-118168: Fix incorrect argument substitution when
typing.Unpack
is used with the builtintuple
.typing.Unpack
now raisesTypeError
when used with certain invalid types. Patch by Jelle Zijlstra.gh-118131: Add command-line interface for the
random
module. Patch by Hugo van Kemenade.gh-118107: Fix
zipimport
reading of ZIP64 files with file entries that are too big or offset too far.gh-102511: Fix
os.path.normpath()
for UNC paths on Windows. Speed upos.path.splitroot()
with a native implementation.gh-117535: Change the unknown filename of
warnings
fromsys
to<sys>
to clarify that it's not a real filename.gh-114053: Fix erroneous
NameError
when callingtyping.get_type_hints()
on a class that made use of PEP 695 type parameters in a module that hadfrom __future__ import annotations
at the top of the file. Patch by Alex Waygood.gh-116931: Add parameter fileobj check for
tarfile.TarFile.addfile()
gh-117995: Don't raise
DeprecationWarning
when a sequence of parameters is used to bind indexed, nameless placeholders. See also gh-100668.gh-80361: Fix TypeError in
email.message.Message.get_payload()
when the charset is RFC 2231 encoded.gh-86650: Fix IndexError when parse some emails with invalid Message-ID (including one-off addresses generated by Microsoft Outlook).
gh-117691: Improve the error messages emitted by
tarfile
deprecation warnings relating to PEP 706. If afilter
argument is not provided toextract()
orextractall
, the deprecation warning now points to the line in the user's code where the relevant function was called. Patch by Alex Waygood.gh-115874: Fixed a possible segfault during garbage collection of
_asyncio.FutureIter
objects. Patch by Savannah Ostrowski.gh-115060: Speed up
pathlib.Path.glob()
by omitting an initialis_dir()
call. As a result of this change,glob()
can no longer raiseOSError
.gh-77102:
site
module now parses.pth
file with UTF-8 first, and locale encoding ifUnicodeDecodeError
happened. It supported only locale encoding before.gh-76785: We've exposed the low-level
_interpreters
module for the sake of the PyPI implementation of PEP 734. It was sometimes available as the_xxsubinterpreters
module and was formerly used only for testing. For the most part, it should be considered an internal module, like_thread
and_imp
. See https://discuss.python.org/t/pep-734-multiple-interpreters-in-the-stdlib/41147/26.gh-115060: Speed up
pathlib.Path.glob()
by not scanning directories for non-wildcard pattern segments.gh-117727: Speed up
pathlib.Path.iterdir()
by usingos.scandir()
internally.gh-117586: Speed up
pathlib.Path.walk()
by working with strings internally.gh-117722: Change the new multi-separator support in
asyncio.StreamReader.readuntil()
to only accept tuples of separators rather than arbitrary iterables.gh-117692: Fixes a bug when
doctest.DocTestFinder
was failing on wrappedbuiltin_function_or_method
.gh-117348: Largely restored import time performance of configparser by avoiding dataclasses.
gh-117641: Speedup
os.path.commonpath()
on Unix.gh-117663: Fix
_simple_enum
to detect aliases when multiple arguments are present but only one is the member value.gh-117636: Speedup
os.path.join()
.gh-117618: Support
package.module
asfilename
forbreak
command ofpdb
gh-102247: the status codes enum with constants in http.HTTPStatus are updated to include the names from RFC9110. This RFC includes some HTTP statuses previously only used for WEBDAV and assigns more generic names to them.
The old constants are preserved for backwards compatibility.
gh-117607: Speedup
os.path.relpath()
.gh-117586: Speed up
pathlib.Path.glob()
by working with strings internally.gh-117225: Add colour to doctest output. Patch by Hugo van Kemenade.
gh-117566:
ipaddress.IPv6Address.is_loopback()
will now returnTrue
for IPv4-mapped loopback addresses, i.e. addresses in the::ffff:127.0.0.0/104
address space.gh-117546: Fix issue where
os.path.realpath()
stopped resolving symlinks after encountering a symlink loop on POSIX.gh-116720: Improved behavior of
asyncio.TaskGroup
when an external cancellation collides with an internal cancellation. For example, when two task groups are nested and both experience an exception in a child task simultaneously, it was possible that the outer task group would misbehave, because its internal cancellation was swallowed by the inner task group.In the case where a task group is cancelled externally and also must raise an
ExceptionGroup
, it will now call the parent task'scancel()
method. This ensures that aasyncio.CancelledError
will be raised at the nextawait
, so the cancellation is not lost.An added benefit of these changes is that task groups now preserve the cancellation count (
asyncio.Task.cancelling()
).In order to handle some corner cases,
asyncio.Task.uncancel()
may now reset the undocumented_must_cancel
flag when the cancellation count reaches zero.gh-117516: Add
typing.TypeIs
, implementing PEP 742. Patch by Jelle Zijlstra.gh-117503: Fix support of non-ASCII user names in bytes paths in
os.path.expanduser()
on Posix.gh-117394:
os.path.ismount()
is now 2-3 times faster if the user has permissions.gh-117313: Only treat
'\n'
,'\r'
and'\r\n'
as line separators in re-folding theemail
messages. Preserve control characters'\v'
,'\f'
,'\x1c'
,'\x1d'
and'\x1e'
and Unicode line separators'\x85'
,'\u2028'
and'\u2029'
as is.gh-117142: Convert
_ctypes
to multi-phase initialisation (PEP 489).gh-66543: Add the
mimetypes.guess_file_type()
function which works with file path. Passing file path instead of URL inguess_type()
is soft deprecated.gh-68583: webbrowser CLI: replace getopt with argparse, add long options. Patch by Hugo van Kemenade.
gh-116871: Name suggestions for
AttributeError
andImportError
now only include underscored names if the original name was underscored.gh-116023: Don't show empty fields (value
None
or[]
) inast.dump()
by default. Addshow_empty=False
parameter to optionally show them.gh-115961: Added
name
andmode
attributes for compressed and archived file-like objects in modulesbz2
,lzma
,tarfile
andzipfile
. The value of themode
attribute ofgzip.GzipFile
was changed from integer (1
or2
) to string ('rb'
or'wb'
). The value of themode
attribute of the readable file-like object returned byzipfile.ZipFile.open()
was changed from'r'
to'rb'
.gh-82062: Fix
inspect.signature()
to correctly handle parameter defaults on methods in extension modules that use names defined in the module namespace.gh-83856: Honor
atexit
for allmultiprocessing
start methodsgh-113081: Print colorized exception just like built-in traceback in
pdb
gh-112855: Speed up pickling of
pathlib.PurePath
objects. Patch by Barney Gale.gh-109617:
ncurses
: fixed a crash that could occur on macOS 13 or earlier when Python was built with Apple Xcode 15's SDK.gh-83151: Enabled arbitrary statements and evaluations in
pdb
shell to access the local variables of the current frame, which made it possible for multi-scope code like generators or nested function to work.gh-110209: Add
__class_getitem__()
totypes.GeneratorType
andtypes.CoroutineType
for type hinting purposes. Patch by James Hilton-Balfe.gh-108191: The
types.SimpleNamespace
now accepts an optional positional argument which specifies initial values of attributes as a dict or an iterable of key-value pairs.gh-62090: Fix assertion errors caused by whitespace in metavars or
SUPPRESS
-ed groups inargparse
by simplifying usage formatting. Patch by Ali Hamdan.gh-102402: Adjust
logging.LogRecord
to usetime.time_ns()
and fix minor bug related to floating-point math.gh-100242: Bring pure Python implementation
functools.partial.__new__
more in line with the C-implementation by not just always checking for the presence of the attribute'func'
on the first argument ofpartial
. Instead, both the Python version and the C version perform anisinstance(func, partial)
check on the first argument ofpartial
.gh-99730: HEAD requests are no longer upgraded to GET request during redirects in urllib.
gh-66410: Setting the
tkinter
module globalwantobjects
to2
before creating theTk
object or call thewantobjects()
method of theTk
object with argument2
makes now arguments to callbacks registered in thetkinter
module to be passed as various Python objects (int
,float
,bytes
,tuple
), depending on their internal representation in Tcl, instead of alwaysstr
.tkinter.wantobjects
is now set to2
by default.bpo-40943: Fix several IndexError when parse emails with truncated Message-ID, address, routes, etc, e.g.
example@
.bpo-39324: Add mime type mapping for .md <-> text/markdown
bpo-18108:
shutil.chown()
now supports dir_fd and follow_symlinks keyword arguments.bpo-30988: Fix parsing of emails with invalid address headers having a leading or trailing dot. Patch by tsufeki.
bpo-32839: Add the
after_info()
method for Tkinter widgets.
Documentation¶
gh-117928: The minimum Sphinx version required for the documentation is now 6.2.1.
Build¶
gh-118734: Fixes Windows build when invoked directly (not through the
build.bat
script) without specifying a value forUseTIER2
.gh-115119: The
configure
option--with-system-libmpdec
now defaults toyes
. The bundled copy oflibmpdecimal
will be removed in Python 3.15.gh-117845: Fix building against recent libedit versions by detecting readline hook signatures in configure.
gh-116622: A testbed project was added to run the test suite on Android.
gh-117645: Increase WASI stack size from 512 KiB to 8 MiB and the initial memory from 10 MiB to 20 MiB. Patch by Victor Stinner.
gh-115119: configure now uses pkg-config to detect
decimal
dependencies if the--with-system-libmpdec
option is given.
Windows¶
gh-115119: Update Windows installer to use libmpdecimal 4.0.0.
gh-118486:
os.mkdir()
now accepts mode of0o700
to restrict the new directory to the current user.gh-118347: Fixes launcher updates not being installed.
gh-118293: The
multiprocessing
module now passes theSTARTF_FORCEOFFFEEDBACK
flag when spawning processes to tell Windows not to change the mouse cursor.gh-115009: Update Windows installer to use SQLite 3.45.3.
gh-90329: Suppress the warning displayed on virtual environment creation when the requested and created paths differ only by a short (8.3 style) name. Warnings will continue to be shown if a junction or symlink in the path caused the venv to be created in a different location than originally requested.
gh-117786: Fixes virtual environments not correctly launching when created from a Store install.
macOS¶
gh-115119: Update macOS installer to use libmpdecimal 4.0.0.
gh-114099: iOS preprocessor symbol usage was made compatible with older macOS SDKs.
gh-115009: Update macOS installer to use SQLite 3.45.3.
gh-91629: Use
~/.config/fish/conf.d
configs and fish_add_path to setPATH
when installing for the Fish shell.
IDLE¶
bpo-34774: Use user-selected color theme for Help => IDLE Doc.
C API¶
gh-118124: Fix
Py_BUILD_ASSERT
andPy_BUILD_ASSERT_EXPR
for non-constant expressions: usestatic_assert()
on C11 and newer. Patch by Victor Stinner.gh-110850: Add "Raw" variant of PyTime functions
Patch by Victor Stinner.
gh-117987: Restore functions removed in Python 3.13 alpha 1:
Patch by Victor Stinner.
gh-117929: Restore removed
PyEval_InitThreads()
function. Patch by Victor Stinner.gh-117534: Improve validation logic in the C implementation of
datetime.datetime.fromisoformat()
to better handle invalid years. Patch by Vlad Efanov.gh-68114: Fixed skipitem()'s handling of the old 'w' and 'w#' formatters. These are no longer supported and now raise an exception if used.
gh-111997: Add a C-API for firing monitoring events.
Python 3.13.0 alpha 6¶
Release date: 2024-04-09
Core and Builtins¶
gh-117494: Refactored the instruction sequence data structure out of compile.c into instruction_sequence.c.
gh-116968: Introduce a unified 16-bit backoff counter type (
_Py_BackoffCounter
), shared between the Tier 1 adaptive specializer and the Tier 2 optimizer. The API used for adaptive specialization counters is changed but the behavior is (supposed to be) identical.The behavior of the Tier 2 counters is changed:
There are no longer dynamic thresholds (we never varied these).
All counters now use the same exponential backoff.
The counter for
JUMP_BACKWARD
starts counting down from 16.The
temperature
in side exits starts counting down from 64.
gh-117431: Improve the performance of the following
bytes
andbytearray
methods by adapting them to theMETH_FASTCALL
calling convention:endswith()
startswith()
gh-117431: Improve the performance of the following
str
methods by adapting them to theMETH_FASTCALL
calling convention:gh-117411: Move
PyFutureFeatures
to an internal header and make it private.gh-109120: Added handle of incorrect star expressions, e.g
f(3, *)
. Patch by Grigoryev Semyongh-117266: Fix crashes for certain user-created subclasses of
ast.AST
. Such classes are now expected to set the_field_types
attribute.gh-99108: Updated the
hashlib
built-in HACL* project C code from upstream that we use for many implementations when they are not present via OpenSSL in a given build. This also avoids the rare potential for a C symbol name one definition rule linking issue.gh-117108: Change the old space bit of objects in the young generation from 0 to gcstate->visited, so that any objects created during GC will have the old bit set correctly if they get moved into the old generation.
gh-117108: The cycle GC now chooses the size of increments based on the total heap size, instead of the rate of object creation. This ensures that it can keep up with growing heaps.
gh-116735: For
INSTRUMENTED_CALL_FUNCTION_EX
, setarg0
tosys.monitoring.MISSING
instead ofNone
forCALL
event.gh-113964: Starting new threads and process creation through
os.fork()
are now only prevented once all non-daemon threads exit.gh-116626: Ensure
INSTRUMENTED_CALL_FUNCTION_EX
always emitsCALL
gh-116554:
list.sort()
now exploits more cases of partial ordering, particularly those with long descending runs with sub-runs of equal values. Those are recognized as single runs now (previously, each block of repeated values caused a new run to be created).gh-114099: Added a Loader that can discover extension modules in an iOS-style Frameworks folder.
gh-115775: Compiler populates the new
__static_attributes__
field on a class with the names of attributes of this class which are accessed through self.X from any function in its body.gh-115776: The array of values, the
PyDictValues
struct is now embedded in the object during allocation. This provides better performance in the common case, and does not degrade as much when the object's__dict__
is materialized.gh-108362: Implement an incremental cyclic garbage collector. By collecting the old generation in increments, there is no need for a full heap scan. This can hugely reduce maximum pause time for programs with large heaps.
Reduce the number of generations from three to two. The old generation is split into two spaces, "visited" and "pending".
Collection happens in two steps:: * An increment is formed from the young generation and a small part of the pending space. * This increment is scanned and the survivors moved to the end of the visited space.
When the collecting space becomes empty, the two spaces are swapped.
gh-109870: Dataclasses now calls
exec()
once per dataclass, instead of once per method being added. This can speed up dataclass creation by up to 20%.bpo-24612: Improve the
SyntaxError
that happens when 'not' appears after an operator. Patch by Pablo Galindo
Library¶
gh-117648: Improve performance of
os.path.join()
andos.path.expanduser()
.gh-117584: Raise
TypeError
for non-paths inposixpath.relpath()
.gh-117467: Preserve mailbox ownership when rewriting in
mailbox.mbox.flush()
. Patch by Tony Mountifield.gh-114848: Raise
FileNotFoundError
whengetcwd()
returns '(unreachable)', which can happen on Linux >= 2.6.36 with glibc < 2.27.gh-117459:
asyncio.asyncio.run_coroutine_threadsafe()
now keeps the traceback ofCancelledError
,TimeoutError
andInvalidStateError
which are raised in the coroutine.gh-117381: Fix error message for
ntpath.commonpath()
.gh-117337: Deprecate undocumented
glob.glob0()
andglob.glob1()
functions. Useglob.glob()
and pass a directory to its root_dir argument instead.gh-117348: Refactored
configparser.RawConfigParser._read()
to reduce cyclometric complexity and improve comprehensibility.gh-117335: Raise TypeError for non-sequences for
ntpath.commonpath()
.gh-66449:
configparser.ConfigParser
now accepts unnamed sections before named ones, if configured to do so.gh-88014: In documentation of
gzip.GzipFile
in module gzip, explain data type of optional constructor argument mtime, and recommendmtime = 0
for generating deterministic streams.gh-117310: Fixed an unlikely early & extra
Py_DECREF
triggered crash inssl
when creating a new_ssl._SSLContext
if CPython was built implausibly such that the default cipher list is empty or the SSL library it was linked against reports a failure from its CSSL_CTX_set_cipher_list()
API.gh-117294: A
DocTestCase
now reports as skipped if all examples in the doctest are skipped.gh-98966: In
subprocess
, raise a more informative message whenstdout=STDOUT
.gh-117225: doctest: only print "and X failed" when non-zero, don't pluralise "1 items". Patch by Hugo van Kemenade.
gh-117205: Speed up
compileall.compile_dir()
by 20% when using multiprocessing by increasingchunksize
.gh-117178: Fix regression in lazy loading of self-referential modules, introduced in gh-114781.
gh-112383: Fix
dis
module's handling ofENTER_EXECUTOR
instructions.gh-117182: Lazy-loading of modules that modify their own
__class__
no longer reverts the__class__
totypes.ModuleType
.gh-117084: Fix
zipfile
extraction for directory entries with the name containing backslashes on Windows.gh-117114: Make
os.path.isdevdrive()
available on all platforms. For those that do not offer Dev Drives, it will always returnFalse
.gh-117110: Fix a bug that prevents subclasses of
typing.Any
to be instantiated with arguments. Patch by Chris Fu.gh-109653: Deferred select imports in importlib.metadata and importlib.resources for a 14% speedup.
gh-70647: Start the deprecation period for the current behavior of
datetime.datetime.strptime()
andtime.strptime()
which always fails to parse a date string with aValueError
involving a day of month such asstrptime("02-29", "%m-%d")
when a year is not specified and the date happen to be February 29th. This should help avoid users finding new bugs every four years due to a natural mistaken assumption about the API when parsing partial date values.gh-116987: Fixed
inspect.findsource()
for class code objects.gh-114099: Modify standard library to allow for iOS platform differences.
gh-90872: On Windows,
subprocess.Popen.wait()
no longer callsWaitForSingleObject()
with a negative timeout: pass0
ms if the timeout is negative. Patch by Victor Stinner.gh-116957: configparser: Don't leave ConfigParser values in an invalid state (stored as a list instead of a str) after an earlier read raised DuplicateSectionError or DuplicateOptionError.
gh-115538:
_io.WindowsConsoleIO
now emit a warning if a boolean value is passed as a filedescriptor argument.gh-90095: Ignore empty lines and comments in
.pdbrc
gh-106531: Refreshed zipfile._path from zipp 3.18, providing better compatibility for PyPy, better glob performance for deeply nested zipfiles, and providing internal access to
CompleteDirs.inject
for use in other tests (like importlib.resources).gh-63207: On Windows,
time.time()
now uses theGetSystemTimePreciseAsFileTime()
clock to have a resolution better than 1 us, instead of theGetSystemTimeAsFileTime()
clock which has a resolution of 15.6 ms. Patch by Victor Stinner.gh-116764: Restore support of
None
and other false values inurllib.parse
functionsparse_qs()
andparse_qsl()
. Also, they now raise a TypeError for non-zero integers and non-empty sequences.gh-116811: In
PathFinder.invalidate_caches
, delegate toMetadataPathFinder.invalidate_caches
.gh-116647: Fix recursive child in dataclasses
gh-113171: Fixed various false positives and false negatives in
ipaddress.IPv4Address.is_private
(see these docs for details)
Also in the corresponding
ipaddress.IPv4Network
andipaddress.IPv6Network
attributes.gh-63283: In
encodings.idna
, any capitalization of the the ACE prefix (xn--
) is now acceptable. Patch by Pepijn de Vos and Zackery Spytz.gh-71042: Add
platform.android_ver()
, which provides device and OS information on Android.gh-73468: Added new
math.fma()
function, wrapping C99'sfma()
operation: fused multiply-add function. Patch by Mark Dickinson and Victor Stinner.gh-116608: The
importlib.resources
functionsis_resource()
,open_binary()
,open_text()
,path()
,read_binary()
, andread_text()
are un-deprecated, and support subdirectories via multiple positional arguments. Thecontents()
function also allows subdirectories, but remains deprecated.gh-116484: Change automatically generated
tkinter.Checkbutton
widget names to avoid collisions with automatically generatedtkinter.ttk.Checkbutton
widget names within the same parent widget.gh-114314: In
ctypes
, ctype data is now stored in type objects directly rather than in a dict subclass. This is an internal change that should not affect usage.gh-116401: Fix blocking
os.fwalk()
andshutil.rmtree()
on opening named pipe.gh-71052: Implement
ctypes.util.find_library()
on Android.gh-90535: Fix support of interval values > 1 in
logging.TimedRotatingFileHandler
forwhen='MIDNIGHT'
andwhen='Wx'
.gh-113308: Remove some internal protected parts from
uuid
:_has_uuid_generate_time_safe
,_netbios_getnode
,_ipconfig_getnode
, and_load_system_functions
. They were unused.gh-115627: Fix the
ssl
module error handling of connection terminate by peer. It now throws an OSError with the appropriate error code instead of an EOFError.gh-114847: Speed up
os.path.realpath()
on non-Windows platforms.gh-114271: Fix a race in
threading.Thread.join()
.threading._MainThread
now always represents the main thread of the main interpreter.PyThreadState.on_delete
andPyThreadState.on_delete_data
have been removed.gh-113538: Add
asyncio.Server.close_clients()
andasyncio.Server.abort_clients()
methods which allow to more forcefully close an asyncio server.gh-85287: Changes Unicode codecs to return UnicodeEncodeError or UnicodeDecodeError, rather than just UnicodeError.
gh-105866: Fixed
_get_slots
bug which caused error when defining dataclasses with slots and a weakref_slot.gh-96471: Add
asyncio.Queue
termination withshutdown()
method.bpo-33533:
asyncio.as_completed()
now returns an object that is both an asynchronous iterator and plain iterator. The new asynchronous iteration pattern allows for easier correlation between prior tasks and their completed results. This is a closer match toconcurrent.futures.as_completed()
's iteration pattern. Patch by Justin Arthur.bpo-27578:
inspect.getsource()
(and related functions) work with empty module files, returning'\n'
(or reasonable equivalent) instead of raisingOSError
. Patch by Kernc.bpo-37141: Accept an iterable of separators in
asyncio.StreamReader.readuntil()
, stopping when one of them is encountered.gh-66543: Make
mimetypes.guess_type()
properly parsing of URLs with only a host name, URLs containing fragment or query, and filenames with only a UNC sharepoint on Windows. Based on patch by Dong-hee Na.bpo-15010:
unittest.TestLoader.discover()
now saves the original value ofunittest.TestLoader._top_level_dir
and restores it at the end of the call.
Documentation¶
Tests¶
gh-83434: Disable JUnit XML output (
--junit-xml=FILE
command line option) in regrtest when hunting for reference leaks (-R
option). Patch by Victor Stinner.gh-117187: Fix XML tests for vanilla Expat <2.6.0.
gh-116333: Tests of TLS related things (error codes, etc) were updated to be more lenient about specific error message strings and behaviors as seen in the BoringSSL and AWS-LC forks of OpenSSL.
gh-117089: Consolidated tests for importlib.metadata in their own
metadata
package.gh-115979: Update test_importlib so that it passes under WASI SDK 21.
gh-112536: Add --tsan to test.regrtest for running TSAN tests in reasonable execution times. Patch by Donghee Na.
gh-116307: Added import helper
isolated_modules
asCleanImport
does not remove modules imported during the context. Use it in importlib.resources tests to avoid leavingmod
around to impede importlib.metadata tests.
Build¶
Windows¶
gh-117267: Ensure
DirEntry.stat().st_ctime
behaves consistently withos.stat()
during the deprecation period ofst_ctime
by containing the same value asst_birthtime
. After the deprecation period,st_ctime
will be the metadata change time (or unavailable throughDirEntry
), and onlyst_birthtime
will contain the creation time.gh-116195: Improves performance of
os.getppid()
by using an alternate system API when available. Contributed by vxiiduu.gh-88494: On Windows,
time.monotonic()
now uses theQueryPerformanceCounter()
clock to have a resolution better than 1 us, instead of theGetTickCount64()
clock which has a resolution of 15.6 ms. Patch by Victor Stinner.gh-116773: Fix instances of
<_overlapped.Overlapped object at 0xXXX> still has pending operation at deallocation, the process may crash
.gh-91227: Fix the asyncio ProactorEventLoop implementation so that sending a datagram to an address that is not listening does not prevent receiving any more datagrams.
gh-115119: Switched from vendored
libmpdecimal
code to a separately-hosted external package in thecpython-source-deps
repository when building the_decimal
module.
C API¶
gh-87193:
_PyBytes_Resize()
can now be called for bytes objects with reference count > 1, including 1-byte bytes objects. It creates a new bytes object and destroys the old one if it has reference count > 1.gh-117021: Fix integer overflow in
PyLong_AsPid()
on non-Windows 64-bit platforms.gh-115756:
PyCode_GetFirstFree()
is an ustable API now and has been renamed toPyUnstable_Code_GetFirstFree()
. (Contributed by Bogdan Romanyuk in gh-115781)gh-116869: Add
test_cext
test: build a C extension to check if the Python C API emits C compiler warnings. Patch by Victor Stinner.gh-116869: Make the C API compatible with
-Werror=declaration-after-statement
compiler flag again. Patch by Victor Stinner.gh-116936: Add
PyType_GetModuleByDef()
to the limited C API. Patch by Victor Stinner.gh-116809: Restore removed private
_PyErr_ChainExceptions1()
function. Patch by Victor Stinner.gh-115754: In the limited C API version 3.13, getting
Py_None
,Py_False
,Py_True
,Py_Ellipsis
andPy_NotImplemented
singletons is now implemented as function calls at the stable ABI level to hide implementation details. Getting these constants still return borrowed references. Patch by Victor Stinner.gh-115754: Add
Py_GetConstant()
andPy_GetConstantBorrowed()
functions to get constants. For example,Py_GetConstant(Py_CONSTANT_ZERO)
returns a strong reference to the constant zero. Patch by Victor Stinner.gh-111696: Add support for
%T
,%T#
,%N
and%N#
formats toPyUnicode_FromFormat()
: format the fully qualified name of an object type and of a type: callPyType_GetModuleName()
. See PEP 737 for more information. Patch by Victor Stinner.gh-111696: Add
PyType_GetModuleName()
function to get the type's module name. Equivalent to getting thetype.__module__
attribute. Patch by Eric Snow and Victor Stinner.gh-111696: Add
PyType_GetFullyQualifiedName()
function to get the type's fully qualified name. Equivalent tof"{type.__module__}.{type.__qualname__}"
, ortype.__qualname__
iftype.__module__
is not a string or is equal to"builtins"
. Patch by Victor Stinner.gh-85283: The
fcntl
,grp
,pwd
,termios
,_statistics
and_testconsole
C extensions are now built with the limited C API. Patch by Victor Stinner.gh-111140: Add additional flags to
PyLong_AsNativeBytes()
andPyLong_FromNativeBytes()
to allow the caller to determine how to handle edge cases around values that fill the entire buffer.gh-113024: Add
PyObject_GenericHash()
function.
Python 3.13.0 alpha 5¶
Release date: 2024-03-12
Security¶
gh-115398: Allow controlling Expat >=2.6.0 reparse deferral (CVE-2023-52425) by adding five new methods:
gh-114572:
ssl.SSLContext.cert_store_stats()
andssl.SSLContext.get_ca_certs()
now correctly lock access to the certificate store, when thessl.SSLContext
is shared across multiple threads.
Core and Builtins¶
gh-116604: Respect the status of the garbage collector when indirect calls are made via
PyErr_CheckSignals()
and the evaluation breaker. Patch by Pablo Galindogh-112087:
list
is now compatible with the implementation of PEP 703.gh-116381: Add specialization for
CONTAINS_OP
.gh-116296: Fix possible refleak in
object.__reduce__()
internal error handling.gh-115823: Properly calculate error ranges in the parser when raising
SyntaxError
exceptions caused by invalid byte sequences. Patch by Pablo Galindogh-115778: Add
tierN
annotation for instruction definition in interpreter DSL.gh-115733: Fix crash when calling
next()
on exhausted list iterators.gh-115700: The regen-cases build stage now works on Windows.
gh-115347: Fix bug where docstring was replaced by a redundant NOP when Python is run with
-OO
.gh-115323: Make error message more meaningful for when
bytearray.extend()
is called with astr
object.gh-112175: Every
PyThreadState
now has its owneval_breaker
, allowing specific threads to be interrupted.gh-115154: Fix a bug that was causing the
tokenize.untokenize()
function to handle unicode named literals incorrectly. Patch by Pablo Galindogh-112433: Add ability to force alignment of
ctypes.Structure
by way of the new_align_
attribute on the class.gh-104090: The multiprocessing resource tracker now exits with non-zero status code if a resource leak was detected. It still exits with status code 0 otherwise.
gh-105858: Improve the constructors for
ast
nodes. Arguments of list types now default to an empty list if omitted, and optional fields default toNone
. AST nodes now have an__annotations__
attribute with the expected types of their attributes. Passing unrecognized extra arguments to AST nodes is deprecated and will become an error in Python 3.15. Omitting a required argument to an AST node is deprecated and will become an error in Python 3.15. Patch by Jelle Zijlstra.gh-101860: Expose
__name__
attribute on property.gh-96497: Fix incorrect resolution of mangled class variables used in assignment expressions in comprehensions.
Library¶
gh-116349:
platform.java_ver()
is deprecated and will be removed in 3.15. It was largely untested, had a confusing API, and was only useful for Jython support.gh-116143: Fix a race in pydoc
_start_server
, eliminating a window in which_start_server
can return a thread that is "serving" but without adocserver
set.gh-116127:
typing
: implement PEP 705 which addstyping.ReadOnly
support totyping.TypedDict
.gh-116325:
typing
: raiseSyntaxError
instead ofAttributeError
on forward references as empty strings.gh-115957: When
asyncio.TaskGroup.create_task
is called on an inactiveasyncio.TaskGroup
, the given coroutine will be closed (which prevents aRuntimeWarning
).gh-115978: Disable preadv(), readv(), pwritev(), and writev() on WASI.
Under wasmtime for WASI 0.2, these functions don't pass test_posix (https://github.com/bytecodealliance/wasmtime/issues/7830).
gh-88352: Fix the computation of the next rollover time in the
logging.TimedRotatingFileHandler
handler.computeRollover()
now always returns a timestamp larger than the specified time and works correctly during the DST change.doRollover()
no longer overwrite the already rolled over file, saving from data loss when run at midnight or during repeated time at the DST change.gh-87115: Set
__main__.__spec__
toNone
when running a script withpdb
gh-76511: Fix UnicodeEncodeError in
email.Message.as_string()
that results when a message that claims to be in the ascii character set actually has non-ascii characters. Non-ascii characters are now replaced with the U+FFFD replacement character, like in thereplace
error handler.gh-89547: Add support for nested typing special forms like Final[ClassVar[int]].
gh-116040: [Enum] fix by-value calls when second value is falsey; e.g. Cardinal(1, 0)
gh-115821: [Enum] Improve error message when calling super().__new__() in custom __new__.
gh-85644: Use the
XDG_CURRENT_DESKTOP
environment variable inwebbrowser
to check desktop. Prefer it to the deprecatedGNOME_DESKTOP_SESSION_ID
for GNOME detection.gh-75988: Fixed
unittest.mock.create_autospec()
to pass the call through to the wrapped object to return the real result.gh-115881: Fix issue where
ast.parse()
would incorrectly flag conditional context managers (such aswith (x() if y else z()): ...
) as invalid syntax iffeature_version=(3, 8)
was passed. This reverts changes to the grammar made as part of gh-94949.gh-115886: Fix silent truncation of the name with an embedded null character in
multiprocessing.shared_memory.SharedMemory
.gh-115532: Add kernel density estimation to the statistics module.
gh-115714: On WASI, the
time
module no longer get process time usingtimes()
orCLOCK_PROCESS_CPUTIME_ID
, system API is that is unreliable and is likely to be removed from WASI. The affected clock functions fall back to callingclock()
.gh-115809: Improve algorithm for computing which rolled-over log files to delete in
logging.TimedRotatingFileHandler
. It is now reliable for handlers withoutnamer
and with arbitrary deterministicnamer
that leaves the datetime part in the file name unmodified.gh-74668:
urllib.parse
functionsparse_qs()
andparse_qsl()
now support bytes arguments containing raw and percent-encoded non-ASCII data.gh-67044:
csv.writer()
now always quotes or escapes'\r'
and'\n'
, regardless of lineterminator value.gh-115712: Restore support of space delimiter with
skipinitialspace=True
incsv
.csv.writer()
now quotes empty fields if delimiter is a space and skipinitialspace is true and raises exception if quoting is not possible.gh-112364: Fixed
ast.unparse()
to handle format_spec with"
,'
or\\
. Patched by Frank Hoffmann.gh-112997: Stop logging potentially sensitive callback arguments in
asyncio
unless debug mode is active.gh-114914: Fix an issue where an abandoned
StreamWriter
would not be garbage collected.gh-111358: Fix a bug in
asyncio.BaseEventLoop.shutdown_default_executor()
to ensure the timeout passed to the coroutine behaves as expected.gh-115618: Fix improper decreasing the reference count for
None
argument inproperty
methodsgetter()
,setter()
anddeleter()
.gh-112720: Refactor
dis.ArgResolver
to make it possible to subclass and change the way jump args are interpreted.gh-112006: Fix
inspect.unwrap()
for types with the__wrapper__
data descriptor. Fixinspect.Signature.from_callable()
for builtinsclassmethod()
andstaticmethod()
.gh-101293: Support callables with the
__call__()
method and types with__new__()
and__init__()
methods set to class methods, static methods, bound methods, partial functions, and other types of methods and descriptors ininspect.Signature.from_callable()
.gh-113942:
pydoc
no longer skips global functions implemented as builtin methods, such asMethodDescriptorType
andWrapperDescriptorType
.gh-115256: Added DeprecationWarning when accessing the tarfile attribute of TarInfo objects. The attribute is never used internally and is only attached to TarInfos when the tarfile is opened in write-mode, not read-mode. The attribute creates an unnecessary reference cycle which may cause corruption when not closing the handle after writing a tarfile.
gh-115197:
urllib.request
no longer resolves the hostname before checking it against the system's proxy bypass list on macOS and Windows.gh-113812:
DatagramTransport.sendto()
will now send zero-length datagrams if called with an empty bytes object. The transport flow control also now accounts for the datagram header when calculating the buffer size.gh-114763: Protect modules loaded with
importlib.util.LazyLoader
from race conditions when multiple threads try to access attributes before the loading is complete.gh-114709:
posixpath.commonpath()
now raises aValueError
exception when passed an empty iterable. Previously,IndexError
was raised.posixpath.commonpath()
now raises aTypeError
exception when passedNone
. Previously,ValueError
was raised.gh-114610: Fix bug where
pathlib.PurePath.with_stem()
converted a non-empty path suffix to a stem when given an empty stem argument. It now raisesValueError
, just likepathlib.PurePath.with_suffix()
does when called on a path with an empty stem, given a non-empty suffix argument.gh-107361: Add
ssl.VERIFY_X509_PARTIAL_CHAIN
andVERIFY_X509_STRICT
to the default SSL context created withssl.create_default_context()
.gh-112281: Allow creating union of types for
typing.Annotated
with unhashable metadata.gh-111775: Fix
importlib.resources.simple.ResourceHandle.open()
for text mode, added missedstream
argument.gh-90095: Make .pdbrc and -c work with any valid pdb commands.
gh-107625: Raise
configparser.ParsingError
fromread()
andread_file()
methods ofconfigparser.ConfigParser
if a key without a corresponding value is continued (that is, followed by an indented line).gh-107155: Fix incorrect output of
help(x)
wherex
is alambda
function, which has an__annotations__
dictionary attribute with a"return"
key.gh-57141: Add option for non-shallow comparisons to
filecmp.dircmp
likefilecmp.cmp()
. Original patch by Steven Ward. Enhanced by Tobias Rautenkranzgh-69990:
Profile.print_stats()
has been improved to accept multiple sort arguments. Patched by Chiu-Hsiang Hsu and Furkan Onder.gh-104061: Add
socket.SO_BINDTOIFINDEX
constant.gh-60346: Fix ArgumentParser inconsistent with parse_known_args.
gh-102389: Add
windows_31j
to aliases forcp932
codecgh-72249:
functools.partial`s of :func:`repr()
has been improved to include the module name. Patched by Furkan Onder and Anilyka Barry.gh-100985: Update HTTPSConnection to consistently wrap IPv6 Addresses when using a proxy.
gh-100884: email: fix misfolding of comma in address-lists over multiple lines in combination with unicode encoding.
gh-95782: Fix
io.BufferedReader.tell()
,io.BufferedReader.seek()
,_pyio.BufferedReader.tell()
,io.BufferedRandom.tell()
,io.BufferedRandom.seek()
and_pyio.BufferedRandom.tell()
being able to return negative offsets.gh-96310: Fix a traceback in
argparse
when all options in a mutually exclusive group are suppressed.gh-93205: Fixed a bug in
logging.handlers.TimedRotatingFileHandler
where multiple rotating handler instances pointing to files with the same name but different extensions would conflict and not delete the correct files.bpo-31116: Add Z85 encoding to
base64
.bpo-44865: Add missing call to localization function in
argparse
.bpo-43952: Fix
multiprocessing.connection.Listener.accept()
to accept empty bytes as authkey. Not accepting empty bytes as key causes it to hang indefinitely.bpo-42125: linecache: get module name from
__spec__
if available. This allows getting source code for the__main__
module when a custom loader is used.bpo-41122: Failing to pass arguments properly to
functools.singledispatchmethod()
now throws a TypeError instead of hitting an index out of bounds internally.bpo-40818: The asyncio REPL now runs
sys.__interactivehook__
on startup. The default implementation ofsys.__interactivehook__
provides auto-completion to the asyncio REPL. Patch contributed by Rémi Lapeyre.bpo-33775: Add 'default' and 'version' help text for localization in argparse.
Documentation¶
gh-115399: Document CVE-2023-52425 of Expat <2.6.0 under "XML vulnerabilities".
Tests¶
gh-71052: Add test exclusions to support running the test suite on Android.
gh-71052: Enable
test_concurrent_futures
on platforms that support threading but not multiprocessing.gh-115796: Make '_testinternalcapi.assemble_code_object' construct the exception table for the code object.
gh-115720: Leak tests (
-R
,--huntrleaks
) now show a summary of the number of leaks found in each iteration.gh-115122: Add
--bisect
option to regrtest test runner: run failed tests withtest.bisect_cmd
to identify failing tests. Patch by Victor Stinner.gh-115596: Fix
ProgramPriorityTests
intest_os
permanently changing the process priority.gh-115556: On Windows, commas passed in arguments to
Tools\buildbot\test.bat
andPCbuild\\rt.bat
are now properly handled.gh-115420: Fix translation of exception handler targets by
_testinternalcapi.optimize_cfg
.gh-115376: Fix segfault in
_testinternalcapi.compiler_codegen
on bad input.
Build¶
gh-116313: Get WASI builds to work under wasmtime 18 w/ WASI 0.2/preview2 primitives.
gh-71052: Change Android's
sys.platform
from"linux"
to"android"
.gh-116117: Backport
libb2
's PR #42 to fix compiling CPython on 32-bit Windows withclang-cl
.gh-71052: Fix several Android build issues
gh-114099: A testbed project was added to run the test suite on iOS.
gh-115350: Fix building ctypes module with -DWIN32_LEAN_AND_MEAN defined
gh-111225: Link extension modules against libpython on Android.
gh-115737: The install name for libPython is now correctly set for non-framework macOS builds.
gh-114099: Makefile targets were added to support compiling an iOS-compatible framework build.
Windows¶
gh-116012: Ensure the value of
GetLastError()
is preserved across GIL operations.gh-115582: Building extensions intended for free-threaded builds of CPython now require compiling with
/DPy_GIL_DISABLED
manually when using a regular install. This is expected to change in future releases.gh-115554: The installer now has more strict rules about updating the Lanceur Python pour Windows. In general, most users only have a single launcher installed and will see no difference. When multiple launchers have been installed, the option to install the launcher is disabled until all but one have been removed. Downgrading the launcher (which was never allowed) is now more obviously blocked.
gh-115543: Lanceur Python pour Windows can now detect Python 3.13 when installed from the Microsoft Store, and will install Python 3.12 by default when
PYLAUNCHER_ALLOW_INSTALL
is set.
macOS¶
gh-116145: Update macOS installer to Tcl/Tk 8.6.14.
IDLE¶
gh-88516: On macOS show a proxy icon in the title bar of editor windows to match platform behaviour.
Tools/Demos¶
C API¶
gh-114626: Add again
_PyCFunctionFastWithKeywords
name, removed in Python 3.13 alpha 4 by mistake. Keep the old private_PyCFunctionFastWithKeywords
name (Python 3.7) as an alias to the new public namePyCFunctionFastWithKeywords
(Python 3.13a4). Patch by Victor Stinner.gh-111418: Add
PyHASH_MODULUS
,PyHASH_BITS
,PyHASH_INF
andPyHASH_IMAG
C macros. Patch by Sergey B Kirpichev.
Python 3.13.0 alpha 4¶
Release date: 2024-02-15
Security¶
gh-115399: Update bundled libexpat to 2.6.0
gh-115243: Fix possible crashes in
collections.deque.index()
when the deque is concurrently modified.
Core and Builtins¶
gh-112087: For an empty reverse iterator for list will be reduced to
reversed()
. Patch by Donghee Nagh-114570: Add
PythonFinalizationError
exception. This exception derived fromRuntimeError
is raised when an operation is blocked during the Python finalization. Patch by Victor Stinner.gh-114695: Add
sys._clear_internal_caches()
, which clears all internal performance-related caches (and deprecate the less-generalsys._clear_type_cache()
function).gh-114828: Fix compilation crashes in uncommon code examples using
super()
inside a comprehension in a class body.gh-112069: Adapt
set
andfrozenset
methods to Argument Clinic.gh-115011: Setters for members with an unsigned integer type now support the same range of valid values for objects that has a
__index__()
method as forint
.gh-114887: Changed socket type validation in
create_datagram_endpoint()
to accept all non-stream sockets. This fixes a regression in compatibility with raw sockets.gh-114944: Fixes a race between
PyParkingLot_Park
and_PyParkingLot_UnparkAll
.gh-113462: Limit the number of versions that a single class can use. Prevents a few wayward classes using up all the version numbers.
gh-76763: The
chr()
builtin function now always raisesValueError
for values outside the valid range. Previously it raisedOverflowError
for very large or small values.gh-114806: No longer specialize calls to classes, if those classes have metaclasses. Fixes bug where the
__call__
method of the metaclass was not being called.gh-107944: Improve error message for function calls with bad keyword arguments via getargs
gh-112529: The free-threaded build no longer allocates space for the
PyGC_Head
structure in objects that support cyclic garbage collection. A number of other fields and data structures are used as replacements, includingob_gc_bits
,ob_tid
, and mimalloc internal data structures.gh-114456: Lower the recursion limit under a debug build of WASI.
gh-114083: Compiler applies folding of LOAD_CONST with following instruction in a separate pass before other optimisations. This enables jump threading in certain circumstances.
gh-114388: Fix a
RuntimeWarning
emitted when assign an integer-like value that is not an instance ofint
to an attribute that corresponds to a C struct member of type T_UINT and T_ULONG. Fix a doubleRuntimeWarning
emitted when assign a negative integer value to an attribute that corresponds to a C struct member of type T_UINT.gh-114265: Compiler propagates line numbers before optimization, leading to more optimization opportunities and removing the need for the
guarantee_lineno_for_exits
hack.gh-112529: The free-threaded build now has its own thread-safe GC implementation that uses mimalloc to find GC tracked objects. It is non-generational, unlike the existing GC implementation.
gh-114050: Fix segmentation fault caused by an incorrect format string in
TypeError
exception when more than two arguments are passed toint
.gh-112354: The
END_FOR
instruction now pops only one value. This is to better support side exits in loops.gh-113884: Make
queue.SimpleQueue
thread safe when the GIL is disabled.gh-114058: Implement the foundations of the Tier 2 redundancy eliminator.
gh-113939: frame.clear(): Clear frame.f_locals as well, and not only the fast locals. This is relevant once frame.f_locals was accessed, which would contain also references to all the locals.
gh-112050: Convert
collections.deque
to use Argument Clinic.gh-112050: Make methods on
collections.deque
thread-safe when the GIL is disabled.gh-113464: Add an option (
--enable-experimental-jit
forconfigure
-based builds or--experimental-jit
forPCbuild
-based ones) to build an experimental just-in-time compiler, based on copy-and-patchgh-113055: Make interp->obmalloc a pointer. For interpreters that share state with the main interpreter, this points to the same static memory structure. For interpreters with their own obmalloc state, it is heap allocated. Add free_obmalloc_arenas() which will free the obmalloc arenas and radix tree structures for interpreters with their own obmalloc state.
gh-55664: Add warning when creating
type
using a namespace dictionary with non-string keys. Patched by Daniel Urban and Furkan Onder.gh-104530: Use native Win32 condition variables.
Library¶
gh-115392: Fix a bug in
doctest
where incorrect line numbers would be reported for decorated functions.gh-114563: Fix several
format()
bugs when using the C implementation ofDecimal
: * memory leak in some rare cases when using thez
format option (coerce negative 0) * incorrect output when applying thez
format option to typeF
(fixed-point with capitalNAN
/INF
) * incorrect output when applying the#
format option (alternate form)gh-102840: Fix confused traceback when floordiv, mod, or divmod operations happens between instances of
fractions.Fraction
andcomplex
.gh-115165: Most exceptions are now ignored when attempting to set the
__orig_class__
attribute on objects returned when callingtyping
generic aliases (including generic aliases created usingtyping.Annotated
). Previously onlyAttributeError
was ignored. Patch by Dave Shawley.gh-112903: Fix "issubclass() arg 1 must be a class" errors in certain cases of multiple inheritance with generic aliases (regression in early 3.13 alpha releases).
gh-115133: Fix tests for
XMLPullParser
with Expat 2.6.0.gh-115059:
io.BufferedRandom.read1()
now flushes the underlying write buffer.gh-79382: Trailing
**
no longer allows to match files and non-existing paths in recursiveglob()
.gh-67837: Avoid race conditions in the creation of directories during concurrent extraction in
tarfile
andzipfile
.gh-115060: Speed up
pathlib.Path.glob()
by removing redundant regex matching.gh-97928: Partially revert the behavior of
tkinter.Text.count()
. By default it preserves the behavior of older Python versions, except that settingwantobjects
to 0 no longer has effect. Add a new parameter return_ints: specifyingreturn_ints=True
makesText.count()
always returning the single count as an integer instead of a 1-tuple orNone
.gh-114628: When csv.Error is raised when handling TypeError, do not print the TypeError traceback.
gh-85984: Added
_POSIX_VDISABLE
from C's<unistd.h>
totermios
.gh-114965: Update bundled pip to 24.0
gh-114959:
tarfile
no longer ignores errors when trying to extract a directory on top of a file.gh-114894: Add
array.array.clear()
.gh-114071: Support tuple subclasses using auto() for enum member value.
gh-109475: Fix support of explicit option value "--" in
argparse
(e.g.--option=--
).gh-49766: Fix
date
-datetime
comparison. Now the special comparison methods like__eq__
and__lt__
returnNotImplemented
if one of comparands isdate
and other isdatetime
instead of ignoring the time part and the time zone or forcefully return "not equal" or raiseTypeError
. It makes comparison ofdate
anddatetime
subclasses more symmetric and allows to change the default behavior by overriding the special comparison methods in subclasses.gh-110190: Fix ctypes structs with array on Windows ARM64 platform by setting
MAX_STRUCT_SIZE
to 32 in stgdict. Patch by Diego Russogh-114678: Ensure that deprecation warning for 'N' specifier in
Decimal
format is not raised for cases where 'N' appears in other places in the format specifier. Based on patch by Stefan Krah.gh-70303: Return both files and directories from
pathlib.Path.glob()
if a pattern ends with "**
". Previously only directories were returned.gh-109653: Improve import time of
importlib.metadata
andemail.utils
.gh-113280: Fix a leak of open socket in rare cases when error occurred in
ssl.SSLSocket
creation.gh-77749:
email.policy.EmailPolicy.fold()
now always encodes non-ASCII characters in headers ifutf8
is false.gh-83383: Synchronization of the
dbm.dumb
database is now no-op if there was no modification since opening or last synchronization. The directory file for a newly created emptydbm.dumb
database is now created immediately after opening instead of deferring this until synchronizing or closing.gh-91602: Add filter keyword-only parameter to
sqlite3.Connection.iterdump()
for filtering database objects to dump. Patch by Mariusz Felisiak.gh-112451: Prohibit subclassing pure-Python
datetime.timezone
. This is consistent with C-extension implementation. Patch by Mariusz Felisiak.gh-69893: Add the
close()
method for the iterator returned byxml.etree.ElementTree.iterparse()
.gh-109653: Reduce the import time of
threading
module by ~50%. Patch by Daniel Hollas.gh-114492: Make the result of
termios.tcgetattr()
reproducible on Alpine Linux. Previously it could leave a random garbage in some fields.gh-114315: Make
threading.Lock
a real class, not a factory function. Add__new__
to_thread.lock
type.gh-100414: Add
dbm.sqlite3
as a backend todbm
, and make it the new defaultdbm
backend. Patch by Raymond Hettinger and Erlend E. Aasland.gh-113267: Revert changes in gh-106584 which made calls of
TestResult
methodsstartTest()
andstopTest()
unbalanced.gh-75128: Ignore an
OSError
inasyncio.BaseEventLoop.create_server()
when IPv6 is available but the interface cannot actually support it.gh-114423:
_DummyThread
entries inthreading._active
are now automatically removed when the related thread dies.gh-114257: Dismiss the
FileNotFound
error inctypes.util.find_library()
and just returnNone
on Linux.gh-114321: Expose more platform specific constants in the
fcntl
module on Linux, macOS, FreeBSD and NetBSD.gh-114328: The
tty.setcbreak()
and newtty.cfmakecbreak()
no longer clears the terminal input ICRLF flag. This fixes a regression introduced in 3.12 that no longer matched how OSes define cbreak mode in theirstty(1)
manual pages.gh-114281: Remove type hints from
Lib/asyncio/staggered.py
. The annotations in the typeshed project should be used instead.gh-101438: Avoid reference cycle in ElementTree.iterparse. The iterator returned by
ElementTree.iterparse
may hold on to a file descriptor. The reference cycle prevented prompt clean-up of the file descriptor if the returned iterator was not exhausted.gh-114198: The signature for the
__replace__
method ondataclasses
now has the first argument namedself
, rather thanobj
.gh-104522:
OSError
raised when run a subprocess now only has filename attribute set to cwd if the error was caused by a failed attempt to change the current directory.gh-114149: Enum: correctly handle tuple subclasses in custom
__new__
.gh-83648: Support deprecation of options, positional arguments and subcommands in
argparse
.gh-114087: Speed up
dataclasses.asdict
up to 1.35x.gh-109534: Fix a reference leak in
asyncio.selector_events.BaseSelectorEventLoop
when SSL handshakes fail. Patch contributed by Jamie Phan.gh-79634: Accept path-like objects as patterns in
pathlib.Path.glob()
andrglob()
.gh-112202: Ensure that a
asyncio.Condition.notify()
call does not get lost if the awakenedTask
is simultaneously cancelled or encounters any other error.gh-113951: Fix the behavior of
tag_unbind()
methods oftkinter.Text
andtkinter.Canvas
classes with three arguments. Previously,widget.tag_unbind(tag, sequence, funcid)
destroyed the current binding for sequence, leaving sequence unbound, and deleted the funcid command. Now it removes only funcid from the binding for sequence, keeping other commands, and deletes the funcid command. It leaves sequence unbound only if funcid was the last bound command.gh-97959: Fix rendering class methods, bound methods, method and function aliases in
pydoc
. Class methods no longer have "method of builtins.type instance" note. Corresponding notes are now added for class and unbound methods. Method and function aliases now have references to the module or the class where the origin was defined if it differs from the current. Bound methods are now listed in the static methods section. Methods of builtin classes are now supported as well as methods of Python classes.gh-113796: Add more validation checks in the
csv.Dialect
constructor.ValueError
is now raised if the same character is used in different roles.gh-113732: Fix support of
QUOTE_NOTNULL
andQUOTE_STRINGS
incsv.reader()
.gh-113225: Speed up
pathlib.Path.walk()
by usingos.DirEntry.path
where possible.gh-89039: When replace() method is called on a subclass of datetime, date or time, properly call derived constructor. Previously, only the base class's constructor was called.
Also, make sure to pass non-zero fold values when creating subclasses in various methods. Previously, fold was silently ignored.
gh-112919: Speed-up
datetime.datetime.replace()
,datetime.date.replace()
anddatetime.time.replace()
.gh-59013: Set breakpoint on the first executable line of the function, instead of the line of function definition when the user do
break func
usingpdb
gh-112343: Improve handling of pdb convenience variables to avoid replacing string contents.
gh-112240: Add option to calendar module CLI to specify the weekday to start each week. Patch by Steven Ward.
gh-111741: Recognise
image/webp
as a standard format in themimetypes
module.gh-43457: Fix the
tkinter
widget methodwm_attributes()
. It now accepts the attribute name without the minus prefix to get window attributes and allows to specify attributes and values to set as keyword arguments. Add new optional keyword argument return_python_dict: callingw.wm_attributes(return_python_dict=True)
returns the attributes as a dict instead of a tuple. Callingw.wm_attributes()
now returns a tuple instead of string if wantobjects was set to 0.gh-82626: Many functions now emit a warning if a boolean value is passed as a file descriptor argument.
gh-111051: Added check for file modification during debugging with
pdb
gh-110345: Show the Tcl/Tk patchlevel (rather than version) in
tkinter._test()
.gh-38807: Fix race condition in
trace
. Instead of checking if a directory exists and creating it, directly callos.makedirs()
with the kwargexist_ok=True
.gh-75705: Set unixfrom envelope in
mailbox.mbox
andmailbox.MMDF
.gh-106233: Fix stacklevel in
InvalidTZPathWarning
duringzoneinfo
module import.gh-105102: Allow
ctypes.Union
to be nested inctypes.Structure
when the system endianness is the opposite of the classes.gh-104282: Fix null pointer dereference in
lzma._decode_filter_properties()
due to improper handling of BCJ filters with properties of zero length. Patch by Radislav Chugunov.gh-96471: Add
queue.Queue
termination withshutdown()
.gh-101599: Changed argparse flag options formatting to remove redundancy.
gh-85984: Add POSIX pseudo-terminal functions
os.posix_openpt()
,os.grantpt()
,os.unlockpt()
, andos.ptsname()
.gh-102512: When
os.fork()
is called from a foreign thread (aka_DummyThread
), the type of the thread in a child process is changed to_MainThread
. Also changed its name and daemonic status, it can be now joined.gh-88569: Add
os.path.isreserved()
, which identifies reserved pathnames such as "NUL", "AUX" and "CON". This function is only available on Windows.Deprecate
pathlib.PurePath.is_reserved()
.bpo-38364: The
inspect
functionsisgeneratorfunction
,iscoroutinefunction
,isasyncgenfunction
now supportfunctools.partialmethod
wrapped functions the same way they supportfunctools.partial
.
Documentation¶
gh-115233: Fix an example for
LoggerAdapter
in the Logging Cookbook.gh-114123: Move the
csv
module docstring to thecsv
module instead of reexporting it from the internal_csv
module, and remove__doc__
fromcsv.__all__
.Move
csv.__version__
to thecsv
module instead of reexporting it from the internal_csv
module, and remove__version__
fromcsv.__all__
.
Tests¶
Build¶
gh-115167: Avoid vendoring
vcruntime140_threads.dll
when building with Visual Studio 2022 version 17.8.gh-113632: Promote WASI to a tier 2 platform and drop Emscripten from tier 3 in configure.ac.
gh-114099: configure and Makefile were refactored to accommodate framework builds on Apple platforms other than macOS.
gh-114875: Add
getgrent()
as a prerequisite for building thegrp
module.
Windows¶
gh-115049: Fixes
py.exe
launcher failing when run as users without user profiles.gh-115009: Update Windows installer to use SQLite 3.45.1.
gh-109991: Update Windows build to use OpenSSL 3.0.13.
gh-111239: Update Windows builds to use zlib v1.3.1.
gh-100107: The
py.exe
launcher will no longer attempt to run the Microsoft Store redirector when launching a script containing a/usr/bin/env
shebanggh-112984: Adds free-threaded binaries to Windows installer as an optional component.
gh-89240: Allows
multiprocessing
to create pools of greater than 62 processes.
macOS¶
gh-115009: Update macOS installer to use SQLite 3.45.1.
gh-109991: Update macOS installer to use OpenSSL 3.0.13.
gh-114490: Add Mach-O linkage support for
platform.architecture()
.gh-87804: On macOS the result of
os.statvfs
andos.fstatvfs
now correctly report the size of very large disks, in previous versions the reported number of blocks was wrong for disks with at least 2**32 blocks.
IDLE¶
Tools/Demos¶
gh-113516: Don't set
LDSHARED
when building for WASI.gh-109991: Update GitHub CI workflows to use OpenSSL 3.0.13 and multissltests to use 1.1.1w, 3.0.13, 3.1.5, and 3.2.1.
gh-115015: Fix a bug in Argument Clinic that generated incorrect code for methods with no parameters that use the METH_METHOD | METH_FASTCALL | METH_KEYWORDS calling convention. Only the positional parameter count was checked; any keyword argument passed would be silently accepted.
C API¶
gh-111140: Adds
PyLong_AsNativeBytes()
,PyLong_FromNativeBytes()
andPyLong_FromUnsignedNativeBytes()
functions.gh-114685:
PyBuffer_FillInfo()
now raises aSystemError
if called withPyBUF_READ
orPyBUF_WRITE
as flags. These flags should only be used with thePyMemoryView_*
C API.gh-114685:
PyObject_GetBuffer()
now raises aSystemError
if called withPyBUF_READ
orPyBUF_WRITE
as flags. These flags should only be used with thePyMemoryView_*
C API.gh-114626: Add
PyCFunctionFast
andPyCFunctionFastWithKeywords
typedefs (identical to the existing_PyCFunctionFast
and_PyCFunctionFastWithKeywords
typedefs, just without a leading_
prefix).gh-114329: Add
PyList_GetItemRef()
, which is similar toPyList_GetItem()
but returns a strong reference instead of a borrowed reference.gh-110850: Add PyTime C API:
PyTime_t
type.PyTime_MIN
andPyTime_MAX
constants.PyTime_AsSecondsDouble()
,PyTime_Monotonic()
,PyTime_PerfCounter()
, andPyTime_Time()
functions.
Patch by Victor Stinner.
gh-112066: Add
PyDict_SetDefaultRef()
: insert a key and value into a dictionary if the key is not already present. This is similar todict.setdefault()
, but returns an integer value indicating if the key was already present. It is also similar toPyDict_SetDefault()
, but returns a strong reference instead of a borrowed reference.
Python 3.13.0 alpha 3¶
Release date: 2024-01-17
Security¶
Core and Builtins¶
gh-107901: Compiler duplicates basic blocks that have an eval breaker check, no line number, and multiple predecessors.
gh-107901: A jump leaving an exception handler back to normal code no longer checks the eval breaker.
gh-113655: Set the C recursion limit to 4000 on Windows, and 10000 on Linux/OSX. This seems to be near the sweet spot to maintain safety, but not compromise backwards compatibility.
gh-113710: Add typed stack effects to the interpreter DSL, along with various instruction annotations.
gh-77046: On Windows, file descriptors wrapping Windows handles are now created non inheritable by default (PEP 446). Patch by Zackery Spytz and Victor Stinner.
gh-113853: Guarantee that all executors make progress. This then guarantees that tier 2 execution always makes progress.
gh-113753: Fix an issue where the finalizer of
PyAsyncGenASend
objects might not be called if they were allocated from a free list.gh-107901: Compiler changed so that synthetic jumps which are not at loop end no longer check the eval breaker.
gh-113703: Fix a regression in the
codeop
module that was causing it to incorrectly identify incomplete f-strings. Patch by Pablo Galindogh-89811: Check for a valid
tp_version_tag
before performing bytecode specializations that rely on this value being usable.gh-111488: Changed error message in case of no 'in' keyword after 'for' in list comprehensions
gh-113657: Fix an issue that caused important instruction pointer updates to be optimized out of tier two traces.
gh-113603: Fixed bug where a redundant NOP is not removed, causing an assertion to fail in the compiler in debug mode.
gh-113602: Fix an error that was causing the parser to try to overwrite existing errors and crashing in the process. Patch by Pablo Galindo
gh-113486: No longer issue spurious
PY_UNWIND
events for optimized calls to classes.gh-113297: Fix segfault in the compiler on with statement with 19 context managers.
gh-111375: Only use
NULL
in the exception stack to indicate an exception was handled. Patch by Carey Metcalfe.gh-112215: Increase the C recursion limit by a factor of 3 for non-debug builds, except for webassembly and s390 platforms which are unchanged. This mitigates some regressions in 3.12 with deep recursion mixing builtin (C) and Python code.
gh-113054: Fixed bug where a redundant NOP is not removed, causing an assertion to fail in the compiler in debug mode.
gh-106905: Use per AST-parser state rather than global state to track recursion depth within the AST parser to prevent potential race condition due to simultaneous parsing.
The issue primarily showed up in 3.11 by multithreaded users of
ast.parse()
. In 3.12 a change to when garbage collection can be triggered prevented the race condition from occurring.gh-108866: Change the API and contract of
_PyExecutorObject
to return the next_instr pointer, instead of the frame, and to always execute at least one instruction.gh-112943: Correctly compute end column offsets for multiline tokens in the
tokenize
module. Patch by Pablo Galindogh-112125: Fix
None.__ne__(None)
returningNotImplemented
instead ofFalse
.gh-74616:
input()
now raises a ValueError when output on the terminal if the prompt contains embedded null characters instead of silently truncating it.gh-112716: Fix SystemError in the
import
statement and in__reduce__()
methods of builtin types when__builtins__
is not a dict.gh-112730: Use color to highlight error locations in tracebacks. Patch by Pablo Galindo
gh-112625: Fixes a bug where a bytearray object could be cleared while iterating over an argument in the
bytearray.join()
method that could result in reading memory after it was freed.gh-112660: Do not clear unexpected errors during formatting error messages for ImportError and AttributeError for modules.
gh-105967: Workaround a bug in Apple's macOS platform zlib library where
zlib.crc32()
andbinascii.crc32()
could produce incorrect results on multi-gigabyte inputs. Including when usingzipfile
on zips containing large data.gh-95754: Provide a better error message when accessing invalid attributes on partially initialized modules. The origin of the module being accessed is now included in the message to help with the common issue of shadowing other modules.
gh-112217: Add check for the type of
__cause__
returned from calling the typeT
inraise from T
.gh-111058: Change coro.cr_frame/gen.gi_frame to return
None
after the coroutine/generator has been closed. This fixes a bug wheregetcoroutinestate()
andgetgeneratorstate()
return the wrong state for a closed coroutine/generator.gh-112388: Fix an error that was causing the parser to try to overwrite tokenizer errors. Patch by pablo Galindo
gh-112387: Fix error positions for decoded strings with backwards tokenize errors. Patch by Pablo Galindo
gh-99606: Make code generated for an empty f-string identical to the code of an empty normal string.
gh-112367: Avoid undefined behaviour when using the perf trampolines by not freeing the code arenas until shutdown. Patch by Pablo Galindo
gh-112320: The Tier 2 translator now tracks the confidence level for staying "on trace" (i.e. not exiting back to the Tier 1 interpreter) for branch instructions based on the number of bits set in the branch "counter". Trace translation ends when the confidence drops below 1/3rd.
gh-109598:
PyComplex_RealAsDouble()
/PyComplex_ImagAsDouble()
now tries to convert an object to acomplex
instance using its__complex__()
method before falling back to the__float__()
method. Patch by Sergey B Kirpichev.gh-94606: Fix UnicodeEncodeError when
email.message.get_payload()
reads a message with a Unicode surrogate character and the message content is not well-formed for surrogateescape encoding. Patch by Sidney Markowitz.bpo-21861: Use the object's actual class name in
_io.FileIO.__repr__()
,_io._WindowsConsoleIO()
and_io.TextIOWrapper.__repr__()
, to make these methods subclass friendly.bpo-34392: Added
sys._is_interned()
.
Library¶
gh-114077: Fix possible
OverflowError
insocket.socket.sendfile()
when pass count larger than 2 GiB on 32-bit platform.gh-111803:
plistlib
now supports loading more deeply nested lists in binary format.gh-114014: Fixed a bug in
fractions.Fraction
where an invalid string usingd
in the decimals part creates a different error compared to other invalid letters/characters. Patch by Jeremiah Gabriel Pascual.gh-108364:
sqlite3.Connection.iterdump()
now ensures that foreign key support is disabled before dumping the database schema, if there is any foreign key violation. Patch by Erlend E. Aasland and Mariusz Felisiak.gh-113971: The
zipfile.ZipInfo
previously protected._compresslevel
attribute has been made public as.compress_level
with the old_compresslevel
name remaining available as a property to retain compatibility.gh-113877: Fix
tkinter
methodwinfo_pathname()
on 64-bit Windows.gh-113868: Added
mmap.MAP_NORESERVE
,mmap.MAP_NOEXTEND
,mmap.MAP_HASSEMAPHORE
,mmap.MAP_NOCACHE
,mmap.MAP_JIT
,mmap.MAP_RESILIENT_CODESIGN
,mmap.MAP_RESILIENT_MEDIA
,mmap.MAP_32BIT
,mmap.MAP_TRANSLATED_ALLOW_EXECUTE
,mmap.MAP_UNIX03
andmmap.MAP_TPRO
. All of them aremmap(2)
flags on macOS.gh-113848:
asyncio.TaskGroup()
andasyncio.timeout()
context managers now handleCancelledError
subclasses as well as exactCancelledError
.gh-113661: unittest runner: Don't exit 5 if tests were skipped. The intention of exiting 5 was to detect issues where the test suite wasn't discovered at all. If we skipped tests, it was correctly discovered.
gh-96037: Insert
TimeoutError
in the context of the exception that was raised during exiting an expiredasyncio.timeout()
block.gh-113781: Silence unraisable AttributeError when warnings are emitted during Python finalization.
gh-113238: Add
Anchor
toimportlib.resources
(in order for the code to comply with the documentation)gh-111693:
asyncio.Condition.wait()
now re-raises the sameCancelledError
instance that may have caused it to be interrupted. Fixed race condition inasyncio.Semaphore.acquire()
when interrupted with aCancelledError
.gh-113791: Add
CLOCK_MONOTONIC_RAW_APPROX
andCLOCK_UPTIME_RAW_APPROX
totime
on macOS. These are clocks available on macOS 10.12 or later.gh-112932: Restore the ability for
zipfile
toextractall
from zip files with a "/" directory entry in them as is commonly added to zips by some wiki or bug tracker data exporters.gh-113568: Raise deprecation warnings from
pathlib.PurePath
and not its private base classPurePathBase
.gh-113594: Fix
UnicodeEncodeError
inemail
when re-fold lines that contain unknown-8bit encoded part followed by non-unknown-8bit encoded part.gh-113538: In
asyncio.StreamReaderProtocol.connection_made()
, there is callback that logs an error if the task wrapping the "connected callback" fails. This callback would itself fail if the task was cancelled. Prevent this by checking whether the task was cancelled first. If so, close the transport but don't log an error.gh-113626: Add support for the allow_code argument in the
marshal
module. Passingallow_code=False
prevents serialization and de-serialization of code objects which is incompatible between Python versions.gh-85567: Fix resource warnings for unclosed files in
pickle
andpickletools
command line interfaces.gh-113537: Support loads
str
inplistlib.loads()
.gh-89850: Add default implementations of
pickle.Pickler.persistent_id()
andpickle.Unpickler.persistent_load()
methods in the C implementation. Callingsuper().persistent_id()
andsuper().persistent_load()
in subclasses of the C implementation ofpickle.Pickler
andpickle.Unpickler
classes no longer causes infinite recursion.gh-113569: Indicate if there were no actual calls in unittest
assert_has_calls()
failure.gh-101225: Increase the backlog for
multiprocessing.connection.Listener
objects created bymultiprocessing.manager
andmultiprocessing.resource_sharer
to significantly reduce the risk of getting a connection refused error when creating amultiprocessing.connection.Connection
to them.gh-113568: Raise audit events from
pathlib.Path
and not its private base classPathBase
.gh-113543: Make sure that
webbrowser.MacOSXOSAScript
sendswebbrowser.open
audit event.gh-113028: When a second reference to a string appears in the input to
pickle
, and the Python implementation is in use, we are guaranteed that a single copy gets pickled and a single object is shared when reloaded. Previously, in protocol 0, when a string contained certain characters (e.g. newline) it resulted in duplicate objects.gh-113421: Fix multiprocessing logger for
%(filename)s
.gh-111784: Fix segfaults in the
_elementtree
module. Fix first segfault during deallocation of_elementtree.XMLParser
instances by keeping strong reference topyexpat
module in module state for capsule lifetime. Fix second segfault which happens in the same deallocation process by keeping strong reference to_elementtree
module inXMLParser
structure for_elementtree
module lifetime.gh-113407: Fix import of
unittest.mock
when CPython is built without docstrings.gh-113320: Fix regression in Python 3.12 where
Protocol
classes that were not marked asruntime-checkable
would be unnecessarily introspected, potentially causing exceptions to be raised if the protocol had problematic members. Patch by Alex Waygood.gh-53502: Add a new option
aware_datetime
inplistlib
to loads or dumps aware datetime.gh-113358: Fix rendering tracebacks with exceptions with a broken __getattr__
gh-113214: Fix an
AttributeError
during asyncio SSL protocol aborts in SSL-over-SSL scenarios.gh-113246: Update bundled pip to 23.3.2.
gh-87264: Fixed tarfile list() method to show file type.
gh-112182:
asyncio.futures.Future.set_exception()
now transformsStopIteration
intoRuntimeError
instead of hanging or other misbehavior. Patch contributed by Jamie Phan.gh-113225: Speed up
pathlib.Path.glob()
by usingos.DirEntry.path
where possible.gh-113149: Improve error message when a JSON array or object contains a trailing comma. Patch by Carson Radtke.
gh-113117: The
subprocess
module can now use theos.posix_spawn()
function withclose_fds=True
on platforms whereposix_spawn_file_actions_addclosefrom_np
is available. Patch by Jakub Kulik.gh-113199: Make
http.client.HTTPResponse.read1
andhttp.client.HTTPResponse.readline
close IO after reading all data when content length is known. Patch by Illia Volochii.gh-113191: Add support of
os.fchmod()
and a file descriptor inos.chmod()
on Windows.gh-113188: Fix
shutil.copymode()
andshutil.copystat()
on Windows. Previously they worked differently if dst is a symbolic link: they modified the permission bits of dst itself rather than the file it points to if follow_symlinks is true or src is not a symbolic link, and did not modify the permission bits if follow_symlinks is false and src is a symbolic link.gh-113119:
os.posix_spawn()
now acceptsenv=None
, which makes the newly spawned process use the current process environment. Patch by Jakub Kulik.gh-113202: Add a
strict
option tobatched()
in theitertools
module.gh-61648: Detect line numbers of properties in doctests.
gh-113175: Sync with importlib_metadata 7.0, including improved type annotations, fixed issue with symlinked packages in
package_distributions
, addedEntryPoints.__repr__
, introduced thediagnose
script, addedDistribution.origin
property, and removed deprecatedEntryPoint
access by numeric index (tuple behavior).gh-59616: Add support of
os.lchmod()
and the follow_symlinks argument inos.chmod()
on Windows. Note that the default value of follow_symlinks inos.lchmod()
isFalse
on Windows.gh-112559:
signal.signal()
andsignal.getsignal()
no longer callrepr
on callable handlers.asyncio.run()
andasyncio.Runner.run()
no longer callrepr
on the task results. Patch by Yilei Yang.gh-112962:
dis
module functions add cache information to theInstruction
instance rather than creating fakeInstruction
instances to represent the cache entries.gh-112989: Reduce overhead to connect sockets with
asyncio
SelectorEventLoop.gh-112970: Use
closefrom()
on Linux where available (e.g. glibc-2.34), rather than only FreeBSD.gh-110190: Fix ctypes structs with array on PPC64LE platform by setting
MAX_STRUCT_SIZE
to 64 in stgdict. Patch by Diego Russo.gh-112540: The statistics.geometric_mean() function now returns zero for datasets containing a zero. Formerly, it would raise an exception.
gh-87286: Added
LOG_FTP
,LOG_NETINFO
,LOG_REMOTEAUTH
,LOG_INSTALL
,LOG_RAS
, andLOG_LAUNCHD
tot thesyslog
module, all of them constants on used on macOS.gh-112800: Fix
asyncio
SubprocessTransport.close()
not to throwPermissionError
when used with setuid executables.gh-51944: Add the following constants to the
termios
module. These values are present in macOS system headers:ALTWERASE
,B14400
,B28800
,B7200
,B76800
,CCAR_OFLOW
,CCTS_OFLOW
,CDSR_OFLOW
,CDTR_IFLOW
,CIGNORE
,CRTS_IFLOW
,EXTPROC
,IUTF8
,MDMBUF
,NL2
,NL3
,NOKERNINFO
,ONOEOT
,OXTABS
,VDSUSP
,VSTATUS
.gh-79325: Fix an infinite recursion error in
tempfile.TemporaryDirectory()
cleanup on Windows.gh-94692:
shutil.rmtree()
now only catches OSError exceptions. Previously a symlink attack resistant version ofshutil.rmtree()
could ignore or pass to the error handler arbitrary exception when invalid arguments were provided.gh-112736: The use of del-safe symbols in
subprocess
was refactored to allow for use in cross-platform build environments.gh-112727: Speed up
pathlib.Path.absolute()
. Patch by Barney Gale.gh-74690: Speedup
issubclass()
checks against simpleruntime-checkable protocols
by around 6%. Patch by Alex Waygood.gh-74690: Speedup
isinstance()
checks by roughly 20% forruntime-checkable protocols
that only have one callable member. Speedupissubclass()
checks for these protocols by roughly 10%. Patch by Alex Waygood.gh-112645: Remove deprecation error on passing
onerror
toshutil.rmtree()
.gh-112640: Add
kwdefaults
parameter totypes.FunctionType
to set default keyword argument values.gh-112622: Ensure
name
parameter is passed to event loop inasyncio.create_task()
.gh-112618: Fix a caching bug relating to
typing.Annotated
.Annotated[str, True]
is no longer identical toAnnotated[str, 1]
.gh-112334: Fixed a performance regression in 3.12's
subprocess
on Linux where it would no longer use the fast-pathvfork()
system call when it could have due to a logic bug, instead falling back to the safe but slowerfork()
.Also fixed a second 3.12.0 potential security bug. If a value of
extra_groups=[]
was passed tosubprocess.Popen
or related APIs, the underlyingsetgroups(0, NULL)
system call to clear the groups list would not be made in the child process prior toexec()
.This was identified via code inspection in the process of fixing the first bug.
gh-110190: Fix ctypes structs with array on Arm platform by setting
MAX_STRUCT_SIZE
to 32 in stgdict. Patch by Diego Russo.gh-81194: Fix a crash in
socket.if_indextoname()
with specific value (UINT_MAX). Fix an integer overflow insocket.if_indextoname()
on 64-bit non-Windows platforms.gh-112578: Fix a spurious
RuntimeWarning
when executing thezipfile
module.gh-112516: Update the bundled copy of pip to version 23.3.1.
gh-112510: Add
readline.backend
for the backend readline uses (editline
orreadline
)gh-112328: [Enum] Make
EnumDict
,EnumDict.member_names
,EnumType._add_alias_
andEnumType._add_value_alias_
public.gh-112509: Fix edge cases that could cause a key to be present in both the
__required_keys__
and__optional_keys__
attributes of atyping.TypedDict
. Patch by Jelle Zijlstra.gh-101336: Add
keep_alive
keyword parameter forAbstractEventLoop.create_server()
andBaseEventLoop.create_server()
.gh-63284: Added support for TLS-PSK (pre-shared key) mode to the
ssl
module.gh-112414: Fix regression in Python 3.12 where calling
repr()
on a module that had been imported using a custom loader could fail withAttributeError
. Patch by Alex Waygood.gh-112358: Revert change to
struct.Struct
initialization that broke some cases of subclassing.gh-112405: Optimize
pathlib.PurePath.relative_to()
. Patch by Alex Waygood.gh-94722: Fix bug where comparison between instances of
DocTest
fails if one of them hasNone
as its lineno.gh-112361: Speed up a small handful of
pathlib
methods by removing some temporary objects.gh-112345: Improve error message when trying to call
issubclass()
against atyping.Protocol
that has non-method members. Patch by Randolf Scholz.gh-112137: Change
dis
output to display no-lineno as "--" instead of "None".gh-112332: Deprecate the
exc_type
field oftraceback.TracebackException
. Addexc_type_str
to replace it.gh-81620: Add extra tests for
random.binomialvariate()
gh-112292: Fix a crash in
readline
when imported from a sub interpreter. Patch by Anthony Shawgh-77621: Slightly improve the import time of the
pathlib
module by deferring some imports. Patch by Barney Gale.gh-112137: Change
dis
output to display logical labels for jump targets instead of offsets.gh-112139: Add
Signature.format()
to format signatures to string with extra options. And use it inpydoc
to render more readable signatures that have new lines between parameters.gh-112105: Make
readline.set_completer_delims()
work with libeditgh-106922: Display multiple lines with
traceback
when errors span multiple lines.gh-111874: When creating a
typing.NamedTuple
class, ensure__set_name__()
is called on all objects that define__set_name__
and exist in the values of theNamedTuple
class's class dictionary. Patch by Alex Waygood.gh-68166: Add support of the "vsapi" element type in
tkinter.ttk.Style.element_create()
.gh-110275: Named tuple's methods
_replace()
and__replace__()
now raise TypeError instead of ValueError for invalid keyword arguments.gh-99367: Do not mangle
sys.path[0]
inpdb
if safe_path is setgh-111615: Fix a regression caused by a fix to gh-93162 whereby you couldn't configure a
QueueHandler
without specifying handlers.gh-75666: Fix the behavior of
tkinter
widget'sunbind()
method with two arguments. Previously,widget.unbind(sequence, funcid)
destroyed the current binding for sequence, leaving sequence unbound, and deleted the funcid command. Now it removes only funcid from the binding for sequence, keeping other commands, and deletes the funcid command. It leaves sequence unbound only if funcid was the last bound command.gh-67790: Implement basic formatting support (minimum width, alignment, fill) for
fractions.Fraction
.gh-111049: Fix crash during garbage collection of the
io.BytesIO
buffer object.gh-102980: Redirect the output of
interact
command ofpdb
to the same channel as the debugger. Add tests and improve docs.gh-102988:
email.utils.getaddresses()
andemail.utils.parseaddr()
now return('', '')
2-tuples in more situations where invalid email addresses are encountered instead of potentially inaccurate values. Add optional strict parameter to these two functions: usestrict=False
to get the old behavior, accept malformed inputs.getattr(email.utils, 'supports_strict_parsing', False)
can be use to check if the strict parameter is available. Patch by Thomas Dwyer and Victor Stinner to improve the CVE-2023-27043 fix.gh-52161:
cmd.Cmd.do_help()
now cleans docstrings withinspect.cleandoc()
before writing them. Patch by Filip Łapkiewicz.gh-82300: Add
track
parameter tomultiprocessing.shared_memory.SharedMemory
that allows using shared memory blocks without having to register with the POSIX resource tracker that automatically releases them upon process exit.gh-110109: Add private
pathlib._PurePathBase
class: a base class forpathlib.PurePath
that omits certain magic methods. It may be made public (along with_PathBase
) in future.gh-109858: Protect
zipfile
from "quoted-overlap" zipbomb. It now raises BadZipFile when try to read an entry that overlaps with other entry or central directory.gh-109786: Fix possible reference leaks and crash when re-enter the
__next__()
method ofitertools.pairwise
.gh-91539: Small (10 - 20%) and trivial performance improvement of
urllib.request.getproxies_environment()
, typically useful when there are many environment variables to go over.gh-103363: Add follow_symlinks keyword-only argument to
pathlib.Path.owner()
andgroup()
, defaulting toTrue
.gh-99437:
runpy.run_path()
now decodes path-like objects, making sure __file__ and sys.argv[0] of the module being run are always strings.gh-104003: Add
warnings.deprecated()
, a decorator to mark deprecated functions to static type checkers and to warn on usage of deprecated classes and functions. See PEP 702. Patch by Jelle Zijlstra.gh-103708: Make hardcoded python name, a configurable parameter so that different implementations of python can override it instead of making huge diffs in sysconfig.py
gh-66515:
mailbox.MH
now supports folders that do not contain a.mh_sequences
file (e.g. Claws Mail IMAP-cache folders). Patch by Serhiy Storchaka.gh-83162: Renamed
re.error
toPatternError
for clarity, and keptre.error
for backward compatibility. Patch by Matthias Bussonnier and Adam Chhina.gh-91133: Fix a bug in
tempfile.TemporaryDirectory
cleanup, which now no longer dereferences symlinks when working around file system permission errors.bpo-43153: On Windows,
tempfile.TemporaryDirectory
previously masked aPermissionError
withNotADirectoryError
during directory cleanup. It now correctly raisesPermissionError
if errors are not ignored. Patch by Andrei Kulakov and Ken Jin.bpo-32731:
getpass.getuser()
now raisesOSError
for all failures rather thanImportError
on systems lacking thepwd
module orKeyError
if the password database is empty.bpo-34321:
mmap.mmap
now has a trackfd parameter on Unix; if it isFalse
, the file descriptor specified by fileno will not be duplicated.bpo-35332: The
shutil.rmtree()
function now ignores errors when callingos.close()
when ignore_errors isTrue
, andos.close()
no longer retried after error.bpo-35928:
io.TextIOWrapper
now correctly handles the decoding buffer afterread()
andwrite()
.bpo-26791:
shutil.move()
now moves a symlink into a directory when that directory is the target of the symlink. This provides the same behavior as the mv shell command. The previous behavior raised an exception. Patch by Jeffrey Kintscher.bpo-41422: Fixed memory leaks of
pickle.Pickler
andpickle.Unpickler
involving cyclic references via the internal memo mapping.bpo-19821: The
pydoc.ispackage()
function has been deprecated.bpo-40262: The
ssl.SSLSocket.recv_into()
method no longer requires the buffer argument to implement__len__
and supports buffers with arbitrary item size.bpo-39912:
warnings.filterwarnings()
andwarnings.simplefilter()
now raise appropriate exceptions instead ofAssertionError
. Patch contributed by Rémi Lapeyre.bpo-37260: Fixed a race condition in
shutil.rmtree()
in which directory entries removed by another process or thread whileshutil.rmtree()
is running can cause it to raise FileNotFoundError. Patch by Jeffrey Kintscher.bpo-36959: Fix some error messages for invalid ISO format string combinations in
strptime()
that referred to directives not contained in the format string. Patch by Gordon P. Hemsley.bpo-18060: Fixed a class inheritance issue that can cause segfaults when deriving two or more levels of subclasses from a base class of Structure or Union.
bpo-29779: Add a new
PYTHON_HISTORY
environment variable to set the location of a.python_history
file.bpo-21360:
mailbox.Maildir
now ignores files with a leading dot.
Documentation¶
gh-111699: Relocate
smtpd
deprecation notice to its own section rather than underlocale
in What's New in Python 3.12 documentgh-110746: Improved markup for valid options/values for methods ttk.treeview.column and ttk.treeview.heading, and for Layouts.
gh-95649: Document that the
asyncio
module contains code taken from v0.16.0 of the uvloop project, as well as the required MIT licensing information.
Tests¶
gh-111798: Disable
test_super_deep()
fromtest_call
under pydebug builds on WASI; the stack depth is too small to make the test useful.gh-111801: Lower the recursion limit in
test_isinstance
fortest_infinitely_many_bases()
. This prevents a stack overflow on a pydebug build of WASI.gh-111802: Specify a low recursion depth for
test_bad_getattr()
intest.pickletester
to avoid exhausting the stack under a pydebug build for WASI.gh-44626: Fix
os.path.isabs()
incorrectly returningTrue
when given a path that starts with exactly one (back)slash on Windows.Fix
pathlib.PureWindowsPath.is_absolute()
incorrectly returningFalse
for some paths beginning with two (back)slashes.gh-113633: Use module state for the _testcapi extension module.
gh-109980: Fix
test_tarfile_vs_tar
intest_shutil
for macOS, where system tar can include more information in the archive thanshutil.make_archive
.gh-112769: The tests now correctly compare zlib version when
zlib.ZLIB_RUNTIME_VERSION
contains non-integer suffixes. For example zlib-ng defines the version as1.3.0.zlib-ng
.gh-112334: Adds a regression test to verify that
vfork()
is used when expected bysubprocess
on vfork enabled POSIX systems (Linux).gh-108927: Fixed order dependence in running tests in the same process when a test that has submodules (e.g. test_importlib) follows a test that imports its submodule (e.g. test_importlib.util) and precedes a test (e.g. test_unittest or test_compileall) that uses that submodule.
bpo-40648: Test modes that file can get with chmod() on Windows.
Build¶
gh-114013: Fix
Tools/wasm/wasi.py
to not include the path topython.wasm
as part ofHOSTRUNNER
. The environment variable is meant to specify how to run the WASI host only, havingpython.wasm
and relevant flags appended to theHOSTRUNNER
. This fixesmake test
work.gh-113258: Changed the Windows build to write out generated frozen modules into the build tree instead of the source tree.
gh-112305: Fixed the
check-clean-src
step performed on out of tree builds to detect errant$(srcdir)/Python/frozen_modules/*.h
files and recommend appropriate source tree cleanup steps to get a working build again.gh-112536: Add support for thread sanitizer (TSAN)
gh-112867: Fix the build for the case that WITH_PYMALLOC_RADIX_TREE=0 set.
gh-103065: Introduce
Tools/wasm/wasi.py
to simplify doing a WASI build.bpo-11102: The
os.major()
,os.makedev()
, andos.minor()
functions are now available on HP-UX v3.bpo-36351: Do not set ipv6type when cross-compiling.
Windows¶
gh-114096: Process privileges that are activated for creating directory junctions are now restored afterwards, avoiding behaviour changes in other parts of the program.
gh-111877:
os.stat()
calls were returning incorrect time values for files that could not be accessed directly.gh-111973: Update Windows installer to use SQLite 3.44.2.
gh-113009:
multiprocessing
: On Windows, fix a race condition inProcess.terminate()
: no longer set thereturncode
attribute to always callWaitForSingleObject()
inProcess.wait()
. Previously, sometimes the process was still running afterTerminateProcess()
even ifGetExitCodeProcess()
is notSTILL_ACTIVE
. Patch by Victor Stinner.gh-86179: Fixes path calculations when launching Python on Windows through a symlink.
gh-71383: Update Tcl/Tk in Windows installer to 8.6.13 with a patch to suppress incorrect ThemeChanged warnings.
gh-111650: Ensures the
Py_GIL_DISABLED
preprocessor variable is defined inpyconfig.h
so that extension modules written in C are able to use it.gh-112278: Reduce the time cost for some functions in
platform
on Windows if current user has no permission to the WMI.gh-73427: Deprecate
sys._enablelegacywindowsfsencoding()
. UsePYTHONLEGACYWINDOWSFSENCODING
instead. Patch by Inada Naoki.gh-87868: Correctly sort and remove duplicate environment variables in
_winapi.CreateProcess()
.bpo-37308: Fix mojibake in
mmap.mmap
when using a non-ASCII tagname argument on Windows.
macOS¶
gh-113666: Add the following constants to module
stat
:UF_SETTABLE
,UF_TRACKED
,UF_DATAVAULT
,SF_SUPPORTED
,SF_SETTABLE
,SF_SYNTHETIC
,SF_RESTRICTED
,SF_FIRMLINK
andSF_DATALESS
. The valuesUF_SETTABLE
,SF_SUPPORTED
,SF_SETTABLE
andSF_SYNTHETIC
are only available on macOS.gh-113536:
os.waitid()
is now available on macOSgh-110459: Running
configure ... --with-openssl-rpath=X/Y/Z
no longer fails to detect OpenSSL on macOS.gh-74573: Document that
dbm.ndbm
can silently corrupt DBM files on updates when exceeding undocumented platform limits, and can crash (segmentation fault) when reading such a corrupted file. (FB8919203)gh-65701: The freeze tool doesn't work with framework builds of Python. Document this and bail out early when running the tool with such a build.
gh-87277: webbrowser: Don't look for X11 browsers on macOS. Those are generally not used and probing for them can result in starting XQuartz even if it isn't used otherwise.
gh-111973: Update macOS installer to use SQLite 3.44.2.
gh-108269: Set
CFBundleAllowMixedLocalizations
to true in the Info.plist for the framework, embedded Python.app and IDLE.app with framework installs on macOS. This allows applications to pick up the user's preferred locale when that's different from english.gh-102362: Make sure the result of
sysconfig.get_plaform()
includes at least a major and minor versions, even ifMACOSX_DEPLOYMENT_TARGET
is set to only a major version during build to match the format expected by pip.gh-110017: Disable a signal handling stress test on macOS due to a bug in macOS (FB13453490).
gh-110820: Make sure the preprocessor definitions for
ALIGNOF_MAX_ALIGN_T
,SIZEOF_LONG_DOUBLE
andHAVE_GCC_ASM_FOR_X64
are correct for Universal 2 builds on macOS.gh-109981: Use
/dev/fd
on macOS to determine the number of open files intest.support.os_helper.fd_count
to avoid a crash with "guarded" file descriptors when probing for open files.
IDLE¶
gh-72284: Improve the lists of features, editor key bindings, and shell key bingings in the IDLE doc.
gh-113903: Fix rare failure of test.test_idle, in test_configdialog.
gh-113729: Fix the "Help -> IDLE Doc" menu bug in 3.11.7 and 3.12.1.
gh-113269: Fix test_editor hang on macOS Catalina.
gh-112898: Fix processing unsaved files when quitting IDLE on macOS.
bpo-13586: Enter the selected text when opening the "Replace" dialog.
C API¶
gh-106560: Fix redundant declarations in the public C API. Declare PyBool_Type, PyLong_Type and PySys_Audit() only once. Patch by Victor Stinner.
gh-112438: Fix support of format units "es", "et", "es#", and "et#" in nested tuples in
PyArg_ParseTuple()
-like functions.gh-111545: Add
Py_HashPointer()
function to hash a pointer. Patch by Victor Stinner.gh-65210: Change the declaration of the keywords parameter of
PyArg_ParseTupleAndKeywords()
andPyArg_VaParseTupleAndKeywords()
for better compatibility with C++.
Python 3.13.0 alpha 2¶
Release date: 2023-11-22
Core and Builtins¶
gh-112243: Don't include comments in f-string debug expressions. Patch by Pablo Galindo
gh-112287: Slightly optimize the Tier 2 (uop) interpreter by only loading
oparg
andoperand
when needed. Also double the trace size limit again, to 512 this time.gh-111807: Lower the max parser stack depth to 1000 under WASI debug builds.
gh-111798: When Python is built in debug mode, set the C recursion limit to 500 instead of 1500. A debug build is likely built with low optimization level which implies higher stack memory usage than a release build. Patch by Victor Stinner.
gh-106529: Enable translating unspecialized
FOR_ITER
to Tier 2.gh-111916: Make hashlib related modules thread-safe without the GIL
gh-81137: Deprecate assignment to a function's
__code__
field when the new code object is of a mismatched type (e.g., from a generator to a plain function).gh-79932: Raise exception if
frame.clear()
is called on a suspended frame.gh-81925: Implement native thread ids for GNU KFreeBSD.
gh-111843: Use exponential backoff to reduce the number of failed tier 2 optimization attempts by over 99%.
gh-110829: Joining a thread now ensures the underlying OS thread has exited. This is required for safer fork() in multi-threaded processes.
gh-109369: Make sure that tier 2 traces are de-optimized if the code is instrumented
gh-111772: Specialize slot loads and stores for _Py_T_OBJECT as well as Py_T_OBJECT_EX
gh-111666: Speed up
BaseExceptionGroup.derive()
,BaseExceptionGroup.subgroup()
, andBaseExceptionGroup.split()
by changing how they parse passed arguments.gh-111654: Fix runtime crash when some error happens in opcode
LOAD_FROM_DICT_OR_DEREF
.gh-111623: Add support for sharing tuples between interpreters using the cross-interpreter API. Patch by Anthony Shaw.
gh-111354: The oparg of
YIELD_VALUE
is now1
if the instruction is part of a yield-from or await, and0
otherwise.The SUSPENDED frame state is now split into
SUSPENDED
andSUSPENDED_YIELD_FROM
. This simplifies the code in_PyGen_yf
.gh-111520: Merge the Tier 1 (bytecode) and Tier 2 (micro-ops) interpreters together, moving the Tier 2 interpreter loop and switch into
_PyEval_EvalFrameDefault()
inPython/ceval.c
. ThePython/executor.c
file is gone. Also theTIER_ONE
andTIER_TWO
macros are now handled by the code generator.Beware! This changes the environment variables to enable micro-ops and their debugging to
PYTHON_UOPS
andPYTHON_LLTRACE
.gh-109181: Speed up
Traceback
object creation by lazily compute the line number. Patch by Pablo Galindogh-111420: Allow type comments in parenthesized
with
statementsgh-111438: Add support for sharing floats between interpreters using the cross-interpreter API. Patch by Anthony Shaw.
gh-111435: Add support for sharing of
True
andFalse
between interpreters using the cross-interpreter API. Patch by Anthony Shaw.gh-102388: Fix a bug where
iso2022_jp_3
andiso2022_jp_2004
codecs read out of boundsgh-111366: Fix an issue in the
codeop
that was causingSyntaxError
exceptions raised in the presence of invalid syntax to not contain precise error messages. Patch by Pablo Galindogh-111380: Fix a bug that was causing
SyntaxWarning
to appear twice when parsing if invalid syntax is encountered later. Patch by Pablo galindogh-111374: Added a new environment variable
PYTHON_FROZEN_MODULES
. It determines whether or not frozen modules are ignored by the import machinery, equivalent of the-X frozen_modules
command-line option.gh-111354: Remove
oparg
fromYIELD_VALUE
. Changeoparg
ofRESUME
to include information about the except-depth. These changes make it possible to simplify the code in generator close.gh-94438: Fix a regression that prevented jumping across
is None
andis not None
when debugging. Patch by Savannah Ostrowski.gh-67224: Show source lines in tracebacks when using the
-c
option when running Python. Patch by Pablo Galindogh-111123: Fix a bug where a
global
declaration in anexcept
block is rejected when the global is used in theelse
block.gh-110938: Fix error messages for indented blocks with functions and classes with generic type parameters. Patch by Pablo Galindo
gh-109214: Remove unnecessary instruction pointer updates before returning from frames.
gh-110912: Correctly display the traceback for
MemoryError
exceptions using thetraceback
module. Patch by Pablo Galindogh-109894: Fixed crash due to improperly initialized static
MemoryError
in subinterpreter.gh-110892: Return
NULL
forPyTrace_RETURN
events caused by an exceptiongh-110864: Fix argument parsing by
_PyArg_UnpackKeywordsWithVararg
for functions defining pos-or-keyword, vararg, and kw-only parameters.gh-109094: Replace
prev_instr
on the interpreter frame byinstr_ptr
which points to the beginning of the instruction that is currently executing (or will execute once the frame resumes).gh-110805: Allow the repl to show source code and complete tracebacks. Patch by Pablo Galindo
gh-110722: Add
PYTHON_PRESITE=package.module
to import a module early in the interpreter lifecycle beforesite.py
is executed. Python needs to be built in debug mode for this option to exist.gh-110481: Implement biased reference counting in
--disable-gil
builds.gh-110543: Fix regression in Python 3.12 where
types.CodeType.replace()
would produce a broken code object if called on a module or class code object that contains a comprehension. Patch by Jelle Zijlstra.gh-89519: Removed chained
classmethod
descriptors (introduced in bpo-19072). This can no longer be used to wrap other descriptors such asproperty
. The core design of this feature was flawed and caused a number of downstream problems. To "pass-through" aclassmethod
, consider using the__wrapped__
attribute that was added in Python 3.10.gh-103615: Use local events for opcode tracing
bpo-46657: Add mimalloc memory allocator support.
gh-106718: When PyConfig.stdlib_dir is explicitly set, it's now respected and won't be overridden by PyConfig.home.
gh-106905: Fix incorrect SystemError about AST constructor recursion depth mismatch.
gh-100445: Improve error message for unterminated strings with escapes.
bpo-45759: Improved error messages for
elif
/else
statements not matching any valid statements. Patch by Jeremiah Vivian.
Library¶
gh-111942: Fix SystemError in the TextIOWrapper constructor with non-encodable "errors" argument in non-debug mode.
gh-111995: Added the
NI_IDN
constant to thesocket
module when present in C at build time for use withsocket.getnameinfo()
.gh-109538: Issue warning message instead of having
RuntimeError
be displayed when event loop has already been closed atStreamWriter.__del__()
.gh-111942: Fix crashes in
io.TextIOWrapper.reconfigure()
when pass invalid arguments, e.g. non-string encoding.gh-111460:
curses
: restore wide character support (includingcurses.unget_wch()
andget_wch()
) on macOS, which was unavailable due to a regression in Python 3.12.gh-103791:
contextlib.suppress
now supports suppressing exceptions raised as part of aBaseExceptionGroup
, in addition to the recent support forExceptionGroup
.gh-111835: The
mmap.mmap
class now has anseekable()
method that can be used when a seekable file-like object is required. Theseek()
method now returns the new absolute position. Patch by Donghee Na.gh-111804: Remove posix.fallocate() under WASI as the underlying posix_fallocate() is not available in WASI preview2.
gh-111841: Fix truncating arguments on an embedded null character in
os.putenv()
andos.unsetenv()
on Windows.gh-111768:
wsgiref.util.is_hop_by_hop()
is now exposed correctly in__all__
.gh-80731: Avoid executing the default function in
cmd.Cmd
in an except blockgh-111541: Fix
doctest
forSyntaxError
not-builtin subclasses.gh-111719: Add extra argument validation for
alias
command inpdb
gh-111482:
time
: Maketime.clock_gettime()
andtime.clock_gettime_ns()
functions up to 2x faster by faster calling convention. Patch by Victor Stinner.gh-110894: Call loop exception handler for exceptions in
client_connected_cb
ofasyncio.start_server()
so that applications can handle it. Patch by Kumar Aditya.gh-111531: Fix reference leaks in
bind_class()
andbind_all()
methods oftkinter
widgets.gh-111246:
asyncio.loop.create_unix_server()
will now automatically remove the Unix socket when the server is closed.gh-111356: Added
io.text_encoding()
,io.DEFAULT_BUFFER_SIZE
, andio.IncrementalNewlineDecoder
toio.__all__
.gh-66425: Remove the code to set the REMOTE_HOST header from wsgiref module, as it is unreachable. This header is used for performance reasons, which is not necessary in the wsgiref module.
gh-111429: Speed up
pathlib.PurePath.relative_to()
andis_relative_to()
.gh-111342: Fixed typo in
math.sumprod()
.gh-68166: Remove mention of not supported "vsapi" element type in
tkinter.ttk.Style.element_create()
. Add tests forelement_create()
and otherttk.Style
methods. Add examples forelement_create()
in the documentation.gh-111388: Add
show_group
parameter totraceback.format_exception_only()
, which allows to formatExceptionGroup
instances.gh-79033: Another attempt at fixing
asyncio.Server.wait_closed()
. It now blocks until both conditions are true: the server is closed, and there are no more active connections. (This means that in some cases where in 3.12.0 this function would incorrectly have returned immediately, it will now block; in particular, when there are no active connections but the server hasn't been closed yet.)gh-111295: Fix
time
not checking for errors when initializing.gh-111253: Add error checking during
_socket
module init.gh-111251: Fix
_blake2
not checking for errors when initializing.gh-111233: Fix
select
not checking for errors when initializing.gh-111230: Fix
ssl
not checking for errors when initializing.gh-111174: Fix crash in
io.BytesIO.getbuffer()
called repeatedly for empty BytesIO.gh-111187: Postpone removal version for locale.getdefaultlocale() to Python 3.15.
gh-111159: Fix
doctest
output comparison for exceptions with notes.gh-110910: Fix invalid state handling in
asyncio.TaskGroup
andasyncio.Timeout
. They now raise proper RuntimeError if they are improperly used and are left in consistent state after this.gh-111092: Make turtledemo run without default root enabled.
gh-110944: Support alias and convenience vars for
pdb
completiongh-110745: Added newline parameter to
pathlib.Path.read_text()
. Patch by Junya Okabe.gh-84583: Make
pdb
enter post-mortem mode even forSyntaxError
gh-80675: Set
f_trace_lines = True
on all frames uponpdb.set_trace()
gh-110771: Expose the setup and cleanup portions of
asyncio.run_forever()
as the standalone methodsasyncio.run_forever_setup()
andasyncio.run_forever_cleanup()
. This allows for tighter integration with GUI event loops.gh-110774: Support setting the
asyncio.Runner
loop_factory kwarg inunittest.IsolatedAsyncioTestCase
gh-110392: Fix
tty.setraw()
andtty.setcbreak()
: previously they returned partially modified list of the original tty attributes.tty.cfmakeraw()
andtty.cfmakecbreak()
now make a copy of the list of special characters before modifying it.gh-59013: Make line number of function breakpoint more precise in
pdb
gh-88434: Emit deprecation warning for non-integer numbers in
gettext
functions and methods that consider plural forms even if the translation was not found.gh-110395: Ensure that
select.kqueue()
objects correctly appear as closed in forked children, to prevent operations on an invalid file descriptor.gh-110196: Add
__reduce__
method toIPv6Address
in order to keepscope_id
gh-109747: Improve errors for unsupported look-behind patterns. Now re.error is raised instead of OverflowError or RuntimeError for too large width of look-behind pattern.
gh-109466: Add the
ipaddress.IPv4Address.ipv6_mapped
property, which returns the IPv4-mapped IPv6 address.gh-85098: Implement the CLI of the
symtable
module and improve the repr ofSymbol
.gh-108791: Improved error handling in
pdb
command line interface, making it produce more concise error messages.gh-105931: Change
compileall
to only strip the stripdir prefix from the full path recorded in the compiled.pyc
file, when the prefix matches the start of the full path in its entirety. When the prefix does not match, no stripping is performed and a warning to this effect is displayed.Previously all path components of the stripdir prefix that matched the full path were removed, while those that did not match were left alone (including ones interspersed between matching components).
gh-107431: Make the
DictProxy
andListProxy
types inmultiprocessing.managers
Generic Alias Types for[]
use in typing contexts.gh-72904: Add
glob.translate()
. This function converts a pathname with shell-style wildcards to a regular expression.gh-90026: Define
USE_XATTRS
on Cygwin so that XATTR-related functions in theos
module become available.gh-90890: New methods
mailbox.Maildir.get_info()
,mailbox.Maildir.set_info()
,mailbox.Maildir.get_flags()
,mailbox.Maildir.set_flags()
,mailbox.Maildir.add_flag()
,mailbox.Maildir.remove_flag()
. These methods speed up accessing a message's info and/or flags and are useful when it is not necessary to access the message's contents, as when iterating over a Maildir to find messages with specific flags.gh-102956: Fix returning of empty byte strings after seek in zipfile module
gh-102895: Added a parameter
local_exit
forcode.interact()
to preventexit()
andquit
from closingsys.stdin
and raiseSystemExit
.gh-97928: Change the behavior of
tkinter.Text.count()
. It now always returns an integer if one or less counting options are specified. Previously it could return a single count as a 1-tuple, an integer (only if option"update"
was specified) orNone
if no items found. The result is now the same ifwantobjects
is set to0
.gh-96954: Switch the storage of the unicode codepoint names to use a different data-structure, a directed acyclic word graph. This makes the unicodedata shared library about 440 KiB smaller. Contributed by Carl Friedrich Bolz-Tereick using code from the PyPy project.
gh-73561: Omit the interface scope from an IPv6 address when used as Host header by
http.client
.gh-86826:
zipinfo
now supports the full range of values in the TZ string determined by RFC 8536 and detects all invalid formats. Both Python and C implementations now raise exceptions of the same type on invalid data.
Tests¶
gh-111808: Make the default value of
test.support.infinite_recursion()
to be conditional based on whether optimizations were used when compiling the interpreter. This helps with platforms like WASI whose stack size is greatly restricted in debug builds.gh-110722: Gathering line coverage of standard libraries within the regression test suite is now precise, as well as much faster. Patch by Łukasz Langa.
gh-110367: Make regrtest
--verbose3
option compatible with--huntrleaks -jN
options. The./python -m test -j1 -R 3:3 --verbose3
command now works as expected. Patch by Victor Stinner.gh-111165: Remove no longer used functions
run_unittest()
andrun_doctest()
from thetest.support
module.gh-110932: Fix regrtest if the
SOURCE_DATE_EPOCH
environment variable is defined: use the variable value as the random seed. Patch by Victor Stinner.gh-110995: test_gdb: Fix detection of gdb built without Python scripting support. Patch by Victor Stinner.
gh-110918: Test case matching patterns specified by options
--match
,--ignore
,--matchfile
and--ignorefile
are now tested in the order of specification, and the last match determines whether the test case be run or ignored.gh-108747: Add unit test for
usercustomize
andsitecustomize
hooks fromsite
.
Build¶
gh-96954: Make
make regen-unicodedata
work for out-of-tree builds of CPython.gh-112088: Add
Tools/build/regen-configure.sh
script to regenerate theconfigure
with an Ubuntu container image. Thequay.io/tiran/cpython_autoconf:271
container image (tiran/cpython_autoconf) is no longer used. Patch by Victor Stinner.gh-111046: For wasi-threads, memory is now exported to fix compatibility issues with some wasm runtimes.
gh-110828: AIX 32bit needs
-latomic
to build the_testcapi
extension module.gh-85283: The
errno
,md5
,resource
,winsound
,_ctypes_test
,_multiprocessing.posixshmem
,_scproxy
,_stat
,_testimportmultiple
and_uuid
C extensions are now built with the limited C API. Patch by Victor Stinner.
Windows¶
gh-111856: Fixes
fstat()
on file systems that do not support file ID requests. This includes FAT32 and exFAT.gh-111293: Fix
os.DirEntry.inode
dropping higher 64 bits of a file id on some filesystems on Windows.gh-110913: WindowsConsoleIO now correctly chunks large buffers without splitting up UTF-8 sequences.
macOS¶
gh-59703: For macOS framework builds, in
getpath.c
use the systemdladdr
function to find the path to the shared library rather than depending on deprecated macOS APIs.gh-110950: Update macOS installer to include an upstream Tcl/Tk fix for the
Secure coding is not enabled for restorable state!
warning encountered in Tkinter on macOS 14 Sonoma.gh-111015: Ensure that IDLE.app and Python Launcher.app are installed with appropriate permissions on macOS builds.
gh-71383: Update macOS installer to include an upstream Tcl/Tk fix for the
ttk::ThemeChanged
error encountered in Tkinter.gh-92603: Update macOS installer to include a fix accepted by upstream Tcl/Tk for a crash encountered after the first
tkinter.Tk()
instance is destroyed.
IDLE¶
bpo-35668: Add docstrings to the IDLE debugger module. Fix two bugs: initialize
Idb.botframe
(should be in Bdb); inIdb.in_rpc_code
, check whetherprev_frame
isNone
before trying to use it. Greatly expand test_debugger.
Tools/Demos¶
gh-111903: Argument Clinic now supports the
@critical_section
directive that instructs Argument Clinic to generate a critical section around the function call, which locks theself
object in--disable-gil
builds. Patch by Sam Gross.
C API¶
gh-112026: Add again the private
_PyThreadState_UncheckedGet()
function as an alias to the new publicPyThreadState_GetUnchecked()
function. Patch by Victor Stinner.gh-112026: Restore the removed
_PyDict_GetItemStringWithError()
function. It is used by numpy. Patch by Victor Stinner.gh-112026: Restore removed private C API functions, macros and structures which have no simple replacement for now:
_PyDict_GetItem_KnownHash()
_PyDict_NewPresized()
_PyHASH_BITS
_PyHASH_IMAG
_PyHASH_INF
_PyHASH_MODULUS
_PyHASH_MULTIPLIER
_PyLong_Copy()
_PyLong_FromDigits()
_PyLong_New()
_PyLong_Sign()
_PyObject_CallMethodId()
_PyObject_CallMethodNoArgs()
_PyObject_CallMethodOneArg()
_PyObject_CallOneArg()
_PyObject_EXTRA_INIT
_PyObject_FastCallDict()
_PyObject_GetAttrId()
_PyObject_Vectorcall()
_PyObject_VectorcallMethod()
_PyStack_AsDict()
_PyThread_CurrentFrames()
_PyUnicodeWriter structure
_PyUnicodeWriter_Dealloc()
_PyUnicodeWriter_Finish()
_PyUnicodeWriter_Init()
_PyUnicodeWriter_Prepare()
_PyUnicodeWriter_PrepareKind()
_PyUnicodeWriter_WriteASCIIString()
_PyUnicodeWriter_WriteChar()
_PyUnicodeWriter_WriteLatin1String()
_PyUnicodeWriter_WriteStr()
_PyUnicodeWriter_WriteSubstring()
_PyUnicode_AsString()
_PyUnicode_FromId()
_PyVectorcall_Function()
_Py_IDENTIFIER()
_Py_c_abs()
_Py_c_diff()
_Py_c_neg()
_Py_c_pow()
_Py_c_prod()
_Py_c_quot()
_Py_c_sum()
_Py_static_string()
_Py_static_string_init()
Patch by Victor Stinner.
gh-112026: Add again
<ctype.h>
and<unistd.h>
includes inPython.h
, but don't include them in the limited C API version 3.13 and newer. Patch by Victor Stinner.gh-111956: Add internal-only one-time initialization API:
_PyOnceFlag
and_PyOnceFlag_CallOnce
.gh-111262: Add
PyDict_Pop()
andPyDict_PopString()
functions: remove a key from a dictionary and optionally return the removed value. This is similar todict.pop()
, but without the default value and not raisingKeyError
if the key missing. Patch by Stefan Behnel and Victor Stinner.gh-111863: Rename
Py_NOGIL
toPy_GIL_DISABLED
. Patch by Hugo van Kemenade.gh-111138: Add
PyList_Extend()
andPyList_Clear()
functions: similar to Pythonlist.extend()
andlist.clear()
methods. Patch by Victor Stinner.gh-108765: On Windows,
Python.h
no longer includes the<stddef.h>
standard header file. If needed, it should now be included explicitly. Patch by Victor Stinner.gh-111569: Implement "Python Critical Sections" from PEP 703. These are macros to help replace the GIL with per-object locks in the
--disable-gil
build of CPython. The macros are no-ops in the default build.gh-111506: In the limited C API version 3.13,
Py_SET_REFCNT()
function is now implemented as an opaque function call. Patch by Victor Stinner.gh-108082: Add
PyErr_FormatUnraisable()
function.gh-110964: Move the undocumented private _PyArg functions and _PyArg_Parser structure to internal C API (
pycore_modsupport.h
). Patch by Victor Stinner.gh-110815: Support non-ASCII keyword names in
PyArg_ParseTupleAndKeywords()
.gh-109587: Introduced
PyUnstable_PerfTrampoline_CompileCode()
,PyUnstable_PerfTrampoline_SetPersistAfterFork()
andPyUnstable_CopyPerfMapFile()
. These functions allow extension modules to initialize trampolines eagerly, after the application is "warmed up". This makes it possible to have perf-trampolines running in an always-enabled fashion.gh-85283: Add the
PySys_Audit()
function to the limited C API. Patch by Victor Stinner.gh-85283: Add
PyMem_RawMalloc()
,PyMem_RawCalloc()
,PyMem_RawRealloc()
andPyMem_RawFree()
to the limited C API. Patch by Victor Stinner.gh-106672: Functions
PyDict_GetItem()
,PyDict_GetItemString()
,PyMapping_HasKey()
,PyMapping_HasKeyString()
,PyObject_HasAttr()
,PyObject_HasAttrString()
, andPySys_GetObject()
, which clear all errors occurred during calling the function, report now them usingsys.unraisablehook()
.gh-67565: Remove redundant C-contiguity check in
getargs.c
,binascii
,ssl
and Argument Clinic. Patched by Stefan Krah and Furkan Onder
Python 3.13.0 alpha 1¶
Release date: 2023-10-13
Security¶
gh-108310: Fixed an issue where instances of
ssl.SSLSocket
were vulnerable to a bypass of the TLS handshake and included protections (like certificate verification) and treating sent unencrypted data as if it were post-handshake TLS encrypted data. Security issue reported as CVE-2023-40217 by Aapo Oksman. Patch by Gregory P. Smith.gh-107774: PEP 669 specifies that
sys.monitoring.register_callback
will generate an audit event. Pre-releases of Python 3.12 did not generate the audit event. This is now fixed.gh-102988: Reverted the
email.utils
security improvement change released in 3.12beta4 that unintentionally causedemail.utils.getaddresses
to fail to parse email addresses with a comma in the quoted name field. See gh-106669.gh-99108: Refresh our new HACL* built-in
hashlib
code from upstream. Built-in SHA2 should be faster and an issue with SHA3 on 32-bit platforms is fixed.gh-102509: Start initializing
ob_digit
during creation ofPyLongObject
objects. Patch by Illia Volochii.
Core and Builtins¶
gh-110782: Fix crash when
typing.TypeVar
is constructed with a keyword argument. Patch by Jelle Zijlstra.gh-110752: Reset
ceval.eval_breaker
ininterpreter_clear()
gh-110721: Use the
traceback
implementation for the defaultPyErr_Display()
functionality. Patch by Pablo Galindogh-110696: Fix incorrect error message for invalid argument unpacking. Patch by Pablo Galindo
gh-104169: Split the tokenizer into two separate directories: - One part includes the actual lexeme producing logic and lives in
Parser/lexer
. - The second part wraps the lexer according to the different tokenization modes we have (string, utf-8, file, interactive, readline) and lives inParser/tokenizer
.gh-110688: Remove undocumented
test_c_api
method fromset
, which was only defined for testing purposes underPy_DEBUG
. Now we have proper CAPI tests.gh-104584: Fix a reference leak when running with
PYTHONUOPS
or-X uops
enabled.gh-110514: Add
PY_THROW
tosys.setprofile()
eventsgh-110489: Optimise
math.ceil()
when the input is exactly a float, resulting in about a 10% improvement.gh-110455: Guard
assert(tstate->thread_id > 0)
with#ifndef HAVE_PTHREAD_STUBS
. This allows for for pydebug builds to work under WASI which (currently) lacks thread support.gh-110309: Remove unnecessary empty constant nodes in the ast of f-string specs.
gh-110259: Correctly identify the format spec in f-strings (with single or triple quotes) that have multiple lines in the expression part and include a formatting spec. Patch by Pablo Galindo
gh-110237: Fix missing error checks for calls to
PyList_Append
in_PyEval_MatchClass
.gh-110164: regrtest: If the
SOURCE_DATE_EPOCH
environment variable is defined, regrtest now disables tests randomization. Patch by Victor Stinner.gh-109889: Fix the compiler's redundant NOP detection algorithm to skip over NOPs with no line number when looking for the next instruction's lineno.
gh-109853:
sys.path[0]
is now set correctly for subinterpreters.gh-109923: Set line number on the
POP_TOP
that follows aRETURN_GENERATOR
.gh-105716: Subinterpreters now correctly handle the case where they have threads running in the background. Before, such threads would interfere with cleaning up and destroying them, as well as prevent running another script.
gh-109369: The internal eval_breaker and supporting flags, plus the monitoring version have been merged into a single atomic integer to speed up checks.
gh-109823: Fix bug where compiler does not adjust labels when removing an empty basic block which is a jump target.
gh-109793: The main thread no longer exits prematurely when a subinterpreter is cleaned up during runtime finalization. The bug was a problem particularly because, when triggered, the Python process would always return with a 0 exitcode, even if it failed.
gh-109719: Fix missing jump target labels when compiler reorders cold/warm blocks.
gh-109595: Add
-X cpu_count
command line option to override return results ofos.cpu_count()
andos.process_cpu_count()
. This option is useful for users who need to limit CPU resources of a container system without having to modify the container (application code). Patch by Donghee Na.gh-109627: Fix bug where the compiler does not assign a new jump target label to a duplicated small exit block.
gh-109596: Fix some tokens in the grammar that were incorrectly marked as soft keywords. Also fix some repeated rule names and ensure that repeated rules are not allowed. Patch by Pablo Galindo
gh-109496: On a Python built in debug mode,
Py_DECREF()
now calls_Py_NegativeRefcount()
if the object is a dangling pointer to deallocated memory: memory filled with0xDD
"dead byte" by the debug hook on memory allocators. The fix is to check the reference count before checking for_Py_IsImmortal()
. Patch by Victor Stinner.gh-107265: Deopt opcodes hidden by the executor when base opcode is needed
gh-109371: Deopted instructions correctly for tool initialization and modified the incorrect assertion in instrumentation, when a previous tool already sets INSTRUCTION events
gh-105658: Fix bug where the line trace of an except block ending with a conditional includes an excess event with the line of the conditional expression.
gh-109219: Fix compiling type param scopes that use a name which is also free in an inner scope.
gh-109351: Fix crash when compiling an invalid AST involving a named (walrus) expression.
gh-109341: Fix crash when compiling an invalid AST involving a
ast.TypeAlias
.gh-109195: Fix source location for the
LOAD_*
instruction preceding aLOAD_SUPER_ATTR
to load thesuper
global (or shadowing variable) so that it encompasses only the namesuper
and not the following parentheses.gh-109256: Opcode IDs for specialized opcodes are allocated in their own range to improve stability of the IDs for the 'real' opcodes.
gh-109207: Fix a SystemError in
__repr__
of symtable entry object.gh-109179: Fix bug where the C traceback display drops notes from
SyntaxError
.gh-109118: Disallow nested scopes (lambdas, generator expressions, and comprehensions) within PEP 695 annotation scopes that are nested within classes.
gh-109156: Add tests for de-instrumenting instructions while keeping the instrumentation for lines
gh-109114: Relax the detection of the error message for invalid lambdas inside f-strings to not search for arbitrary replacement fields to avoid false positives. Patch by Pablo Galindo
gh-105848: Add a new
CALL_KW
opcode, used for calls containing keyword arguments. Also, fix a possible crash when jumping over method calls in a debugger.gh-109052: Use the base opcode when comparing code objects to avoid interference from instrumentation
gh-109118: Fix interpreter crash when a NameError is raised inside the type parameters of a generic class.
gh-88943: Improve syntax error for non-ASCII character that follows a numerical literal. It now points on the invalid non-ASCII character, not on the valid numerical literal.
gh-108976: Fix crash that occurs after de-instrumenting a code object in a monitoring callback.
gh-108732: Make iteration variables of module- and class-scoped comprehensions visible to pdb and other tools that use
frame.f_locals
again.gh-108959: Fix caret placement for error locations for subscript and binary operations that involve non-semantic parentheses and spaces. Patch by Pablo Galindo
gh-104584: Fix a crash when running with
PYTHONUOPS
or-X uops
enabled and an error occurs during optimization.gh-108727: Define
tp_dealloc
forCounterOptimizer_Type
. This fixes a segfault on deallocation.gh-108520: Fix
multiprocessing.synchronize.SemLock.__setstate__()
to properly initializemultiprocessing.synchronize.SemLock._is_fork_ctx
. This fixes a regression when passing a SemLock across nested processes.Rename
multiprocessing.synchronize.SemLock.is_fork_ctx
tomultiprocessing.synchronize.SemLock._is_fork_ctx
to avoid exposing it as public API.gh-108654: Restore locals shadowed by an inlined comprehension if the comprehension raises an exception.
gh-108488: Change the initialization of inline cache entries so that the cache entry for
JUMP_BACKWARD
is initialized to zero, instead of theadaptive_counter_warmup()
value used for all other instructions. This counter, unique among instructions, counts up from zero.gh-108716: Turn off deep-freezing of code objects. Modules are still frozen, so that a file system search is not needed for common modules.
gh-108614: Add RESUME_CHECK instruction, to avoid having to handle instrumentation, signals, and contexts switches in the tier 2 execution engine.
gh-108487: Move an assert that would cause a spurious crash in a devious case that should only trigger deoptimization.
gh-106176: Use a
WeakValueDictionary
to track the lists containing the modules each thread is currently importing. This helps avoid a reference leak from keeping the list around longer than necessary. Weakrefs are used as GC can't interrupt the cleanup.gh-105481: The regen-opcode build stage was removed and its work is now done in regen-cases.
gh-107901: Fix missing line number on
JUMP_BACKWARD
at the end of a for loop.gh-108113: The
compile()
built-in can now accept a new flag,ast.PyCF_OPTIMIZED_AST
, which is similar toast.PyCF_ONLY_AST
except that the returnedAST
is optimized according to the value of theoptimize
argument.ast.parse()
now accepts an optional argumentoptimize
which is passed on to thecompile()
built-in. This makes it possible to obtain an optimizedAST
.gh-107971: Opcode IDs are generated from bytecodes.c instead of being hard coded in opcode.py.
gh-107944: Improve error message for function calls with bad keyword arguments. Patch by Pablo Galindo
gh-108390: Raise an exception when setting a non-local event (
RAISE
,EXCEPTION_HANDLED
, etc.) insys.monitoring.set_local_events
.Fixes crash when tracing in recursive calls to Python classes.
gh-108035: Remove the
_PyCFrame
struct, moving the pointer to the current interpreter frame back to the threadstate, as it was for 3.10 and earlier. The_PyCFrame
existed as a performance optimization for tracing. Since PEP 669 has been implemented, this optimization no longer applies.gh-91051: Fix abort / segfault when using all eight type watcher slots, on platforms where
char
is signed by default.gh-106581: Fix possible assertion failures and missing instrumentation events when
PYTHONUOPS
or-X uops
is enabled.gh-107526: Revert converting
vars
,dir
,next
,getattr
, anditer
to argument clinic.gh-84805: Autogenerate signature for
METH_NOARGS
andMETH_O
extension functions.gh-107758: Make the
dump_stack()
routine used by thelltrace
feature (low-level interpreter debugging) robust against recursion by ensuring that it never calls a__repr__
method implemented in Python. Also make the similar output for Tier-2 uops appear onstdout
(instead ofstderr
), to match thelltrace
code in ceval.c.gh-107659: Add docstrings for
ctypes.pointer()
andctypes.POINTER()
.gh-105848: Modify the bytecode so that the actual callable for a
CALL
is at a consistent position on the stack (regardless of whether or not bound-method-calling optimizations are active).gh-107674: Fixed performance regression in
sys.settrace
.gh-107724: In pre-release versions of 3.12, up to rc1, the sys.monitoring callback function for the
PY_THROW
event was missing the third, exception argument. That is now fixed.gh-84436: Skip reference count modifications for many known immortal objects.
gh-107596: Specialize subscripting
str
objects byint
indexes.gh-107080: Trace refs builds (
--with-trace-refs
) were crashing when used with isolated subinterpreters. The problematic global state has been isolated to each interpreter. Other fixing the crashes, this change does not affect users.gh-107557: Generate the cases needed for the barebones tier 2 abstract interpreter for optimization passes in CPython.
gh-106608: Make
_PyUOpExecutorObject
variable length.gh-100964: Clear generators' exception state after
return
to break reference cycles.gh-107455: Improve error messages when converting an incompatible type to
ctypes.c_char_p
,ctypes.c_wchar_p
andctypes.c_void_p
.gh-107263: Increase C recursion limit for functions other than the main interpreter from 800 to 1500. This should allow functions like
list.__repr__
andjson.dumps
to handle all the inputs that they could prior to 3.12gh-104584: Fix an issue which caused incorrect inline caches to be read when running with
PYTHONUOPS
or-X uops
enabled.gh-104432: Fix potential unaligned memory access on C APIs involving returned sequences of
char *
pointers within thegrp
andsocket
modules. These were revealed using a-fsaniziter=alignment
build on ARM macOS. Patch by Christopher Chavez.gh-106078: Isolate
_decimal
(apply PEP 687). Patch by Charlie Zhao.gh-106898: Add the exception as the third argument to
PY_UNIND
callbacks insys.monitoring
. This makes thePY_UNWIND
callback consistent with the other exception handling callbacks.gh-106895: Raise a
ValueError
when a monitoring callback function returnsDISABLE
for events that cannot be disabled locally.gh-106897: Add a
RERAISE
event tosys.monitoring
, which occurs when an exception is reraise, either explicitly by a plainraise
statement, or implicitly in anexcept
orfinally
block.gh-77377: Ensure that multiprocessing synchronization objects created in a fork context are not sent to a different process created in a spawn context. This changes a segfault into an actionable RuntimeError in the parent process.
gh-106931: Statically allocated string objects are now interned globally instead of per-interpreter. This fixes a situation where such a string would only be interned in a single interpreter. Normal string objects are unaffected.
gh-104621: Unsupported modules now always fail to be imported.
gh-107122: Add
dbm.ndbm.ndbm.clear()
todbm.ndbm
. Patch By Donghee Na.gh-107122: Add
dbm.gnu.gdbm.clear()
todbm.gnu
. Patch By Donghee Na.gh-107015: The ASYNC and AWAIT tokens are removed from the Grammar, which removes the possibility of making
async
andawait
soft keywords when usingfeature_version<7
inast.parse()
.gh-106917: Fix classmethod-style
super()
method calls (i.e., where the second argument tosuper()
, or the implied second argument drawn fromself/cls
in the case of zero-arg super, is a type) when the target of the call is not a classmethod.gh-105699: Python no longer crashes due an infrequent race when initializing per-interpreter interned strings. The crash would manifest when the interpreter was finalized.
gh-105699: Python no longer crashes due to an infrequent race in setting
Py_FileSystemDefaultEncoding
andPy_FileSystemDefaultEncodeErrors
(both deprecated), when simultaneously initializing two isolated subinterpreters. Now they are only set during runtime initialization.gh-106908: Fix various hangs, reference leaks, test failures, and tracing/introspection bugs when running with
PYTHONUOPS
or-X uops
enabled.gh-106092: Fix a segmentation fault caused by a use-after-free bug in
frame_dealloc
when the trashcan delays the deallocation of aPyFrameObject
.gh-106485: Reduce the number of materialized instances dictionaries by dematerializing them when possible.
gh-106719: No longer suppress arbitrary errors in the
__annotations__
getter and setter in the type and module types.gh-106723: Propagate
frozen_modules
to multiprocessing spawned process interpreters.gh-104909: Split
LOAD_ATTR_INSTANCE_VALUE
into micro-ops.gh-104909: Split
LOAD_GLOBAL
specializations into micro-ops.gh-106597: A new debug structure of offsets has been added to the
_PyRuntimeState
that will help out-of-process debuggers and profilers to obtain the offsets to relevant interpreter structures in a way that is agnostic of how Python was compiled and that doesn't require copying the headers. Patch by Pablo Galindogh-106487: Allow the count argument of
str.replace()
to be a keyword. Patch by Hugo van Kemenade.gh-96844: Improve error message of
list.remove()
. Patch by Donghee Na.gh-81283: Compiler now strips indents from docstrings. It reduces
pyc
file size 5% when the module is heavily documented. This change affects to__doc__
so tools like doctest will be affected.gh-106396: When the format specification of an f-string expression is empty, the parser now generates an empty
ast.JoinedStr
node for it instead of an one-elementast.JoinedStr
with an empty stringast.Constant
.gh-100288: Specialize
LOAD_ATTR
for non-descriptors on the class. AddsLOAD_ATTR_NONDESCRIPTOR_WITH_VALUES
andLOAD_ATTR_NONDESCRIPTOR_NO_DICT
.gh-106008: Fix possible reference leaks when failing to optimize comparisons with
None
in the bytecode compiler.gh-106145: Make
end_lineno
andend_col_offset
required ontype_param
ast nodes.gh-106213: Changed the way that Emscripten call trampolines work for compatibility with Wasm/JS Promise integration.
gh-106182:
sys.getfilesystemencoding()
andsys.getfilesystemencodeerrors
now return interned Unicode object.gh-106210: Removed Emscripten import trampoline as it was no longer necessary for Pyodide.
gh-104584: Added a new, experimental, tracing optimizer and interpreter (a.k.a. "tier 2"). This currently pessimizes, so don't use yet -- this is infrastructure so we can experiment with optimizing passes. To enable it, pass
-Xuops
or setPYTHONUOPS=1
. To get debug output, setPYTHONUOPSDEBUG=N
whereN
is a debug level (0-4, where 0 is no debug output and 4 is excessively verbose).gh-105775:
LOAD_CLOSURE
is now a pseudo-op.gh-105730: Allow any callable other than type objects as the condition predicate in
BaseExceptionGroup.split()
andBaseExceptionGroup.subgroup()
.gh-105979: Fix crash in
_imp.get_frozen_object()
due to improper exception handling.gh-106003: Add a new
TO_BOOL
instruction, which performs boolean conversions forPOP_JUMP_IF_TRUE
,POP_JUMP_IF_FALSE
, andUNARY_NOT
(which all expect exactbool
values now). Also, modify the oparg ofCOMPARE_OP
to include an optional "boolean conversion" flag.gh-98931: Ensure custom
SyntaxError
error messages are raised for invalid imports with multiple targets. Patch by Pablo Galindogh-105724: Improve
assert
error messages by providing exact error range.gh-105908: Fixed bug where gh-99111 breaks future import
barry_as_FLUFL
in the Python REPL.gh-105840: Fix possible crashes when specializing function calls with too many
__defaults__
.gh-105831: Fix an f-string bug, where using a debug expression (the
=
sign) that appears in the last line of a file results to the debug buffer that holds the expression text being one character too small.gh-105800: Correctly issue
SyntaxWarning
in f-strings if invalid sequences are used. Patch by Pablo Galindogh-105340: Include the comprehension iteration variable in
locals()
inside a module- or class-scope comprehension.gh-105331: Raise
ValueError
if thedelay
argument toasyncio.sleep()
is a NaN (matchingtime.sleep()
).gh-105587: The runtime can't guarantee that immortal objects will not be mutated by Extensions. Thus, this modifies _PyStaticObject_CheckRefcnt to warn instead of asserting.
gh-105564: Don't include artificil newlines in the
line
attribute of tokens in the APIs of thetokenize
module. Patch by Pablo Galindogh-105549: Tokenize separately
NUMBER
andNAME
tokens that are not ambiguous. Patch by Pablo Galindo.gh-105588: Fix an issue that could result in crashes when compiling malformed
ast
nodes.gh-100987: Allow objects other than code objects as the "executable" in internal frames. In the long term, this can help tools like Cython and PySpy interact more efficiently. In the shorter term, it allows us to perform some optimizations more simply.
gh-105375: Fix bugs in the
builtins
module where exceptions could end up being overwritten.gh-105375: Fix bug in the compiler where an exception could end up being overwritten.
gh-105375: Improve error handling in
PyUnicode_BuildEncodingMap()
where an exception could end up being overwritten.gh-105486: Change the repr of
ParamSpec
list of args intypes.GenericAlias
.gh-105678: Break the
MAKE_FUNCTION
instruction into two parts,MAKE_FUNCTION
which makes the function andSET_FUNCTION_ATTRIBUTE
which sets the attributes on the function. This makes the stack effect ofMAKE_FUNCTION
regular to ease optimization and code generation.gh-105435: Fix spurious newline character if file ends on a comment without a newline. Patch by Pablo Galindo
gh-105390: Correctly raise
tokenize.TokenError
exceptions instead ofSyntaxError
for tokenize errors such as incomplete input. Patch by Pablo Galindogh-105259: Don't include newline character for trailing
NEWLINE
tokens emitted in thetokenize
module. Patch by Pablo Galindogh-104635: Eliminate redundant
STORE_FAST
instructions in the compiler. Patch by Donghee Na and Carl Meyer.gh-105324: Fix the main function of the
tokenize
module when reading fromsys.stdin
. Patch by Pablo Galindogh-33092: Simplify and speed up interpreter for f-strings. Removes
FORMAT_VALUE
opcode. AddCONVERT_VALUE
,FORMAT_SIMPLE
andFORMAT_WITH_SPEC
opcode. Compiler emits more efficient sequence for each format expression.gh-105229: Remove remaining two-codeunit superinstructions. All remaining superinstructions only take a single codeunit, simplifying instrumentation and quickening.
gh-105235: Prevent out-of-bounds memory access during
mmap.find()
calls.gh-98963: Restore the ability for a subclass of
property
to define__slots__
or otherwise be dict-less by ignoring failures to set a docstring on such a class. This behavior had regressed in 3.12beta1. AnAttributeError
where there had not previously been one was disruptive to existing code.gh-104812: The "pending call" machinery now works for all interpreters, not just the main interpreter, and runs in all threads, not just the main thread. Some calls are still only done in the main thread, ergo in the main interpreter. This change does not affect signal handling nor the existing public C-API (
Py_AddPendingCall()
), which both still only target the main thread. The new functionality is meant strictly for internal use for now, since consequences of its use are not well understood yet outside some very restricted cases. This change brings the capability in line with the intention when the state was made per-interpreter several years ago.gh-105194: Do not escape with backslashes f-string format specifiers. Patch by Pablo Galindo
gh-105229: Replace some dynamic superinstructions with single instruction equivalents.
gh-105162: Fixed bug in generator.close()/throw() where an inner iterator would be ignored when the outer iterator was instrumented.
gh-105164: Ensure annotations are set up correctly if the only annotation in a block is within a
match
block. Patch by Jelle Zijlstra.gh-105148: Make
_PyASTOptimizeState
internal to ast_opt.c. Make_PyAST_Optimize
take two integers instead of a pointer to this struct. This avoids the need to include pycore_compile.h in ast_opt.c.gh-104799: Attributes of
ast
nodes that are lists now default to the empty list if omitted. This means that some code that previously raisedTypeError
when the AST node was used will now proceed with the empty list instead. Patch by Jelle Zijlstra.gh-105111: Remove the old trashcan macros
Py_TRASHCAN_SAFE_BEGIN
andPy_TRASHCAN_SAFE_END
. They should be replaced by the new macrosPy_TRASHCAN_BEGIN
andPy_TRASHCAN_END
.gh-105035: Fix
super()
calls on types with customtp_getattro
implementation (e.g. meta-types.)gh-105017: Show CRLF lines in the tokenize string attribute in both NL and NEWLINE tokens. Patch by Marta Gómez.
gh-105013: Fix handling of multiline parenthesized lambdas in
inspect.getsource()
. Patch by Pablo Galindogh-105017: Do not include an additional final
NL
token when parsing files having CRLF lines. Patch by Marta Gómez.gh-104976: Ensure that trailing
DEDENT
tokenize.TokenInfo
objects emitted by thetokenize
module are reported as in Python 3.11. Patch by Pablo Galindogh-104972: Ensure that the
line
attribute intokenize.TokenInfo
objects in thetokenize
module are always correct. Patch by Pablo Galindogh-104955: Fix signature for the new
__release_buffer__()
slot. Patch by Jelle Zijlstra.gh-104690: Starting new threads and process creation through
os.fork()
during interpreter shutdown (such as fromatexit
handlers) is no longer supported. It can lead to race condition between the main Python runtime thread freeing thread states while internalthreading
routines are trying to allocate and use the state of just created threads. Or forked children trying to use the mid-shutdown runtime and thread state in the child process.gh-104879: Fix crash when accessing the
__module__
attribute of type aliases defined outside a module. Patch by Jelle Zijlstra.gh-104825: Tokens emitted by the
tokenize
module do not include an implicit\n
character in theline
attribute anymore. Patch by Pablo Galindogh-104770: If a generator returns a value upon being closed, the value is now returned by
generator.close()
.gh-89091: Raise
RuntimeWarning
for unawaited async generator methods likeasend()
,athrow()
andaclose()
. Patch by Kumar Aditya.gh-96663: Add a better, more introspect-able error message when setting attributes on classes without a
__dict__
and no slot member for the attribute.gh-93627: Update the Python pickle module implementation to match the C implementation of the pickle module. For objects setting reduction methods like
__reduce_ex__()
or__reduce__()
toNone
, pickling will result in aTypeError
.gh-91095: Specializes calls to most Python classes. Specifically, any class that inherits from
object
, or another Python class, and does not override__new__
.The specialized instruction does the following:
Creates the object (by calling
object.__new__
)Pushes a shim frame to the frame stack (to cleanup after
__init__
)Pushes the frame for
__init__
to the frame stack
Speeds up the instantiation of most Python classes.
Library¶
gh-110786:
sysconfig
's CLI now ignoresBrokenPipeError
, making it exit normally if its output is being piped and the pipe closes.gh-103480: The
sysconfig
module is now a package, instead of a single-file module.gh-110733: Micro-optimization: Avoid calling
min()
,max()
inBaseEventLoop._run_once()
.gh-94597: Added
asyncio.EventLoop
for use with theasyncio.run()
loop_factory kwarg to avoid calling the asyncio policy system.gh-110682:
runtime-checkable protocols
used to consider__match_args__
a protocol member in__instancecheck__
if it was present on the protocol. Now, this attribute is ignored if it is present.gh-110488: Fix a couple of issues in
pathlib.PurePath.with_name()
: a single dot was incorrectly considered a valid name, and inPureWindowsPath
, a name with an NTFS alternate data stream, likea:b
, was incorrectly considered invalid.gh-110590: Fix a bug in
_sre.compile()
whereTypeError
would be overwritten byOverflowError
when the code argument was a list of non-ints.gh-65052: Prevent
pdb
from crashing when trying to display undisplayable objectsgh-110519: Deprecation warning about non-integer number in
gettext
now always refers to the line in the user code where gettext function or method is used. Previously it could refer to a line ingettext
code.gh-89902: Deprecate non-standard format specifier "N" for
decimal.Decimal
. It was not documented and only supported in the C implementation.gh-110378:
contextmanager()
andasynccontextmanager()
context managers now close an invalid underlying generator object that yields more then one value.gh-106670: In
pdb
, set convenience variable$_exception
for post mortem debugging.gh-110365: Fix
termios.tcsetattr()
bug that was overwriting existing errors during parsing integers fromterm
list.gh-109653: Slightly improve the import time of several standard-library modules by deferring imports of
warnings
within those modules. Patch by Alex Waygood.gh-110273:
dataclasses.replace()
now raises TypeError instead of ValueError if specify keyword argument for a field declared with init=False or miss keyword argument for required InitVar field.gh-110249: Add
--inline-caches
flag todis
command line.gh-109653: Fix a Python 3.12 regression in the import time of
random
. Patch by Alex Waygood.gh-110222: Add support of struct sequence objects in
copy.replace()
. Patched by Xuehai Pan.gh-109649:
multiprocessing
,concurrent.futures
,compileall
: Replaceos.cpu_count()
withos.process_cpu_count()
to select the default number of worker threads and processes. Get the CPU affinity if supported. Patch by Victor Stinner.gh-110150: Fix base case handling in statistics.quantiles. Now allows a single data point.
gh-110036: On Windows, multiprocessing
Popen.terminate()
now catchesPermissionError
and get the process exit code. If the process is still running, raise again thePermissionError
. Otherwise, the process terminated as expected: store its exit code. Patch by Victor Stinner.gh-110038: Fixed an issue that caused
KqueueSelector.select()
to not return all the ready events in some cases when a file descriptor is registered for both read and write.gh-110045: Update the
symtable
module to support the new scopes introduced by PEP 695.gh-88402: Add new variables to
sysconfig.get_config_vars()
on Windows:LIBRARY
,LDLIBRARY
,LIBDIR
,SOABI
, andPy_NOGIL
.gh-109631:
re
functions such asre.findall()
,re.split()
,re.search()
andre.sub()
which perform short repeated matches can now be interrupted by user.gh-109653: Reduce the import time of
email.utils
by around 43%. This results in the import time ofemail.message
falling by around 18%, which in turn reduces the import time ofimportlib.metadata
by around 6%. Patch by Alex Waygood.gh-109818: Fix
reprlib.recursive_repr()
not copying__type_params__
from decorated function.gh-109047:
concurrent.futures
: The executor manager thread now catches exceptions when adding an item to the call queue. During Python finalization, creating a new thread can now raiseRuntimeError
. Catch the exception and callterminate_broken()
in this case. Patch by Victor Stinner.gh-109782: Ensure the signature of
os.path.isdir()
is identical on all platforms. Patch by Amin Alaee.gh-109653: Improve import time of
functools
by around 13%. Patch by Alex Waygood.gh-109590:
shutil.which()
will prefer files with an extension inPATHEXT
if the given mode includesos.X_OK
on win32. If noPATHEXT
match is found, a file without an extension inPATHEXT
can be returned. This change will haveshutil.which()
act more similarly to previous behavior in Python 3.11.gh-109653: Reduce the import time of
enum
by over 50%. Patch by Alex Waygood.gh-109593: Avoid deadlocking on a reentrant call to the multiprocessing resource tracker. Such a reentrant call, though unlikely, can happen if a GC pass invokes the finalizer for a multiprocessing object such as SemLock.
gh-109653: Reduce the import time of
typing
by around a third. Patch by Alex Waygood.gh-109649: Add
os.process_cpu_count()
function to get the number of logical CPUs usable by the calling thread of the current process. Patch by Victor Stinner.gh-74481: Add
set_error_mode
related constants inmsvcrt
module in Python debug build.gh-109613: Fix
os.stat()
andos.DirEntry.stat()
: check for exceptions. Previously, on Python built in debug mode, these functions could trigger a fatal Python error (and abort the process) when a function succeeded with an exception set. Patch by Victor Stinner.gh-109599: Expose the type of PyCapsule objects as
types.CapsuleType
.gh-109109: You can now get the raw TLS certificate chains from TLS connections via
ssl.SSLSocket.get_verified_chain()
andssl.SSLSocket.get_unverified_chain()
methods.Contributed by Mateusz Nowak.
gh-109559: Update
unicodedata
database to Unicode 15.1.0.gh-109543: Remove unnecessary
hasattr()
check duringtyping.TypedDict
creation.gh-109495: Remove unnecessary extra
__slots__
indatetime
's pure python implementation to reduce memory size, as they are defined in the superclass. Patch by James Hilton-Balfegh-109461:
logging
: Use a context manager for lock acquisition.gh-109096:
http.server.CGIHTTPRequestHandler
has been deprecated for removal in 3.15. Its design is old and the web world has long since moved beyond CGI.gh-109409: Fix error when it was possible to inherit a frozen dataclass from multiple parents some of which were possibly not frozen.
gh-109375: The
pdb
alias
command now prevents registering aliases without arguments.gh-109319: Deprecate the
dis.HAVE_ARGUMENT
field in favour ofdis.hasarg
.gh-107219: Fix a race condition in
concurrent.futures
. When a process in the process pool was terminated abruptly (while the future was running or pending), close the connection write end. If the call queue is blocked on sending bytes to a worker process, closing the connection write end interrupts the send, so the queue can be closed. Patch by Victor Stinner.gh-66143: The
codecs.CodecInfo
object has been made copyable and pickleable. Patched by Robert Lehmann and Furkan Onder.gh-109187:
pathlib.Path.resolve()
now treats symlink loops like other errors: in strict mode,OSError
is raised, and in non-strict mode, no exception is raised.gh-50644: Attempts to pickle or create a shallow or deep copy of
codecs
streams now raise a TypeError. Previously, copying failed with a RecursionError, while pickling produced wrong results that eventually caused unpickling to fail with a RecursionError.gh-109174: Add support of
types.SimpleNamespace
incopy.replace()
.gh-109164:
pdb
: Replacegetopt
withargparse
for parsing command line arguments.gh-109151: Enable
readline
editing features in the sqlite3 command-line interface (python -m sqlite3
).gh-108987: Fix
_thread.start_new_thread()
race condition. If a thread is created during Python finalization, the newly spawned thread now exits immediately instead of trying to access freed memory and lead to a crash. Patch by Victor Stinner.gh-108682: Enum: require
names=()
ortype=...
to create an empty enum using the functional syntax.gh-109033: Exceptions raised by os.utime builtin function now include the related filename
gh-108843: Fix an issue in
ast.unparse()
when unparsing f-strings containing many quote types.gh-108469:
ast.unparse()
now supports new f-string syntax introduced in Python 3.12. Note that the f-string quotes are reselected for simplicity under the new syntax. (Patch by Steven Sun)gh-108751: Add
copy.replace()
function which allows to create a modified copy of an object. It supports named tuples, dataclasses, and many other objects.gh-108682: Enum: raise
TypeError
ifsuper().__new__()
is called from a custom__new__
.gh-108278: Deprecate passing the callback callable by keyword for the following
sqlite3.Connection
APIs:The affected parameters will become positional-only in Python 3.15.
Patch by Erlend E. Aasland.
gh-105829: Fix concurrent.futures.ProcessPoolExecutor deadlock
gh-108295: Fix crashes related to use of weakrefs on
typing.TypeVar
.gh-108463: Make expressions/statements work as expected in pdb
gh-108277: Add
os.timerfd_create()
,os.timerfd_settime()
,os.timerfd_gettime()
,os.timerfd_settime_ns()
, andos.timerfd_gettime_ns()
to provide a low level interface for Linux's timer notification file descriptor.gh-107811:
tarfile
: extraction of members with overly large UID or GID (e.g. on an OS with 32-bitid_t
) now fails in the same way as failing to set the ID.gh-64662: Fix support for virtual tables in
sqlite3.Connection.iterdump()
. Patch by Aviv Palivoda.gh-108111: Fix a regression introduced in gh-101251 for 3.12, resulting in an incorrect offset calculation in
gzip.GzipFile.seek()
.gh-108294:
time.sleep()
now raises an auditing event.gh-108278: Deprecate passing name, number of arguments, and the callable as keyword arguments, for the following
sqlite3.Connection
APIs:The affected parameters will become positional-only in Python 3.15.
Patch by Erlend E. Aasland.
gh-108322: Speed-up NormalDist.samples() by using the inverse CDF method instead of calling random.gauss().
gh-83417: Add the ability for venv to create a
.gitignore
file which causes the created environment to be ignored by Git. It is on by default when venv is called via its CLI.gh-105736: Harmonized the pure Python version of
OrderedDict
with the C version. Now, both versions set up their internal state in__new__
. Formerly, the pure Python version did the set up in__init__
.gh-108083: Fix bugs in the constructor of
sqlite3.Connection
andsqlite3.Connection.close()
where exceptions could be leaked. Patch by Erlend E. Aasland.gh-107932: Fix
dis
module to properly report and display bytecode that do not have source lines.gh-105539:
sqlite3
now emits anResourceWarning
if asqlite3.Connection
object is notclosed
explicitly. Patch by Erlend E. Aasland.gh-107995: The
__module__
attribute on instances offunctools.cached_property
is now set to the name of the module in which the cached_property is defined, rather than "functools". This means that doctests incached_property
docstrings are now properly collected by thedoctest
module. Patch by Tyler Smart.gh-107963: Fix
multiprocessing.set_forkserver_preload()
to check the given list of modules names. Patch by Donghee Na.gh-106242: Fixes
os.path.normpath()
to handle embedded null characters without truncating the path.gh-81555:
xml.dom.minidom
now only quotes"
in attributes.gh-50002:
xml.dom.minidom
now preserves whitespaces in attributes.gh-93057: Passing more than one positional argument to
sqlite3.connect()
and thesqlite3.Connection
constructor is deprecated. The remaining parameters will become keyword-only in Python 3.15. Patch by Erlend E. Aasland.gh-76913: Add merge_extra parameter/feature to
logging.LoggerAdapter
gh-107913: Fix possible losses of
errno
andwinerror
values inOSError
exceptions if they were cleared or modified by the cleanup code before creating the exception object.gh-107845:
tarfile.data_filter()
now takes the location of symlinks into account when determining their target, so it will no longer reject some valid tarballs withLinkOutsideDestinationError
.gh-107812: Extend socket's netlink support to the FreeBSD platform.
gh-107805: Fix signatures of module-level generated functions in
turtle
.gh-107782:
pydoc
is now able to show signatures which are not representable in Python, e.g. forgetattr
anddict.pop
.gh-56166: Deprecate passing optional arguments maxsplit, count and flags in module-level functions
re.split()
,re.sub()
andre.subn()
as positional. They should only be passed by keyword.gh-107710: Speed up
logging.getHandlerNames()
.gh-107715: Fix
doctest.DocTestFinder.find()
in presence of class names with special characters. Patch by Gertjan van Zwieten.gh-100814: Passing a callable object as an option value to a Tkinter image now raises the expected TclError instead of an AttributeError.
gh-72684: Add
tkinter
widget methods:tk_busy_hold()
,tk_busy_configure()
,tk_busy_cget()
,tk_busy_forget()
,tk_busy_current()
, andtk_busy_status()
.gh-106684: Raise
ResourceWarning
whenasyncio.StreamWriter
is not closed leading to memory leaks. Patch by Kumar Aditya.gh-107465: Add
pathlib.Path.from_uri()
classmethod.gh-107077: Seems that in some conditions, OpenSSL will return
SSL_ERROR_SYSCALL
instead ofSSL_ERROR_SSL
when a certification verification has failed, but the error parameters will still containERR_LIB_SSL
andSSL_R_CERTIFICATE_VERIFY_FAILED
. We are now detecting this situation and raising the appropriatessl.SSLCertVerificationError
. Patch by Pablo Galindogh-107576: Fix
types.get_original_bases()
to only return__orig_bases__
if it is present oncls
directly. Patch by James Hilton-Balfe.gh-105481: Remove
opcode.is_pseudo
,opcode.MIN_PSEUDO_OPCODE
andopcode.MAX_PSEUDO_OPCODE
, which were added in 3.12, were never documented and were not intended to be used externally.gh-105481:
opcode.ENABLE_SPECIALIZATION
(which was added in 3.12 but never documented or intended for external usage) is moved to_opcode.ENABLE_SPECIALIZATION
where tests can access it.gh-107396: tarfiles; Fixed use before assignment of self.exception for gzip decompression
gh-107409: Set
__wrapped__
attribute inreprlib.recursive_repr()
.gh-107406: Implement new
__repr__()
method forstruct.Struct
. Now it returnsStruct(<format repr>)
.gh-107369: Optimize
textwrap.indent()
. It is ~30% faster for large input. Patch by Inada Naoki.gh-78722: Fix issue where
pathlib.Path.iterdir()
did not raiseOSError
until iterated.gh-105578: Deprecate
typing.AnyStr
in favor of the new Type Parameter syntax. See PEP 695.gh-62519: Make
gettext.pgettext()
search plural definitions when translation is not found.gh-107089: Shelves opened with
shelve.open()
have a much fasterclear()
method. Patch by James Cave.gh-82500: Fix overflow on 32-bit systems with
asyncio
os.sendfile()
implementation.gh-83006: Document behavior of
shutil.disk_usage()
for non-mounted filesystems on Unix.gh-65495: Use lowercase
mail from
andrcpt to
insmptlib.SMTP
.gh-106186: Do not report
MultipartInvariantViolationDefect
defect when theemail.parser.Parser
class is used to parse emails withheadersonly=True
.gh-105002: Fix invalid result from
PurePath.relative_to()
method when attempting to walk a "..
" segment in other with walk_up enabled. AValueError
exception is now raised in this case.gh-106739: Add the
rtype_cache
to the warning message (as an addition to the type of leaked objects and the number of leaked objects already included in the message) to make debugging leaked objects easier when the multiprocessing resource tracker process finds leaked objects at shutdown. This helps more quickly identify what was leaked and/or why the leaked object was not properly cleaned up.gh-106751: Optimize
SelectSelector.select()
for many iteration case. Patch By Donghee Na.gh-106751: Optimize
_PollLikeSelector.select()
for many iteration case.gh-106751: Optimize
KqueueSelector.select()
for many iteration case. Patch By Donghee Na.gh-106831: Fix potential missing
NULL
check ofd2i_SSL_SESSION
result in_ssl.c
.gh-105481: The various opcode lists in the
dis
module are now generated from bytecodes.c instead of explicitly constructed in opcode.py.gh-106727: Make
inspect.getsource()
smarter for class for same name definitionsgh-105726: Added
__slots__
tocontextlib.AbstractContextManager
andcontextlib.AbstractAsyncContextManager
so that child classes can use__slots__
.gh-106774: Update the bundled copy of pip to version 23.2.1.
gh-106751:
selectors
: OptimizeEpollSelector.select()
code by moving some code outside of the loop.gh-106752: Fixed several bugs in zipfile.Path, including: in
zipfile.Path.match()
, Windows separators are no longer honored (and never were meant to be); Fixedname
/suffix
/suffixes
/stem
operations when no filename is present and the Path is not at the root of the zipfile; Reworked glob for performance and more correct matching behavior.gh-105293: Remove call to
SSL_CTX_set_session_id_context
during client side context creation in thessl
module.gh-105481: Expose opcode metadata through
_opcode
.gh-106670: Add the new
exceptions
command to the Pdb debugger. It makes it possible to move between chained exceptions when using post mortem debugging.gh-106664:
selectors
: Add_SelectorMapping.get()
method and optimize_SelectorMapping.__getitem__()
.gh-106628: Speed up parsing of emails by about 20% by not compiling a new regular expression for every single email.
gh-89427: Set the environment variable
VIRTUAL_ENV_PROMPT
atvenv
activation, even whenVIRTUAL_ENV_DISABLE_PROMPT
is set.gh-106530: Revert a change to
colorsys.rgb_to_hls()
that caused division by zero for certain almost-white inputs. Patch by Terry Jan Reedy.gh-106584: Fix exit code for
unittest
if all tests are skipped. Patch by Egor Eliseev.gh-106566: Optimize
(?!)
(pattern which always fails) in regular expressions.gh-106554:
selectors
: Reduce Selector overhead by using adict.get()
to lookup file descriptors.gh-106558: Remove ref cycle in callers of
convert_to_error()
by deletingresult
from scope in afinally
block.gh-100502: Add
pathlib.PurePath.pathmod
class attribute that stores the implementation ofos.path
used for low-level path operations: eitherposixpath
orntpath
.gh-106527: Reduce overhead to add and remove
asyncio
readers and writers.gh-106524: Fix crash in
_sre.template()
with templates containing invalid group indices.gh-106531: Removed
_legacy
and the names it provided fromimportlib.resources
:Resource
,contents
,is_resource
,open_binary
,open_text
,path
,read_binary
, andread_text
.gh-106052:
re
module: fix the matching of possessive quantifiers in the case of a subpattern containing backtracking.gh-106510: Improve debug output for atomic groups in regular expressions.
gh-106503: Fix ref cycle in
asyncio._SelectorSocketTransport
by removing_write_ready
inclose
.gh-105497: Fix flag mask inversion when unnamed flags exist.
gh-90876: Prevent
multiprocessing.spawn
from failing to import in environments wheresys.executable
isNone
. This regressed in 3.11 with the addition of support for path-like objects in multiprocessing.gh-106403: Instances of
typing.TypeVar
,typing.ParamSpec
,typing.ParamSpecArgs
,typing.ParamSpecKwargs
, andtyping.TypeVarTuple
once again support weak references, fixing a regression introduced in Python 3.12.0 beta 1. Patch by Jelle Zijlstra.gh-89812: Add private
pathlib._PathBase
class, which provides experimental support for virtual filesystems, and may be made public in a future version of Python.gh-106292: Check for an instance-dict cached value in the
__get__()
method offunctools.cached_property()
. This better matches the pre-3.12 behavior and improves compatibility for users subclassingfunctools.cached_property()
and adding a__set__()
method.gh-106350: Detect possible memory allocation failure in the libtommath function
mp_init()
used by the_tkinter
module.gh-106330: Fix incorrect matching of empty paths in
pathlib.PurePath.match()
. This bug was introduced in Python 3.12.0 beta 1.gh-106309: Deprecate
typing.no_type_check_decorator()
. No major type checker ever added support for this decorator. Patch by Alex Waygood.gh-102541: Make
pydoc.doc()
catch bad moduleImportError
when output stream is notNone
.gh-106263: Fix crash when calling
repr
with a manually constructed SignalDict object. Patch by Charlie Zhao.gh-106236: Replace
assert
statements withraise RuntimeError
inthreading
, so that_DummyThread
cannot be joined even with-OO
.gh-106238: Fix rare concurrency bug in lock acquisition by the logging package.
gh-106152: Added PY_THROW event hook for
cProfile
for generatorsgh-106075: Added
asyncio.taskgroups.__all__
toasyncio.__all__
for export in star imports.gh-104527: Zipapp will now skip over appending an archive to itself.
gh-106046: Improve the error message from
os.fspath()
if called on an object where__fspath__
is set toNone
. Patch by Alex Waygood.gh-105987: Fix crash due to improper reference counting in
asyncio
eager task factory internal routines.gh-105974: Fix bug where a
typing.Protocol
class that had one or more non-callable members would raiseTypeError
whenissubclass()
was called against it, even if it defined a custom__subclasshook__
method. The behaviour in Python 3.11 and lower -- which has now been restored -- was not to raiseTypeError
in these situations if a custom__subclasshook__
method was defined. Patch by Alex Waygood.gh-96145: Reverted addition of
json.AttrDict
.gh-89812: Add
pathlib.UnsupportedOperation
, which is raised instead ofNotImplementedError
when a path operation isn't supported.gh-105808: Fix a regression introduced in gh-101251 for 3.12, causing
gzip.GzipFile.flush()
to not flush the compressor (nor pass along thezip_mode
argument).gh-105481:
stack_effect()
no longer raises an exception if anoparg
is provided for anopcode
that doesn't use its arg, or when it is not provided for anopcode
that does use it. In the latter case, the stack effect is returned foroparg=0
.gh-104799: Enable
ast.unparse()
to unparse function and class definitions created without the newtype_params
field from PEP 695. Patch by Jelle Zijlstra.gh-105793: Add follow_symlinks keyword-only argument to
pathlib.Path.is_dir()
andis_file()
, defaulting toTrue
.gh-105570: Deprecate two methods of creating
typing.TypedDict
classes with 0 fields using the functional syntax:TD = TypedDict("TD")
andTD = TypedDict("TD", None)
. Both will be disallowed in Python 3.15. To create aTypedDict
class with 0 fields, either useclass TD(TypedDict): pass
orTD = TypedDict("TD", {})
.gh-105745: Fix
webbrowser.Konqueror.open
method.gh-105733:
ctypes
: Deprecate undocumentedctypes.SetPointerType()
andctypes.ARRAY()
functions. Patch by Victor Stinner.gh-105687: Remove deprecated
re.template
,re.T
,re.TEMPLATE
,sre_constans.SRE_FLAG_TEMPLATE
.gh-105684: Supporting
asyncio.Task.set_name()
is now mandatory for third party task implementations. The undocumented_set_task_name()
function (deprecated since 3.8) has been removed. Patch by Kumar Aditya.gh-105375: Fix a bug in
_Unpickler_SetInputStream()
where an exception could end up being overwritten in case of failure.gh-105626: Change the default return value of
http.client.HTTPConnection.get_proxy_response_headers()
to beNone
and not{}
.gh-105375: Fix bugs in
sys
where exceptions could end up being overwritten because of deferred error handling.gh-105605: Harden
pyexpat
error handling during module initialisation to prevent exceptions from possibly being overwritten, and objects from being dereferenced twice.gh-105375: Fix bug in
decimal
where an exception could end up being overwritten.gh-105375: Fix bugs in
_datetime
where exceptions could be overwritten in case of module initialisation failure.gh-105375: Fix bugs in
_ssl
initialisation which could lead to leaked references and overwritten exceptions.gh-105375: Fix a bug in
array.array
where an exception could end up being overwritten.gh-105375: Fix bugs in
_ctypes
where exceptions could end up being overwritten.gh-105375: Fix a bug in the
posix
module where an exception could be overwritten.gh-105375: Fix bugs in
_elementtree
where exceptions could be overwritten.gh-105375: Fix bugs in
zoneinfo
where exceptions could be overwritten.gh-105375: Fix bugs in
errno
where exceptions could be overwritten.gh-105566: Deprecate creating a
typing.NamedTuple
class using keyword arguments to denote the fields (NT = NamedTuple("NT", x=int, y=str)
). This will be disallowed in Python 3.15. Use the class-based syntax or the functional syntax instead.Two methods of creating
NamedTuple
classes with 0 fields using the functional syntax are also deprecated, and will be disallowed in Python 3.15:NT = NamedTuple("NT")
andNT = NamedTuple("NT", None)
. To create aNamedTuple
class with 0 fields, either useclass NT(NamedTuple): pass
orNT = NamedTuple("NT", [])
.gh-105545: Remove deprecated in 3.11
webbrowser.MacOSXOSAScript._name
attribute.gh-105497: Fix flag inversion when alias/mask members exist.
gh-105509:
typing.Annotated
is now implemented as an instance oftyping._SpecialForm
rather than a class. This should have no user-facing impact for users of thetyping
module public API.gh-105375: Fix bugs in
pickle
where exceptions could be overwritten.gh-70303: Emit
FutureWarning
frompathlib.Path.glob()
andrglob()
if the given pattern ends with "**
". In a future Python release, patterns with this ending will match both files and directories. Add a trailing slash to only match directories.gh-105375: Fix a bug in
sqlite3
where an exception could be overwritten in thecollation
callback.gh-105382: Remove cafile, capath and cadefault parameters of the
urllib.request.urlopen()
function, deprecated in Python 3.6. Patch by Victor Stinner.gh-105376:
logging
: Remove undocumented and untestedLogger.warn()
andLoggerAdapter.warn()
methods andlogging.warn()
function. Deprecated since Python 3.3, they were aliases to thelogging.Logger.warning()
method,logging.LoggerAdapter.warning()
method andlogging.warning()
function. Patch by Victor Stinner.gh-105332: Revert pickling method from by-name back to by-value.
gh-104554: Add RTSPS scheme support in urllib.parse
gh-105292: Add option to
traceback.format_exception_only()
to recurse into the nested exception of aBaseExceptionGroup
.gh-105280: Fix bug where
isinstance([], collections.abc.Mapping)
could evaluate toTrue
if garbage collection happened at the wrong time. The bug was caused by changes to the implementation oftyping.Protocol
in Python 3.12.gh-105239: Fix longstanding bug where
issubclass(object, typing.Protocol)
would evaluate toTrue
in some edge cases. Patch by Alex Waygood.gh-104310: In the beta 1 release we added a utility function for extension module authors, to use when testing their module for support in multiple interpreters or under a per-interpreter GIL. The name of that function has changed from
allowing_all_extensions
to_incompatible_extension_module_restrictions
. The default for the "disable_check" argument has change fromTrue
toFalse
, to better match the new function name.gh-105080: Fixed inconsistent signature on derived classes for
inspect.signature()
gh-105144: Fix a recent regression in the
typing
module. The regression meant that doingclass Foo(X, typing.Protocol)
, whereX
was a class that hadabc.ABCMeta
as its metaclass, would then cause subsequentisinstance(1, X)
calls to erroneously raiseTypeError
. Patch by Alex Waygood.gh-62948: The
io.IOBase
finalizer now logs theclose()
method errors withsys.unraisablehook
. Previously, errors were ignored silently by default, and only logged in Python Development Mode or on Python built on debug mode. Patch by Victor Stinner.gh-105096:
wave
: Deprecate thegetmark()
,setmark()
andgetmarkers()
methods of thewave.Wave_read
andwave.Wave_write
classes. They will be removed in Python 3.15. Patch by Victor Stinner.gh-104992: Remove the untested and undocumented
unittest.TestProgram.usageExit()
method, deprecated in Python 3.11. Patch by Hugo van Kemenade.gh-104996: Improve performance of
pathlib.PurePath
initialisation by deferring joining of paths when multiple arguments are given.gh-101588: Deprecate undocumented copy/deepcopy/pickle support for itertools.
gh-103631: Fix
pathlib.PurePosixPath(pathlib.PureWindowsPath(...))
not converting path separators to restore 3.11 compatible behavior.gh-104947: Make comparisons between
pathlib.PureWindowsPath
objects consistent across Windows and Posix to match 3.11 behavior.gh-104773: PEP 594: Remove the
audioop
module, deprecated in Python 3.11. Patch by Victor Stinner.gh-104773: PEP 594: Remove the
aifc
module, deprecated in Python 3.11. Patch by Victor Stinner.gh-104773: PEP 594: Remove the
uu
module, deprecated in Python 3.11. Patch by Victor Stinner.gh-104935: Fix bugs with the interaction between
typing.runtime_checkable()
andtyping.Generic
that were introduced by the PEP 695 implementation. Patch by Jelle Zijlstra.gh-104773: PEP 594: Remove the
crypt
module and its private_crypt
extension, deprecated in Python 3.11. Patch by Victor Stinner.gh-104773: PEP 594: Remove the
nis
module, deprecated in Python 3.11. Patch by Victor Stinner.gh-104898: Add missing
__slots__
toos.PathLike
.gh-104773: PEP 594: Remove the
xdrlib
module, deprecated in Python 3.11. Patch by Victor Stinner.gh-104773: PEP 594: Remove the
nntplib
module, deprecated in Python 3.11. Patch by Victor Stinner.gh-104886: Remove the undocumented
configparser.LegacyInterpolation
class, deprecated in the docstring since Python 3.2, and with a deprecation warning since Python 3.11. Patch by Hugo van Kemenade.gh-104786: Remove kwargs-based
typing.TypedDict
creationgh-104876: Remove the
turtle.RawTurtle.settiltangle()
method, deprecated in docs since Python 3.1 and with a deprecation warning since Python 3.11. Patch by Hugo van Kemenade.gh-104773: PEP 594: Removed the
msilib
package, deprecated in Python 3.11.gh-104773: PEP 594: Remove the
spwd
module, deprecated in Python 3.11: the python-pam project can be used instead. Patch by Victor Stinner.gh-75552: Removed the
tkinter.tix
module, deprecated since Python 3.6.gh-104773: PEP 594: Remove the
chunk
module, deprecated in Python 3.11. Patch by Victor Stinner.gh-104773: PEP 594: Remove the
mailcap
module, deprecated in Python 3.11. Patch by Victor Stinner.gh-104773: PEP 594: Remove the
sunau
module, deprecated in Python 3.11. Patch by Victor Stinner.gh-104780: PEP 594: Remove the
ossaudiodev
module, deprecated in Python 3.11. Patch Victor Stinner.gh-104773: PEP 594: Remove the
pipes
module, deprecated in Python 3.11. Patch by Victor Stinner.gh-104873: Add
typing.get_protocol_members()
to return the set of members defining atyping.Protocol
. Addtyping.is_protocol()
to check whether a class is atyping.Protocol
. Patch by Jelle Zijlstra.gh-104874: Document the
__name__
and__supertype__
attributes oftyping.NewType
. Patch by Jelle Zijlstra.gh-104835: Removed the following
unittest
functions, deprecated in Python 3.11:unittest.findTestCases()
unittest.makeSuite()
unittest.getTestCaseNames()
Use
TestLoader
methods instead:Patch by Hugo van Kemenade.
gh-104804: Remove the untested and undocumented
webbrowser
MacOSX
class, deprecated in Python 3.11. Patch by Hugo van Kemenade.gh-83863: Support for using
pathlib.Path
objects as context managers has been removed. Before Python 3.9, exiting the context manager marked a path as "closed", which caused some (but not all!) methods to raise when called. Since Python 3.9, using a path as a context manager does nothing.gh-104799: Adjust the location of the (see PEP 695)
type_params
field onast.ClassDef
,ast.AsyncFunctionDef
, andast.FunctionDef
to better preserve backward compatibility. Patch by Jelle Zijlstragh-104797: Allow
typing.Protocol
classes to inherit fromcollections.abc.Buffer
. Patch by Jelle Zijlstra.gh-104783: Remove
locale.resetlocale()
function deprecated in Python 3.11. Patch by Victor Stinner.gh-104780: Remove the
2to3
program and thelib2to3
module, deprecated in Python 3.11. Patch by Victor Stinner.gh-104773: PEP 594: Remove the
telnetlib
module, deprecated in Python 3.11. Patch by Victor Stinner.gh-104773: PEP 594: Remove the
imghdr
module, deprecated in Python 3.11. Patch by Victor Stinner.gh-104773: PEP 594: Remove the
cgi
andcgitb
modules, deprecated in Python 3.11. Patch by Victor Stinner.gh-104773: PEP 594: Remove the
sndhdr
module, deprecated in Python 3.11. Patch by Victor Stinner.gh-104372: On Linux where
subprocess
can use thevfork()
syscall for faster spawning, prevent the parent process from blocking other threads by dropping the GIL while it waits for the vfork'ed child processexec()
outcome. This prevents spawning a binary from a slow filesystem from blocking the rest of the application.gh-99108: We now release the GIL around built-in
hashlib
computations of reasonable size for the SHA families and MD5 hash functions, matching what our OpenSSL backed hash computations already does.gh-102613: Improve performance of
pathlib.Path.glob()
when expanding a pattern with a non-terminal "**
" component by filtering walked paths through a regular expression, rather than callingos.scandir()
more than once on each directory.gh-104399: Prepare the
_tkinter
module for building with Tcl 9.0 and future libtommath by replacing usage of deprecated functionsmp_to_unsigned_bin_n()
andmp_unsigned_bin_size()
when necessary.gh-102676: Add fields
start_offset
,cache_offset
,end_offset
,baseopname
,baseopcode
,jump_target
andoparg
todis.Instruction
.gh-103558: Fixed
parent
argument validation mechanism ofargparse
. Improved test coverage.gh-103464: Provide helpful usage messages when parsing incorrect
pdb
commands.gh-103384: Generalize the regex pattern
BaseConfigurator.INDEX_PATTERN
to allow spaces and non-alphanumeric characters in keys.gh-101162: Forbid using
builtins.issubclass()
withtypes.GenericAlias
as the first argument.gh-103200: Fix cache repopulation semantics of zipimport.invalidate_caches(). The cache is now repopulated upon retrieving files with an invalid cache, not when the cache is invalidated.
gh-100061: Fix a bug that causes wrong matches for regular expressions with possessive qualifier.
gh-77609: Add follow_symlinks argument to
pathlib.Path.glob()
andrglob()
, defaulting to false.gh-102541: Hide traceback in
help()
prompt, when import failed.gh-102120: Added a stream mode to
tarfile
that allows for reading archives without caching info about the inner files.gh-102029: Deprecate passing any arguments to
threading.RLock()
.gh-88233: Refactored
zipfile._strip_extra
to use higher level abstractions for extras instead of a heavy-state loop.gh-102024: Reduce calls of
_idle_semaphore.release()
inconcurrent.futures.thread._worker()
.gh-73435: Add support for recursive wildcards in
pathlib.PurePath.match()
.