diff --git a/CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch b/CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch
index 767e62c..e0e1ece 100644
--- a/CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch
+++ b/CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch
@@ -4,11 +4,11 @@
Lib/test/test_xml_etree.py | 10 ++++++++++
3 files changed, 17 insertions(+)
-Index: Python-3.14.0/Lib/test/test_pyexpat.py
+Index: Python-3.15.0a1/Lib/test/test_pyexpat.py
===================================================================
---- Python-3.14.0.orig/Lib/test/test_pyexpat.py 2025-10-08 11:27:29.989583305 +0200
-+++ Python-3.14.0/Lib/test/test_pyexpat.py 2025-10-08 11:28:09.418914658 +0200
-@@ -827,6 +827,10 @@
+--- Python-3.15.0a1.orig/Lib/test/test_pyexpat.py 2025-10-24 23:53:24.356893960 +0200
++++ Python-3.15.0a1/Lib/test/test_pyexpat.py 2025-10-24 23:53:50.136311340 +0200
+@@ -843,6 +843,10 @@
self.assertEqual(started, ['doc'])
def test_reparse_deferral_disabled(self):
@@ -19,10 +19,10 @@ Index: Python-3.14.0/Lib/test/test_pyexpat.py
started = []
def start_element(name, _):
-Index: Python-3.14.0/Lib/test/test_sax.py
+Index: Python-3.15.0a1/Lib/test/test_sax.py
===================================================================
---- Python-3.14.0.orig/Lib/test/test_sax.py 2025-10-08 11:27:30.053760879 +0200
-+++ Python-3.14.0/Lib/test/test_sax.py 2025-10-08 11:28:09.419532320 +0200
+--- Python-3.15.0a1.orig/Lib/test/test_sax.py 2025-10-24 23:53:24.425039914 +0200
++++ Python-3.15.0a1/Lib/test/test_sax.py 2025-10-24 23:53:50.136951370 +0200
@@ -1241,6 +1241,9 @@
self.assertEqual(result.getvalue(), start + b"")
@@ -33,10 +33,10 @@ Index: Python-3.14.0/Lib/test/test_sax.py
def test_flush_reparse_deferral_disabled(self):
result = BytesIO()
xmlgen = XMLGenerator(result)
-Index: Python-3.14.0/Lib/test/test_xml_etree.py
+Index: Python-3.15.0a1/Lib/test/test_xml_etree.py
===================================================================
---- Python-3.14.0.orig/Lib/test/test_xml_etree.py 2025-10-08 11:27:30.502943506 +0200
-+++ Python-3.14.0/Lib/test/test_xml_etree.py 2025-10-08 11:28:09.420206077 +0200
+--- Python-3.15.0a1.orig/Lib/test/test_xml_etree.py 2025-10-24 23:53:24.855327755 +0200
++++ Python-3.15.0a1/Lib/test/test_xml_etree.py 2025-10-24 23:53:50.137646227 +0200
@@ -138,6 +138,11 @@
return mock.patch.object(cls, "__eq__", autospec=True, wraps=eq)
@@ -61,7 +61,7 @@ Index: Python-3.14.0/Lib/test/test_xml_etree.py
def test_simple_xml_chunk_5(self):
self.test_simple_xml(chunk_size=5, flush=True)
-@@ -1774,6 +1781,9 @@
+@@ -1776,6 +1783,9 @@
self.assert_event_tags(parser, [('end', 'doc')])
diff --git a/F00251-change-user-install-location.patch b/F00251-change-user-install-location.patch
index 80d80c1..e84f1b9 100644
--- a/F00251-change-user-install-location.patch
+++ b/F00251-change-user-install-location.patch
@@ -28,10 +28,10 @@ Co-authored-by: Lumír Balhar
Lib/test/test_sysconfig.py | 17 +++++++++++++--
2 files changed, 65 insertions(+), 3 deletions(-)
-Index: Python-3.14.0/Lib/sysconfig/__init__.py
+Index: Python-3.15.0a1/Lib/sysconfig/__init__.py
===================================================================
---- Python-3.14.0.orig/Lib/sysconfig/__init__.py 2025-10-08 11:27:28.335887277 +0200
-+++ Python-3.14.0/Lib/sysconfig/__init__.py 2025-10-08 11:28:00.652215416 +0200
+--- Python-3.15.0a1.orig/Lib/sysconfig/__init__.py 2025-10-24 23:53:22.709921139 +0200
++++ Python-3.15.0a1/Lib/sysconfig/__init__.py 2025-10-24 23:53:34.981019958 +0200
@@ -106,6 +106,11 @@
else:
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
@@ -73,7 +73,7 @@ Index: Python-3.14.0/Lib/sysconfig/__init__.py
_BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix)
# Mutex guarding initialization of _CONFIG_VARS.
_CONFIG_VARS_LOCK = threading.RLock()
-@@ -268,11 +288,40 @@
+@@ -257,11 +277,40 @@
target_dict[key] = value
@@ -115,11 +115,11 @@ Index: Python-3.14.0/Lib/sysconfig/__init__.py
if os.name == 'nt':
# On Windows we want to substitute 'lib' for schemes rather
# than the native value (without modifying vars, in case it
-Index: Python-3.14.0/Lib/test/test_sysconfig.py
+Index: Python-3.15.0a1/Lib/test/test_sysconfig.py
===================================================================
---- Python-3.14.0.orig/Lib/test/test_sysconfig.py 2025-10-08 11:27:30.181651013 +0200
-+++ Python-3.14.0/Lib/test/test_sysconfig.py 2025-10-08 11:28:00.653226898 +0200
-@@ -132,8 +132,19 @@
+--- Python-3.15.0a1.orig/Lib/test/test_sysconfig.py 2025-10-24 23:53:24.545975205 +0200
++++ Python-3.15.0a1/Lib/test/test_sysconfig.py 2025-10-24 23:53:34.981457517 +0200
+@@ -131,8 +131,19 @@
for scheme in _INSTALL_SCHEMES:
for name in _INSTALL_SCHEMES[scheme]:
expected = _INSTALL_SCHEMES[scheme][name].format(**config_vars)
@@ -140,7 +140,7 @@ Index: Python-3.14.0/Lib/test/test_sysconfig.py
os.path.normpath(expected),
)
-@@ -395,7 +406,7 @@
+@@ -394,7 +405,7 @@
self.assertTrue(os.path.isfile(config_h), config_h)
def test_get_scheme_names(self):
@@ -149,7 +149,7 @@ Index: Python-3.14.0/Lib/test/test_sysconfig.py
if HAS_USER_BASE:
wanted.extend(['nt_user', 'osx_framework_user', 'posix_user'])
self.assertEqual(get_scheme_names(), tuple(sorted(wanted)))
-@@ -407,6 +418,8 @@
+@@ -406,6 +417,8 @@
cmd = "-c", "import sysconfig; print(sysconfig.get_platform())"
self.assertEqual(py.call_real(*cmd), py.call_link(*cmd))
diff --git a/Python-3.14.0.tar.xz b/Python-3.14.0.tar.xz
deleted file mode 100644
index 7b2299a..0000000
--- a/Python-3.14.0.tar.xz
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2299dae542d395ce3883aca00d3c910307cd68e0b2f7336098c8e7b7eee9f3e9
-size 23595844
diff --git a/Python-3.14.0.tar.xz.sigstore b/Python-3.14.0.tar.xz.sigstore
deleted file mode 100644
index 2ebe860..0000000
--- a/Python-3.14.0.tar.xz.sigstore
+++ /dev/null
@@ -1 +0,0 @@
-{"mediaType": "application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial": {"certificate": {"rawBytes": "MIICzjCCAlOgAwIBAgIUaFNOs99+mdUwhWuy93hUKegEDvowCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUxMDA3MTQxNjE4WhcNMjUxMDA3MTQyNjE4WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEB4Zs7yR5znQ3xOtA7ekHhkbjmt11y4B0kYTAt5K3MmjxgyQ/FOzoGbiNgP1p76I5OFwbECeL6RtxqjSwJPoj9aOCAXIwggFuMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU6Jy2V0oQb2tmHwImrQplvua+1WkwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wHQYDVR0RAQH/BBMwEYEPaHVnb0BweXRob24ub3JnMCwGCisGAQQBg78wAQEEHmh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aDAuBgorBgEEAYO/MAEIBCAMHmh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aDCBiQYKKwYBBAHWeQIEAgR7BHkAdwB1AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmb8HuYwAAAQDAEYwRAIgZd3lZo6EQ8hFKJ1SnKnh/pOXyLVUxesmKPdZLI/IddsCIHbkeFmcOlHbGXvzusuMaF7GDoHgfjCRXvFE1kPVSPdUMAoGCCqGSM49BAMDA2kAMGYCMQCF3LWgo5EPOs6y59yMkN8HDY/PuX+rch7scxcXUR8K+6BNw1dS8i1nGRkIvE/ttF8CMQCG6z4lu2ekjwZBMx69OmDsUlrQjOvrxmWX3pbLh4Aam7sS25DCYvVFul4RmPg/sJg="}, "tlogEntries": [{"logIndex": "588222392", "logId": {"keyId": "wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion": {"kind": "hashedrekord", "version": "0.0.1"}, "integratedTime": "1759846578", "inclusionPromise": {"signedEntryTimestamp": "MEQCIBS/mvM2EUceWygdN+NmnJMehkFY1fRkmVmmDNICfxWVAiAoN7Vofd2SVuJYSxO/onzd87/3bWNogJlDvI7uZSTR1Q=="}, "inclusionProof": {"logIndex": "466318130", "rootHash": "RcerGwX5+QIiZjrznmUlSGFvuGAq3RMLk/7Aj/T6M3I=", "treeSize": "466318146", "hashes": ["5uTZFkdYgFmKJJdqzeeKZfjnq5Mx9K0tDsF0fjJzkCk=", "RL5Hp6IOaxPi5M/m3s97bDoAnRux0/JBccJ4+/B1vro=", "JYAmi+fU2/Su8fHV3tfQcbY//eCoHsfd2H7O1hs6HIQ=", "BbdwHf9ld92J1gFR6vWH/Gv+L9YTGwWAQytyDm+6jYc=", "J0rXI11jq+mZyPMktZmo2UlHPQw0Wyl70FQBNujJJog=", "tcYxYlxPe1g09Dr+wGWIPrCmHuFjjjwqZ4gRokgj4zE=", "X0IhqC7U/8YmeUILMTYIvlKoBEAX3aFw3IWHNcfJifc=", "kQWzYHtEr0Vhaq6Z6v4TIiuia6GrJLKcYKs25NPvkms=", "WjmJ5Vrat53AbuDR9WjO4SQADjlfkyyq+bKkkBO984w=", "k9qNU1WjJDQJ+e4prrbcOORJ5aMBlkIBACMsgKoANg0=", "Z7pLmTcnciyz67VEWMgPwiokTg9JVUQWrPf+VS85VlA=", "y/7hUHbXERsQubPR1m2uvZSz3rFsW3d9dP51hoTyX/U=", "19j/ye5CX1xbsCqb7Xkr1O2BXIOAWPwZsn7TDtr6UVc=", "JVKPJjj8WVb6G2sYzX+4PL9fC+4qskYANlO6/TIjQsE=", "XTHRaE0cHDl9HYIIwtlwjCK2+pmMP8G2rv801RmA0U8=", "ujcC9wUGq4yMg4Sr83ZRaheYdJguBWXGhnp101NfbMo=", "Kcf5veFWCVXREqqw2Q7rOJD3ttDxBxePywSepmjiSGo=", "5J6N5aNEMk6YY8lPNH0zZx95RNICDJ12cMAmpwtvGTo=", "/buh7NyeUdCgJPdaMbTAtiQpMkNHhk+xMsI2shkTieM=", "1mfy94KpcItqshH9+gwqV6jccupcaMpVsF28New8zDY=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint": {"envelope": "rekor.sigstore.dev - 1193050959916656506\n466318146\nRcerGwX5+QIiZjrznmUlSGFvuGAq3RMLk/7Aj/T6M3I=\n\n\u2014 rekor.sigstore.dev wNI9ajBFAiEA9LofhlufYOpmdGvOuS7AvxT5koyDoOFWNEhobBt+UgYCICpTORyuqmFZWs8D1FJAry4ohDUWTSw3JegUDlUUtr3z\n"}}, "canonicalizedBody": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIyMjk5ZGFlNTQyZDM5NWNlMzg4M2FjYTAwZDNjOTEwMzA3Y2Q2OGUwYjJmNzMzNjA5OGM4ZTdiN2VlZTlmM2U5In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJUUNQWEhJOW9MdVNJL3RoVDg1ZXBkWlVWakh4d1M4OFpTTExLcjFmWnprWGJnSWdTUFY3ZnV1dytISGhCazljNGlBWGlCNVBJRWdMQ1kwTTVVaXNUM3h1QUcwPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVTjZha05EUVd4UFowRjNTVUpCWjBsVllVWk9UM001T1N0dFpGVjNhRmQxZVRremFGVkxaV2RGUkhadmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFZlRTFFUVROTlZGRjRUbXBGTkZkb1kwNU5hbFY0VFVSQk0wMVVVWGxPYWtVMFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZDTkZwek4zbFNOWHB1VVRONFQzUkJOMlZyU0doclltcHRkREV4ZVRSQ01HdFpWRUVLZERWTE0wMXRhbmhuZVZFdlJrOTZiMGRpYVU1blVERndOelpKTlU5R2QySkZRMlZNTmxKMGVIRnFVM2RLVUc5cU9XRlBRMEZZU1hkblowWjFUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlUyU25reUNsWXdiMUZpTW5SdFNIZEpiWEpSY0d4MmRXRXJNVmRyZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDBoUldVUldVakJTUVZGSUwwSkNUWGRGV1VWUVlVaFdibUl3UW5kbFdGSnZZakkwZFdJelNtNU5RM2RIUTJselIwRlJVVUpuTnpoM1FWRkZSUXBJYldnd1pFaENlazlwT0haYU1td3dZVWhXYVV4dFRuWmlVemx6WWpKa2NHSnBPWFpaV0ZZd1lVUkJkVUpuYjNKQ1owVkZRVmxQTDAxQlJVbENRMEZOQ2todGFEQmtTRUo2VDJrNGRsb3liREJoU0ZacFRHMU9kbUpUT1hOaU1tUndZbWs1ZGxsWVZqQmhSRU5DYVZGWlMwdDNXVUpDUVVoWFpWRkpSVUZuVWpjS1FraHJRV1IzUWpGQlRqQTVUVWR5UjNoNFJYbFplR3RsU0Vwc2JrNTNTMmxUYkRZME0ycDVkQzgwWlV0amIwRjJTMlUyVDBGQlFVSnRZamhJZFZsM1FRcEJRVkZFUVVWWmQxSkJTV2RhWkROc1dtODJSVkU0YUVaTFNqRlRia3R1YUM5d1QxaDVURlpWZUdWemJVdFFaRnBNU1M5SlpHUnpRMGxJWW10bFJtMWpDazlzU0dKSFdIWjZkWE4xVFdGR04wZEViMGhuWm1wRFVsaDJSa1V4YTFCV1UxQmtWVTFCYjBkRFEzRkhVMDAwT1VKQlRVUkJNbXRCVFVkWlEwMVJRMFlLTTB4WFoyODFSVkJQY3paNU5UbDVUV3RPT0VoRVdTOVFkVmdyY21Ob04zTmplR05ZVlZJNFN5czJRazUzTVdSVE9Ha3hia2RTYTBsMlJTOTBkRVk0UXdwTlVVTkhObm8wYkhVeVpXdHFkMXBDVFhnMk9VOXRSSE5WYkhKUmFrOTJjbmh0VjFnemNHSk1hRFJCWVcwM2MxTXlOVVJEV1haV1JuVnNORkp0VUdjdkNuTktaejBLTFMwdExTMUZUa1FnUTBWU1ZFbEdTVU5CVkVVdExTMHRMUW89In19fX0="}]}, "messageSignature": {"messageDigest": {"algorithm": "SHA2_256", "digest": "Ipna5ULTlc44g6ygDTyRAwfNaOCy9zNgmMjnt+7p8+k="}, "signature": "MEUCIQCPXHI9oLuSI/thT85epdZUVjHxwS88ZSLLKr1fZzkXbgIgSPV7fuuw+HHhBk9c4iAXiB5PIEgLCY0M5UisT3xuAG0="}}
diff --git a/Python-3.15.0a1.tar.xz b/Python-3.15.0a1.tar.xz
new file mode 100644
index 0000000..26d8153
--- /dev/null
+++ b/Python-3.15.0a1.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3194939d488eeaeefdcf990d35542d9ad1ce788789c4e2305a2060eb7058e5a4
+size 23646768
diff --git a/Python-3.15.0a1.tar.xz.sigstore b/Python-3.15.0a1.tar.xz.sigstore
new file mode 100644
index 0000000..7b84f4e
--- /dev/null
+++ b/Python-3.15.0a1.tar.xz.sigstore
@@ -0,0 +1 @@
+{"mediaType": "application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial": {"certificate": {"rawBytes": "MIICzTCCAlSgAwIBAgIUHBnJY2cDVNyp0+jVDU64RXDfTLUwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUxMDE0MTQ0NjIwWhcNMjUxMDE0MTQ1NjIwWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELQMCqzrc9clNKPUzmojg3JbTM3XXjmo/wWH6zH8rh6GGP8TJSz+A8OMUdeE7ktSr5+9QeVaEGDRasbmwIAKX8aOCAXMwggFvMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQULWp/zwV2HmZ8X/y10L1ftl0hN5QwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wHQYDVR0RAQH/BBMwEYEPaHVnb0BweXRob24ub3JnMCwGCisGAQQBg78wAQEEHmh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aDAuBgorBgEEAYO/MAEIBCAMHmh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aDCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmeMvvDEAAAQDAEcwRQIhALiWW21hVw6w95sI+lVh8NFcaWG1KITMvDC0HytgwrkTAiBmnB/Il7sqNC9TV3ybSbyMgXUrXlpz7Y4+ri6qEe8OmjAKBggqhkjOPQQDAwNnADBkAjAav7uspSvsMYLOIqcV65W7UEfUl/+oaDVcAnUBTn4VzzWVNt7rRh/sGU9Ow1fsgaQCMHKjjdlRouWZV13QxRqUlwiYnso8K/LrepolTWuu9hmJ4498BbxpQkG82AiFgwHKiA=="}, "tlogEntries": [{"logIndex": "605381105", "logId": {"keyId": "wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion": {"kind": "hashedrekord", "version": "0.0.1"}, "integratedTime": "1760453180", "inclusionPromise": {"signedEntryTimestamp": "MEUCIQD2M+xpYMeDZb0B+2kBuUQDfsBPNuaNbOPB/tLnCY1+CwIgH1bBckucAYWz+3wFvU9MVGWc985g1wJsYy27aYYg+5c="}, "inclusionProof": {"logIndex": "483476843", "rootHash": "VcoiuI3enMGLjUhgMzdjfI+PlOWmz/r/ADehdiW44fo=", "treeSize": "483476848", "hashes": ["r/fQjBRZKxYDs6T00FfDqZfE3gNFN5jUw2hPbI6Klb4=", "Fu7qRL8q8yz4aWKTEU5+PzVtd9R4k7HkP62EtCYWURQ=", "jvpXra7v+FEGbwj68er3f1BUvjOiYUjCL/pwYF0UG6c=", "VxMxwBbsJTw+9QBfKnXMOxyeZ7HJKlExLQMtqStpg0Y=", "fU2ETS/0MxEeuY1O0lS9SJrXcXC78pJVOtXCNv7LymQ=", "TS0t//1G9191vAjMg50KLfXBi3UY8ANFmx1ZNp2k5vk=", "1bdCuQIZjyx9tCJXNrYevW3fyHk6huvJ/h5uIlfIiy0=", "wjy79ir2+9dNofV/yngwyU7P7qEQoJWbN/f/+YIqeSg=", "Tx/mYCxiKxJdXGSB99WD+yAVDPg18BLOj5lDqPQUNe4=", "eSCfK8nXzRpj/m2HYQ9+GtLIccUwLOkk3iYGC4R5zXI=", "inrOYOb+roitD1EYWHmRPy8aJnjhSAhp5cHXbXVlxU4=", "8nCds1SUzxGg2Xoa+M1tOFTwx+1BGtp8TDMSS4P54xQ=", "V5lOdefY1WOOt4iQp7tZoyj1beBDVi24KsEMcgsqZds=", "2Wv4GiithwNukRKV06clevnQQYCzXmSS/+/OJtXgsXQ=", "1mfy94KpcItqshH9+gwqV6jccupcaMpVsF28New8zDY=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint": {"envelope": "rekor.sigstore.dev - 1193050959916656506\n483476848\nVcoiuI3enMGLjUhgMzdjfI+PlOWmz/r/ADehdiW44fo=\n\n\u2014 rekor.sigstore.dev wNI9ajBGAiEAhRdd+DI17Uc7iB9ExZ3kq9O47UtmJyeRF8AcagocSIYCIQCjl6Z9CXp3exjHHmeQCwLAVOGRbCfKwsbuQAZwl4K80A==\n"}}, "canonicalizedBody": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIzMTk0OTM5ZDQ4OGVlYWVlZmRjZjk5MGQzNTU0MmQ5YWQxY2U3ODg3ODljNGUyMzA1YTIwNjBlYjcwNThlNWE0In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJQkZ3NFEvelFZcnJWNHlSalN0TmkwSkd3NG80VTdjWGlCWFZHUksrYTVNV0FpQmFBYTBMTUN6VkZxelVEbVkrMEYranZEQm8waFJUc25JckVUY1RMY1ZPZkE9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVTjZWRU5EUVd4VFowRjNTVUpCWjBsVlNFSnVTbGt5WTBSV1RubHdNQ3RxVmtSVk5qUlNXRVJtVkV4VmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFZlRTFFUlRCTlZGRXdUbXBKZDFkb1kwNU5hbFY0VFVSRk1FMVVVVEZPYWtsM1YycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZNVVUxRGNYcHlZemxqYkU1TFVGVjZiVzlxWnpOS1lsUk5NMWhZYW0xdkwzZFhTRFlLZWtnNGNtZzJSMGRRT0ZSS1Uzb3JRVGhQVFZWa1pVVTNhM1JUY2pVck9WRmxWbUZGUjBSU1lYTmliWGRKUVV0WU9HRlBRMEZZVFhkblowWjJUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZNVjNBdkNucDNWakpJYlZvNFdDOTVNVEJNTVdaMGJEQm9UalZSZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDBoUldVUldVakJTUVZGSUwwSkNUWGRGV1VWUVlVaFdibUl3UW5kbFdGSnZZakkwZFdJelNtNU5RM2RIUTJselIwRlJVVUpuTnpoM1FWRkZSUXBJYldnd1pFaENlazlwT0haYU1td3dZVWhXYVV4dFRuWmlVemx6WWpKa2NHSnBPWFpaV0ZZd1lVUkJkVUpuYjNKQ1owVkZRVmxQTDAxQlJVbENRMEZOQ2todGFEQmtTRUo2VDJrNGRsb3liREJoU0ZacFRHMU9kbUpUT1hOaU1tUndZbWs1ZGxsWVZqQmhSRU5DYVdkWlMwdDNXVUpDUVVoWFpWRkpSVUZuVWpnS1FraHZRV1ZCUWpKQlRqQTVUVWR5UjNoNFJYbFplR3RsU0Vwc2JrNTNTMmxUYkRZME0ycDVkQzgwWlV0amIwRjJTMlUyVDBGQlFVSnRaVTEyZGtSRlFRcEJRVkZFUVVWamQxSlJTV2hCVEdsWFZ6SXhhRlozTm5jNU5YTkpLMnhXYURoT1JtTmhWMGN4UzBsVVRYWkVRekJJZVhSbmQzSnJWRUZwUW0xdVFpOUpDbXczYzNGT1F6bFVWak41WWxOaWVVMW5XRlZ5V0d4d2VqZFpOQ3R5YVRaeFJXVTRUMjFxUVV0Q1oyZHhhR3RxVDFCUlVVUkJkMDV1UVVSQ2EwRnFRV0VLZGpkMWMzQlRkbk5OV1V4UFNYRmpWalkxVnpkVlJXWlZiQzhyYjJGRVZtTkJibFZDVkc0MFZucDZWMVpPZERkeVVtZ3ZjMGRWT1U5M01XWnpaMkZSUXdwTlNFdHFhbVJzVW05MVYxcFdNVE5SZUZKeFZXeDNhVmx1YzI4NFN5OU1jbVZ3YjJ4VVYzVjFPV2h0U2pRME9UaENZbmh3VVd0SE9ESkJhVVpuZDBoTENtbEJQVDBLTFMwdExTMUZUa1FnUTBWU1ZFbEdTVU5CVkVVdExTMHRMUW89In19fX0="}]}, "messageSignature": {"messageDigest": {"algorithm": "SHA2_256", "digest": "MZSTnUiO6u79z5kNNVQtmtHOeIeJxOIwWiBg63BY5aQ="}, "signature": "MEQCIBFw4Q/zQYrrV4yRjStNi0JGw4o4U7cXiBXVGRK+a5MWAiBaAa0LMCzVFqzUDmY+0F+jvDBo0hRTsnIrETcTLcVOfA=="}}
diff --git a/baselibs.conf b/baselibs.conf
index d43116d..6b18549 100644
--- a/baselibs.conf
+++ b/baselibs.conf
@@ -1,3 +1,3 @@
-python314-base
-python314
-libpython3_14-1_0
+python315-base
+python315
+libpython3_15-1_0
diff --git a/bpo-31046_ensurepip_honours_prefix.patch b/bpo-31046_ensurepip_honours_prefix.patch
index a962e30..6c317b5 100644
--- a/bpo-31046_ensurepip_honours_prefix.patch
+++ b/bpo-31046_ensurepip_honours_prefix.patch
@@ -13,10 +13,10 @@ Co-Authored-By: Xavier de Gaye
5 files changed, 37 insertions(+), 9 deletions(-)
create mode 100644 Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
-Index: Python-3.14.0rc1/Doc/library/ensurepip.rst
+Index: Python-3.15.0a1/Doc/library/ensurepip.rst
===================================================================
---- Python-3.14.0rc1.orig/Doc/library/ensurepip.rst 2025-07-22 18:42:44.000000000 +0200
-+++ Python-3.14.0rc1/Doc/library/ensurepip.rst 2025-07-23 10:10:31.690342385 +0200
+--- Python-3.15.0a1.orig/Doc/library/ensurepip.rst 2025-10-14 12:46:08.000000000 +0200
++++ Python-3.15.0a1/Doc/library/ensurepip.rst 2025-10-24 23:53:43.587408643 +0200
@@ -61,7 +61,11 @@
By default, ``pip`` is installed into the current virtual environment
(if one is active) or into the system site packages (if there is no
@@ -57,10 +57,10 @@ Index: Python-3.14.0rc1/Doc/library/ensurepip.rst
.. audit-event:: ensurepip.bootstrap root ensurepip.bootstrap
.. note::
-Index: Python-3.14.0rc1/Lib/ensurepip/__init__.py
+Index: Python-3.15.0a1/Lib/ensurepip/__init__.py
===================================================================
---- Python-3.14.0rc1.orig/Lib/ensurepip/__init__.py 2025-07-23 10:10:18.541751619 +0200
-+++ Python-3.14.0rc1/Lib/ensurepip/__init__.py 2025-07-23 10:10:31.690818287 +0200
+--- Python-3.15.0a1.orig/Lib/ensurepip/__init__.py 2025-10-24 23:53:22.118065622 +0200
++++ Python-3.15.0a1/Lib/ensurepip/__init__.py 2025-10-24 23:53:43.587899003 +0200
@@ -106,27 +106,27 @@
os.environ['PIP_CONFIG_FILE'] = os.devnull
@@ -94,7 +94,7 @@ Index: Python-3.14.0rc1/Lib/ensurepip/__init__.py
Note that calling this function will alter both sys.path and os.environ.
"""
-@@ -162,6 +162,8 @@
+@@ -171,6 +171,8 @@
args = ["install", "--no-cache-dir", "--no-index", "--find-links", tmpdir]
if root:
args += ["--root", root]
@@ -103,7 +103,7 @@ Index: Python-3.14.0rc1/Lib/ensurepip/__init__.py
if upgrade:
args += ["--upgrade"]
if user:
-@@ -238,6 +240,11 @@
+@@ -247,6 +249,11 @@
help="Install everything relative to this alternate root directory.",
)
parser.add_argument(
@@ -115,7 +115,7 @@ Index: Python-3.14.0rc1/Lib/ensurepip/__init__.py
"--altinstall",
action="store_true",
default=False,
-@@ -256,6 +263,7 @@
+@@ -265,6 +272,7 @@
return _bootstrap(
root=args.root,
@@ -123,11 +123,11 @@ Index: Python-3.14.0rc1/Lib/ensurepip/__init__.py
upgrade=args.upgrade,
user=args.user,
verbosity=args.verbosity,
-Index: Python-3.14.0rc1/Lib/test/test_ensurepip.py
+Index: Python-3.15.0a1/Lib/test/test_ensurepip.py
===================================================================
---- Python-3.14.0rc1.orig/Lib/test/test_ensurepip.py 2025-07-23 10:10:19.969641992 +0200
-+++ Python-3.14.0rc1/Lib/test/test_ensurepip.py 2025-07-23 10:10:31.691217643 +0200
-@@ -100,6 +100,17 @@
+--- Python-3.15.0a1.orig/Lib/test/test_ensurepip.py 2025-10-24 23:53:23.546712597 +0200
++++ Python-3.15.0a1/Lib/test/test_ensurepip.py 2025-10-24 23:53:43.588286136 +0200
+@@ -105,6 +105,17 @@
unittest.mock.ANY,
)
@@ -145,11 +145,11 @@ Index: Python-3.14.0rc1/Lib/test/test_ensurepip.py
def test_bootstrapping_with_user(self):
ensurepip.bootstrap(user=True)
-Index: Python-3.14.0rc1/Makefile.pre.in
+Index: Python-3.15.0a1/Makefile.pre.in
===================================================================
---- Python-3.14.0rc1.orig/Makefile.pre.in 2025-07-23 10:10:27.325708066 +0200
-+++ Python-3.14.0rc1/Makefile.pre.in 2025-07-23 10:10:31.691716104 +0200
-@@ -2371,7 +2371,7 @@
+--- Python-3.15.0a1.orig/Makefile.pre.in 2025-10-24 23:53:39.419910772 +0200
++++ Python-3.15.0a1/Makefile.pre.in 2025-10-24 23:53:43.588889640 +0200
+@@ -2378,7 +2378,7 @@
install|*) ensurepip="" ;; \
esac; \
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
@@ -158,7 +158,7 @@ Index: Python-3.14.0rc1/Makefile.pre.in
fi
.PHONY: altinstall
-@@ -2382,7 +2382,7 @@
+@@ -2389,7 +2389,7 @@
install|*) ensurepip="--altinstall" ;; \
esac; \
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
@@ -167,9 +167,9 @@ Index: Python-3.14.0rc1/Makefile.pre.in
fi
.PHONY: commoninstall
-Index: Python-3.14.0rc1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
+Index: Python-3.15.0a1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ Python-3.14.0rc1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst 2025-07-23 10:10:31.692253536 +0200
++++ Python-3.15.0a1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst 2025-10-24 23:53:43.589498870 +0200
@@ -0,0 +1 @@
+A directory prefix can now be specified when using :mod:`ensurepip`.
diff --git a/fix-test-recursion-limit-15.6.patch b/fix-test-recursion-limit-15.6.patch
index 59d2d51..77ee587 100644
--- a/fix-test-recursion-limit-15.6.patch
+++ b/fix-test-recursion-limit-15.6.patch
@@ -2,10 +2,10 @@
Lib/test/test_compile.py | 5 +++++
1 file changed, 5 insertions(+)
-Index: Python-3.14.0b3/Lib/test/test_compile.py
+Index: Python-3.15.0a1/Lib/test/test_compile.py
===================================================================
---- Python-3.14.0b3.orig/Lib/test/test_compile.py 2025-06-22 00:32:01.975698954 +0200
-+++ Python-3.14.0b3/Lib/test/test_compile.py 2025-06-22 00:32:07.740981155 +0200
+--- Python-3.15.0a1.orig/Lib/test/test_compile.py 2025-10-24 23:53:23.250923195 +0200
++++ Python-3.15.0a1/Lib/test/test_compile.py 2025-10-24 23:53:52.578315707 +0200
@@ -24,6 +24,9 @@
from test.support.bytecode_helper import instructions_with_positions
from test.support.os_helper import FakePath
@@ -24,7 +24,7 @@ Index: Python-3.14.0b3/Lib/test/test_compile.py
@support.skip_emscripten_stack_overflow()
def test_extended_arg(self):
repeat = 100
-@@ -709,6 +713,7 @@
+@@ -724,6 +728,7 @@
@support.cpython_only
@unittest.skipIf(support.is_wasi, "exhausts limited stack on WASI")
diff --git a/gh138131-exclude-pycache-from-digest.patch b/gh138131-exclude-pycache-from-digest.patch
deleted file mode 100644
index c5e371d..0000000
--- a/gh138131-exclude-pycache-from-digest.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 4bb41b28d5bac09bccd636d8c5fefe1a462f63a7 Mon Sep 17 00:00:00 2001
-From: Alm
-Date: Mon, 25 Aug 2025 08:56:38 +0300
-Subject: [PATCH 1/4] Exclude .pyc files from the computed digest in the jit
- stencils
-
----
- Tools/jit/_targets.py | 3 +++
- 1 file changed, 3 insertions(+)
-
-Index: Python-3.14.0rc2/Tools/jit/_targets.py
-===================================================================
---- Python-3.14.0rc2.orig/Tools/jit/_targets.py
-+++ Python-3.14.0rc2/Tools/jit/_targets.py
-@@ -69,6 +69,9 @@ class _Target(typing.Generic[_S, _R]):
- hasher.update(PYTHON_EXECUTOR_CASES_C_H.read_bytes())
- hasher.update((self.pyconfig_dir / "pyconfig.h").read_bytes())
- for dirpath, _, filenames in sorted(os.walk(TOOLS_JIT)):
-+ # Exclude cache files from digest computation to ensure reproducible builds.
-+ if dirpath.endswith("__pycache__"):
-+ continue
- for filename in filenames:
- hasher.update(pathlib.Path(dirpath, filename).read_bytes())
- return hasher.hexdigest()
-Index: Python-3.14.0rc2/Misc/NEWS.d/next/Build/2025-08-27-09-52-45.gh-issue-138061.fMVS9w.rst
-===================================================================
---- /dev/null
-+++ Python-3.14.0rc2/Misc/NEWS.d/next/Build/2025-08-27-09-52-45.gh-issue-138061.fMVS9w.rst
-@@ -0,0 +1 @@
-+Ensure reproducible builds by making JIT stencil header generation deterministic.
diff --git a/gh139257-Support-docutils-0.22.patch b/gh139257-Support-docutils-0.22.patch
index 9e26f6f..cdbaf5b 100644
--- a/gh139257-Support-docutils-0.22.patch
+++ b/gh139257-Support-docutils-0.22.patch
@@ -7,12 +7,12 @@ Subject: [PATCH 1/2] gh-139257: Support docutils >= 0.22
Doc/tools/extensions/pyspecific.py | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
-Index: Python-3.14.0/Doc/tools/extensions/pyspecific.py
+Index: Python-3.15.0a1/Doc/tools/extensions/pyspecific.py
===================================================================
---- Python-3.14.0.orig/Doc/tools/extensions/pyspecific.py
-+++ Python-3.14.0/Doc/tools/extensions/pyspecific.py
-@@ -25,11 +25,21 @@ from sphinx.util.docutils import SphinxD
- SOURCE_URI = 'https://github.com/python/cpython/tree/3.14/%s'
+--- Python-3.15.0a1.orig/Doc/tools/extensions/pyspecific.py 2025-10-14 12:46:08.000000000 +0200
++++ Python-3.15.0a1/Doc/tools/extensions/pyspecific.py 2025-10-24 23:55:02.700550007 +0200
+@@ -25,11 +25,21 @@
+ SOURCE_URI = 'https://github.com/python/cpython/tree/main/%s'
# monkey-patch reST parser to disable alphabetic and roman enumerated lists
+def _disable_alphabetic_and_roman(text):
diff --git a/python-3.3.0b1-fix_date_time_compiler.patch b/python-3.3.0b1-fix_date_time_compiler.patch
index 6f21f15..7f1b240 100644
--- a/python-3.3.0b1-fix_date_time_compiler.patch
+++ b/python-3.3.0b1-fix_date_time_compiler.patch
@@ -2,11 +2,11 @@
Makefile.pre.in | 5 +++++
1 file changed, 5 insertions(+)
-Index: Python-3.14.0rc1/Makefile.pre.in
+Index: Python-3.15.0a1/Makefile.pre.in
===================================================================
---- Python-3.14.0rc1.orig/Makefile.pre.in 2025-07-22 18:42:44.000000000 +0200
-+++ Python-3.14.0rc1/Makefile.pre.in 2025-07-23 10:10:27.325708066 +0200
-@@ -1910,6 +1910,11 @@
+--- Python-3.15.0a1.orig/Makefile.pre.in 2025-10-14 12:46:08.000000000 +0200
++++ Python-3.15.0a1/Makefile.pre.in 2025-10-24 23:53:39.419910772 +0200
+@@ -1917,6 +1917,11 @@
-DGITBRANCH="\"`LC_ALL=C $(GITBRANCH)`\"" \
-o $@ $(srcdir)/Modules/getbuildinfo.c
diff --git a/python314-rpmlintrc b/python315-rpmlintrc
similarity index 100%
rename from python314-rpmlintrc
rename to python315-rpmlintrc
diff --git a/python314.changes b/python315.changes
similarity index 86%
rename from python314.changes
rename to python315.changes
index adbebc6..6521080 100644
--- a/python314.changes
+++ b/python315.changes
@@ -1,3 +1,1746 @@
+-------------------------------------------------------------------
+Fri Oct 24 21:45:47 UTC 2025 - Matej Cepl
+
+- New development of new major version, update to 3.15.0~a1:
+ - Tools/Demos
+ - gh-139330: SBOM generation tool didn’t cross-check
+ the version and checksum values against the
+ Modules/expat/refresh.sh script, leading to the values
+ becoming out-of-date during routine updates.
+ - gh-132006: XCframeworks now include privacy manifests to
+ satisfy Apple App Store submission requirements.
+ - gh-138171: A script for building an iOS XCframework was
+ added. As part of this change, the top level iOS folder has
+ been moved to be a subdirectory of the Apple folder.
+ - gh-137873: The iOS test runner has been simplified,
+ resolving some issues that have been observed using
+ the runner in GitHub Actions and Azure Pipelines test
+ environments.
+ - gh-137484: Have Tools/wasm/wasi put the build Python into a
+ directory named after the build triple instead of “build”.
+ - gh-137025: The wasm_build.py script has been removed.
+ Tools/wasm/emscripten and Tools/wasm/wasi should be used
+ instead, as described in the Dev Guide.
+ - gh-137248: Add a --logdir option to Tools/wasm/wasi for
+ specifying where to write log files.
+ - gh-137243: Have Tools/wasm/wasi detect a WASI SDK install
+ in /opt when it was directly extracted from a release
+ tarball.
+ - gh-136251: Fixes and usability improvements for
+ Tools/wasm/emscripten/web_example
+ - gh-135968: Stubs for strip are now provided as part of an
+ iOS install.
+ - gh-135379: The cases generator no longer accepts type
+ annotations on stack items. Conversions to non-default
+ types are now done explicitly in bytecodes.c and
+ optimizer_bytecodes.c. This will simplify code generation
+ for top-of-stack caching and other future features.
+ - gh-134215: REPL import autocomplete only suggests private
+ modules when explicitly specified.
+ - Tests
+ - gh-139208: Fix regrtest --fast-ci --verbose: don’t ignore
+ the --verbose option anymore. Patch by Victor Stinner.
+ - gh-138313: Restore skipped test and add janky workaround
+ to prevent select buildbots from failing with a
+ ResourceWarning.
+ - gh-135966: The iOS testbed now handles the app_packages
+ folder as a site directory.
+ - gh-135494: Fix regrtest to support excluding tests from
+ --pgo tests. Patch by Victor Stinner.
+ - gh-132815: Fix test__opcode: add JUMP_BACKWARD to
+ specialization stats.
+ - gh-135489: Show verbose output for failing tests during PGO
+ profiling step with –enable-optimizations.
+ - gh-135401: Add a new GitHub CI job to test the ssl module
+ with AWS-LC as the backing cryptography and TLS library.
+ - gh-135120: Add test.support.subTests().
+ - gh-134567: Expose log formatter to users in
+ TestCase.assertLogs. unittest.TestCase.assertLogs() will
+ now optionally accept a formatter that will be used to
+ format the strings in output if provided.
+ - gh-133744: Fix multiprocessing interrupt test. Add an event
+ to synchronize the parent process with the child process:
+ wait until the child process starts sleeping. Patch by
+ Victor Stinner.
+ - gh-133682: Fixed test case
+ test.test_annotationlib.TestStringFormat.test_displays
+ which ensures proper handling of complex data structures
+ (lists, sets, dictionaries, and tuples) in string
+ annotations.
+ - gh-133639: Fix
+ TestPyReplAutoindent.test_auto_indent_default() doesn’t run
+ input_code.
+ - Security
+ - gh-139700: Check consistency of the zip64 end of central
+ directory record. Support records with “zip64 extensible
+ data” if there are no bytes prepended to the ZIP file.
+ - gh-139400: xml.parsers.expat: Make sure that parent
+ Expat parsers are only garbage-collected once they
+ are no longer referenced by subparsers created by
+ ExternalEntityParserCreate(). Patch by Sebastian Pipping.
+ - gh-139283: sqlite3: correctly handle maximum number of rows
+ to fetch in Cursor.fetchmany and reject negative values for
+ Cursor.arraysize. Patch by Bénédikt Tran.
+ - gh-136053: marshal: fix a possible crash when deserializing
+ slice objects.
+ - gh-135661: Fix parsing start and end tags in
+ html.parser.HTMLParser according to the HTML5 standard.
+ - Whitespaces no longer accepted between and the tag
+ name. E.g. script> does not end the script section.
+ - Vertical tabulation (\v) and non-ASCII whitespaces no
+ longer recognized as whitespaces. The only whitespaces
+ are \t\n\r\f and space.
+ - Null character (U+0000) no longer ends the tag name.
+ - Attributes and slashes after the tag name in end tags are
+ now ignored, instead of terminating after the first > in
+ quoted attribute value. E.g. "/>.
+ - Multiple slashes and whitespaces between the last
+ attribute and closing > are now ignored in both start and
+ end tags. E.g. .
+ - Multiple = between attribute name and value are no longer
+ collapsed. E.g. produces attribute “foo”
+ with value “=bar”.
+ - gh-135661: Fix CDATA section parsing in
+ html.parser.HTMLParser according to the HTML5 standard: ]
+ ]> and ]] > no longer end the CDATA section. Add private
+ method _set_support_cdata() which can be used to specify
+ how to parse <[CDATA[ — as a CDATA section in foreign
+ content (SVG or MathML) or as a bogus comment in the HTML
+ namespace.
+ - gh-102555: Fix comment parsing in html.parser.HTMLParser
+ according to the HTML5 standard. --!> now ends the comment.
+ -- > no longer ends the comment. Support abnormally ended
+ empty comments <--> and <--->.
+ - gh-135462: Fix quadratic complexity in processing specially
+ crafted input in html.parser.HTMLParser. End-of-file errors
+ are now handled according to the HTML5 specs – comments and
+ declarations are automatically closed, tags are ignored.
+ - gh-118350: Fix support of escapable raw text mode (elements
+ “textarea” and “title”) in html.parser.HTMLParser.
+ - gh-135034: Fixes multiple issues that allowed tarfile
+ extraction filters (filter="data" and filter="tar") to be
+ bypassed using crafted symlinks and hard links.
+ - Addresses CVE 2024-12718, CVE 2025-4138, CVE 2025-4330, and
+ CVE 2025-4517.
+ - gh-133767: Fix use-after-free in the “unicode-escape”
+ decoder with a non-“strict” error handler.
+ - gh-133623: Indicate through ssl.HAS_PSK_TLS13 whether
+ the ssl module supports “External PSKs” in TLSv1.3, as
+ described in RFC 9258. Patch by Will Childs-Klein.
+ - gh-128840: Short-circuit the processing of long IPv6
+ addresses early in ipaddress to prevent excessive memory
+ consumption and a minor denial-of-service.
+ - Library
+ - gh-139482: Optimize os.environ.clear() by calling
+ clearenv(3) when this function is available. Patch by
+ Victor Stinner.
+ - gh-139958: The application/toml mime type is now supported
+ by mimetypes. Patch by Gil Forcada.
+ - gh-139823: ensurepip now fails with a nicer error message
+ when the zlib module is not available.
+ - gh-139905: Add suggestion to error message for
+ typing.Generic subclasses when cls.__parameters__
+ is missing due to a parent class failing to call
+ super().__init_subclass__() in its __init_subclass__.
+ - gh-139894: Fix incorrect sharing of current task with the
+ child process while forking in asyncio. Patch by Kumar
+ Aditya.
+ - gh-139845: Fix to not print KeyboardInterrupt twice in
+ default asyncio REPL.
+ - gh-139783: Fix inspect.getsourcelines() for the case when a
+ decorator is followed by a comment or an empty line.
+ - gh-139809: Prevent premature colorization of subparser prog
+ in argparse.ArgumentParser.add_subparsers() to respect
+ color environment variable changes after parser creation.
+ - gh-139736: Fix excessive indentation in the default
+ argparse HelpFormatter. Patch by Alexander Edland.
+ - gh-70765: http.server: fix default handling of HTTP/0.9
+ requests in BaseHTTPRequestHandler. Previously,
+ BaseHTTPRequestHandler.parse_request() incorrectly waited
+ for headers in the request although those are not supported
+ in HTTP/0.9. Patch by Bénédikt Tran.
+ - gh-139322: Fix os.getlogin() error handling: fix the error
+ number. Patch by Victor Stinner.
+ - gh-135953: Add a Gecko format output to the tachyon
+ profiler via --gecko.
+ - gh-139184: os.forkpty() does now make the returned file
+ descriptor non-inheritable.
+ - gh-139391: Fix an issue when, on non-Windows platforms, it
+ was not possible to gracefully exit a python -m asyncio
+ process suspended by Ctrl+Z and later resumed by fg other
+ than with kill.
+ - gh-139374: timeit: Add color to error tracebacks.
+ - gh-90949: Add
+ SetBillionLaughsAttackProtectionActivationThreshold() and
+ SetBillionLaughsAttackProtectionMaximumAmplification()
+ to xmlparser objects to tune protections against billion
+ laughs attacks. Patch by Bénédikt Tran.
+ - gh-139312: Upgrade bundled libexpat to 2.7.3
+ - gh-139289: Do a real lazy-import on rlcompleter in pdb and
+ restore the existing completer after importing rlcompleter.
+ - gh-90949: Add SetAllocTrackerActivationThreshold() and
+ SetAllocTrackerMaximumAmplification() to xmlparser objects
+ to tune protections against disproportional amounts of
+ dynamic memory usage from within an Expat parser. Patch by
+ Bénédikt Tran.
+ - gh-67795: Functions that take timestamp or timeout
+ arguments now accept any real numbers (such as Decimal and
+ Fraction), not only integers or floats, although this does
+ not improve precision.
+ - gh-95953: A CSS class, diff_changed, was added to the
+ changed lines in the make_table output of difflib.HtmlDiff.
+ Patch by Katie Gardner.
+ - gh-139210: Fix use-after-free when reporting unknown event
+ in xml.etree.ElementTree.iterparse(). Patch by Ken Jin.
+ - gh-138860: Lazy import rlcompleter in pdb to avoid deadlock
+ in subprocess.
+ - gh-112729: Fix crash when calling
+ concurrent.interpreters.create() when the process is out of
+ memory.
+ - gh-126016: Fix an assertion failure when sending
+ KeyboardInterrupt to a Python process running a
+ subinterpreter in a separate thread.
+ - gh-118803: collections.abc.ByteString has been removed from
+ collections.abc.__all__, and typing.ByteString has been
+ removed from typing.__all__. The former has been deprecated
+ since Python 3.12, and the latter has been deprecated since
+ Python 3.9. Both classes are scheduled for removal in
+ Python 3.17.
+ - Additionally, the following statements now cause
+ DeprecationWarnings to be emitted at runtime:
+ from collections.abc import ByteString, from
+ typing import ByteString, import collections.abc;
+ collections.abc.ByteString and import typing;
+ typing.ByteString. Both classes already caused
+ DeprecationWarnings to be emitted if they were subclassed
+ or used as the second argument to isinstance() or
+ issubclass(), but they did not previously lead to
+ DeprecationWarnings if they were merely imported or
+ accessed from their respective modules.
+ - gh-135729: Fix unraisable exception during finalization
+ when using concurrent.interpreters in the REPL.
+ - gh-139076: Fix a bug in the pydoc module that was hiding
+ functions in a Python module if they were implemented in an
+ extension module and the module did not have __all__.
+ - gh-139090: Add os.RWF_DONTCACHE constant for Linux 6.14+.
+ - gh-139065: Fix trailing space before a wrapped long word if
+ the line length is exactly width in textwrap.
+ - gh-139001: Fix race condition in pathlib.Path on the
+ internal _raw_paths field.
+ - gh-138813: multiprocessing.BaseProcess defaults kwargs to
+ None instead of a shared dictionary.
+ - gh-138998: Update bundled libexpat to 2.7.2
+ - gh-138993: Dedent credits text.
+ - gh-118803: Add back collections.abc.ByteString and
+ typing.ByteString. Both had been removed in prior alpha,
+ beta and release candidates for Python 3.14, but their
+ removal has now been postponed to Python 3.17.
+ - gh-130567: Fix possible crash in locale.strxfrm() due to a
+ platform bug on macOS.
+ - gh-137226: Fix typing.get_type_hints() calls on generic
+ typing.TypedDict classes defined with string annotations.
+ - gh-138899: Executing quit command in pdb will raise
+ bdb.BdbQuit when pdb is started from an asyncio console
+ using breakpoint() or pdb.set_trace().
+ - gh-138804: Raise TypeError instead of AttributeError when
+ an argument of incorrect type is passed to shlex.quote().
+ This restores the behavior of the function prior to 3.14.
+ - gh-138779: Support device numbers larger than 2**63-1 for
+ the st_rdev field of the os.stat_result structure.
+ - gh-138682: Added symmetric difference support to
+ collections.Counter objects.
+ - gh-138712: Add os.NODEV.
+ - gh-128636: Fix crash in PyREPL when os.environ is
+ overwritten with an invalid value for mac
+ - gh-138720: Fix an issue where io.BufferedWriter and
+ io.BufferedRandom had different definitions of “closed” for
+ close() and flush() which resulted in an exception when
+ close called flush but flush thought the file was already
+ closed.
+ - gh-138706: Update unicodedata database to Unicode 17.0.0.
+ - gh-76007: Deprecate __version__ from a number of standard
+ library modules. Patch by Hugo van Kemenade.
+ - gh-138535: Speed up os.stat() for files with reasonable
+ timestamps. Contributed by Jeffrey Bosboom.
+ - gh-116946: curses.panel: the type of
+ curses.panel.new_panel() is now immutable. Patch by
+ Bénédikt Tran.
+ - gh-116946: zlib: the types of zlib.compressobj() and
+ zlib.decompressobj() are now immutable. Patch by Bénédikt
+ Tran.
+ - gh-116946: os: the os.DirEntry type and the type of
+ os.scandir() are now immutable. Patch by Bénédikt Tran.
+ - gh-116946: tkinter: the types _tkinter.Tcl_Obj (wrapper
+ for Tcl objects), _tkinter.tktimertoken (obtained by
+ calling createtimerhandler() on a Tk application) and
+ _tkinter.tkapp (the runtime type of Tk applications) are
+ now immutable. Patch by Bénédikt Tran.
+ - gh-138514: Raise ValueError when a multi-character string
+ is passed to the echo_char parameter of getpass.getpass().
+ Patch by Benjamin Johnson.
+ - gh-137706: Fix the partial evaluation of annotations that
+ use typing.Annotated[T, x] where T is a forward reference.
+ - gh-88375: Fix normalization of the robots.txt rules and
+ URLs in the urllib.robotparser module. No longer ignore
+ trailing ?. Distinguish raw special characters ?, = and &
+ from the percent-encoded ones.
+ - gh-138515: email is added to Emscripten build.
+ - gh-99948: ctypes.util.find_library() now works in
+ Emscripten build.
+ - gh-111788: Fix parsing errors in the urllib.robotparser
+ module. Don’t fail trying to parse weird paths. Don’t fail
+ trying to decode non-UTF-8 robots.txt files.
+ - gh-138432: zoneinfo.reset_tzpath() will now convert any
+ os.PathLike objects it receives into strings before adding
+ them to TZPATH. It will raise TypeError if anything other
+ than a string is found after this conversion. If given an
+ os.PathLike object that represents a relative path, it will
+ now raise ValueError instead of TypeError, and present a
+ more informative error message.
+ - gh-132657: Improve the scaling of copy.copy() and
+ copy.deepcopy() in the free-threading build.
+ - gh-116946: The types of select.poll() and select.epoll()
+ objects are now immutable. Patch by Bénédikt Tran.
+ - gh-116946: The _random.Random C type is now immutable.
+ Patch by Bénédikt Tran.
+ - gh-57911: When extracting tar files on Windows, slashes in
+ symlink targets will be replaced by backslashes to prevent
+ corrupted links.
+ - gh-138205: Removed the resize() method on platforms that
+ don’t support the underlying syscall, instead of raising a
+ SystemError.
+ - gh-138008: Fix segmentation faults in the ctypes module due
+ to invalid argtypes. Patch by Dung Nguyen.
+ - gh-138252: ssl: SSLContext objects can now set client and
+ server TLS signature algorithms. If Python has been built
+ with OpenSSL 3.5 or later, SSLSocket objects can return the
+ signature algorithms selected on a connection.
+ - gh-138253: Add the block parameter in the put() and
+ get() methods of the concurrent.interpreters queues for
+ compatibility with the queue.Queue interface.
+ - gh-60462: Fix locale.strxfrm() on Solaris (and possibly
+ other platforms).
+ - gh-138239: The REPL now highlights type as a soft keyword
+ in type statements.
+ - gh-78502: mmap.mmap now has a trackfd parameter on Windows;
+ if it is False, the file handle corresponding to fileno
+ will not be duplicated.
+ - gh-138204: Forbid expansion of shared anonymous memory maps
+ on Linux, which caused a bus error.
+ - gh-138010: Fix an issue where defining a class with a
+ @warnings.deprecated-decorated base class may not invoke
+ the correct __init_subclass__() method in cases involving
+ multiple inheritance. Patch by Brian Schubert.
+ - gh-134716: Add support of regular expressions in the -W
+ option and the PYTHONWARNINGS environment variable.
+ - gh-138133: Prevent infinite traceback loop when sending
+ CTRL^C to Python through strace.
+ - gh-138122: Implement PEP 799 – A dedicated profiling
+ package for organizing Python profiling tools. Patch by
+ Pablo Galindo.
+ - gh-138092: Fixed a bug in mmap.mmap.flush() where calling
+ with only an offset parameter would fail.
+ - gh-138044: Remove compatibility shim for deprecated
+ parameter package in importlib.resources.files(). Patch by
+ Semyon Moroz.
+ - gh-86819: socket: Add missing constants for ISO-TP sockets.
+ - gh-137884: Add threading.get_native_id() support for
+ Illumos/Solaris. Patch by Yüce Tekol.
+ - gh-134869: Fix an issue where pressing Ctrl+C during tab
+ completion in the REPL would leave the autocompletion menu
+ in a corrupted state.
+ - gh-137840: typing.TypedDict now supports the closed and
+ extra_items keyword arguments (as described in PEP 728) to
+ control whether additional non-required keys are allowed
+ and to specify their value type.
+ - gh-132947: Applied changes to importlib.metadata from
+ importlib_metadata 8.7, including dist now disallowed
+ for EntryPoints.select; deferred imports for faster
+ import times; added support for metadata with newlines
+ (python/cpython#119650); and metadata() function now
+ returns None when a metadata directory is present but no
+ metadata is present.
+ - gh-90548: Fix musl detection for platform.libc_ver() on
+ Alpine Linux if compiled with –strip-all.
+ - gh-137317: inspect.signature() now correctly handles
+ classes that use a descriptor on a wrapped __init__() or
+ __new__() method. Contributed by Yongyu Yan.
+ - gh-137754: Fix import of the zoneinfo module if the C
+ implementation of the datetime module is not available.
+ - gh-125854: Improve error messages for invalid category in
+ warnings.warn().
+ - gh-137729: locale.setlocale() now supports language codes
+ with @-modifiers. @-modifier are no longer silently removed
+ in locale.getlocale(), but included in the language code.
+ - gh-73487: Speedup processing arguments (up to 1.5x) in
+ the decimal module methods, that now using METH_FASTCALL
+ calling convention. Patch by Sergey B Kirpichev.
+ - gh-137634: Calendar pages generated by the
+ calendar.HTMLCalendar class now support dark mode and
+ have been migrated to the HTML5 standard for improved
+ accessibility.
+ - gh-137630: The _interpreters module now uses Argument
+ Clinic to parse arguments. Patch by Adam Turner.
+ - gh-137583: Fix a deadlock introduced in 3.13.6 when a call
+ to ssl.SSLSocket.recv was blocked in one thread, and then
+ another method on the object (such as ssl.SSLSocket.send)
+ was subsequently called in another thread.
+ - gh-92936: Update regex used by http.cookies.SimpleCookie to
+ handle values containing double quotes.
+ - gh-137426: Remove the code deprecation of
+ importlib.abc.ResourceLoader. It is documented as
+ deprecated, but left for backwards compatibility with other
+ classes in importlib.abc.
+ - gh-137490: Handle ECANCELED in the same way as EINTR in
+ signal.sigwaitinfo() on NetBSD.
+ - gh-137512: Add new constants in the resource module:
+ RLIMIT_NTHR, RLIMIT_UMTXP, RLIMIT_PIPEBUF, RLIMIT_THREADS,
+ RLIM_SAVED_CUR, and RLIM_SAVED_MAX.
+ - gh-137044: resource.RLIM_INFINITY is now always a positive
+ integer. On all supported platforms, it is larger than any
+ limited resource value, which simplifies comparison of the
+ resource values. Previously, it could be negative, such as
+ -1 or -3, depending on platform.
+ - gh-137477: Fix inspect.getblock(), inspect.getsourcelines()
+ and inspect.getsource() for generator expressions.
+ - gh-137481: Calendar uses the lengths of the locale’s
+ weekdays to decide if the width requires abbreviation.
+ - gh-137466: Remove undocumented glob.glob0() and
+ glob.glob1() functions, which have been deprecated since
+ Python 3.13. Use glob.glob() and pass a directory to its
+ root_dir argument instead.
+ - gh-137044: Return large limit values as positive integers
+ instead of negative integers in resource.getrlimit().
+ Accept large values and reject negative values (except
+ RLIM_INFINITY) for limits in resource.setrlimit().
+ - gh-115766: Fix ipaddress.IPv4Interface.is_unspecified.
+ - gh-75989: tarfile.TarFile.extractall() and
+ tarfile.TarFile.extract() now overwrite symlinks when
+ extracting hardlinks. (Contributed by Alexander Enrique
+ Urieles Nieto in gh-75989.)
+ - gh-137017: Fix threading.Thread.is_alive to remain True
+ until the underlying OS thread is fully cleaned up. This
+ avoids false negatives in edge cases involving thread
+ monitoring or premature threading.Thread.is_alive calls.
+ - gh-137273: Fix debug assertion failure in
+ locale.setlocale() on Windows.
+ - gh-137191: Fix how type parameters are collected, when
+ typing.Protocol are specified with explicit parameters.
+ Now, typing.Generic and typing.Protocol always dictate the
+ parameter number and parameter ordering of types. Previous
+ behavior was a bug.
+ - gh-137282: Fix tab completion and dir() on
+ concurrent.futures.
+ - gh-137257: Bump the version of pip bundled in ensurepip to
+ version 25.2
+ - gh-137239: heapq: Update heapq.__all__ with *_max
+ functions.
+ - gh-124503: ast.literal_eval() is 10-20% faster for small
+ inputs.
+ - gh-137226: Fix behavior of
+ annotationlib.ForwardRef.evaluate() when the type_params
+ parameter is passed and the name of a type param is also
+ present in an enclosing scope.
+ - gh-137197: SSLContext objects can now set TLS 1.3 cipher
+ suites via set_ciphersuites().
+ - gh-81325: tarfile.TarFile now accepts a path-like when
+ working on a tar archive. (Contributed by Alexander Enrique
+ Urieles Nieto in gh-81325.)
+ - gh-137185: Fix a potential async-signal-safety issue in
+ faulthandler when printing C stack traces.
+ - gh-133951: Remove lib64-lib symlink creation when creating
+ new virtual environments in venv module
+ - gh-130522: Fix unraisable TypeError raised during
+ interpreter shutdown in the threading module.
+ - gh-137059: Fix handling of file URLs with a
+ Windows drive letter in the URL authority by
+ urllib.request.url2pathname(). This fixes a regression in
+ earlier pre-releases of Python 3.14.
+ - gh-136980: Remove unused C tracing code in bdb for event
+ type c_call, c_return and c_exception
+ - gh-130577: tarfile now validates archives to ensure member
+ offsets are non-negative. (Contributed by Alexander Enrique
+ Urieles Nieto in gh-130577.)
+ - gh-136170: Removed the unreleased
+ zipfile.ZipFile.data_offset property added in 3.14.0a7 as
+ it wasn’t fully clear which behavior it should have in some
+ situations so the result was not always what a user might
+ expect.
+ - gh-121237: Support %:z directive for
+ datetime.datetime.strptime(), datetime.time.strptime() and
+ time.strptime(). Patch by Lucas Esposito and Semyon Moroz.
+ - gh-136929: Ensure that hash functions guaranteed to be
+ always available exist as attributes of hashlib even if
+ they will not work at runtime due to missing backend
+ implementations. For instance, hashlib.md5 will no longer
+ raise AttributeError if OpenSSL is not available and Python
+ has been built without MD5 support. Patch by Bénédikt Tran.
+ - gh-124621: pyrepl now works in Emscripten.
+ - gh-136914: Fix retrieval of doctest.DocTest.lineno
+ for objects decorated with functools.cache() or
+ functools.cached_property.
+ - gh-136912: hmac.digest() now properly handles large
+ keys and messages by falling back to the pure Python
+ implementation when necessary. Patch by Bénédikt Tran.
+ - gh-83424: Allows creating a ctypes.CDLL without name when
+ passing a handle as an argument.
+ - gh-135228: When dataclasses replaces a class with a slotted
+ dataclass, the original class can now be garbage collected
+ again. Earlier changes in Python 3.14 caused this class to
+ always remain in existence together with the replacement
+ class synthesized by dataclasses.
+ - gh-136874: Discard URL query and fragment in
+ urllib.request.url2pathname().
+ - gh-136787: hashlib: improve exception messages when a
+ hash algorithm is not recognized, blocked by the current
+ security policy or incompatible with the desired operation
+ (for instance, using HMAC with SHAKE). Patch by Bénédikt
+ Tran.
+ - gh-130645: Enable color help by default in argparse.
+ - gh-131724: In http.client, a new max_response_headers
+ keyword-only parameter has been added to HTTPConnection
+ and HTTPSConnection constructors. This parameter sets the
+ maximum number of allowed response headers, helping to
+ prevent denial-of-service attacks.
+ - gh-135427: With -Werror, the DeprecationWarning emitted
+ by os.fork() and os.forkpty() in mutli-threaded processes
+ is now raised as an exception. Previously it was silently
+ ignored. Patch by Rani Pinchuk.
+ - gh-136234: Fix asyncio.WriteTransport.writelines() to be
+ robust to connection failure, by using the same behavior as
+ write().
+ - gh-53144: encodings.aliases: Add latin_N aliases
+ - gh-136669: _asyncio is now statically linked for improved
+ performance.
+ - gh-136134: SMTP.auth_cram_md5() now raises an SMTPException
+ instead of a ValueError if Python has been built without
+ MD5 support. In particular, SMTP clients will not attempt
+ to use this method even if the remote server is assumed to
+ support it. Patch by Bénédikt Tran.
+ - gh-136134: IMAP4.login_cram_md5 now raises an IMAP4.error
+ if CRAM-MD5 authentication is not supported. Patch by
+ Bénédikt Tran.
+ - gh-136591: _hashlib: avoid using deprecated functions
+ ERR_func_error_string and EVP_MD_CTX_md when using OpenSSL
+ 3.0 and later. Patch by Bénédikt Tran.
+ - gh-136571: datetime.date.fromisocalendar() can now raise
+ OverflowError for out of range arguments.
+ - gh-136549: Fix signature of threading.excepthook().
+ - gh-136492: Expose PEP 667’s FrameLocalsProxyType in the
+ types module.
+ - gh-83336: utf8_sig is now aliased to encodings.utf_8_sig
+ - gh-136523: Fix wave.Wave_write emitting an unraisable when
+ open raises.
+ - gh-136507: Fix mimetypes CLI to handle multiple file
+ parameters.
+ - gh-52876: Add missing keepends (default True)
+ parameter to codecs.StreamReaderWriter.readline() and
+ codecs.StreamReaderWriter.readlines().
+ - gh-136470: Correct
+ concurrent.futures.InterpreterPoolExecutor’s default thread
+ name.
+ - gh-136476: Fix a bug that was causing the
+ get_async_stack_trace function to miss some frames in the
+ stack trace.
+ - gh-136434: Fix docs generation of UnboundItem in
+ concurrent.interpreters when running with -OO.
+ - gh-136380: Raises AttributeError when accessing
+ concurrent.futures.InterpreterPoolExecutor and
+ subinterpreters are not available.
+ - gh-72327: Suggest using the system command prompt when pip
+ install is typed into the REPL. Patch by Tom Viner, Richard
+ Si, and Brian Schubert.
+ - gh-135953: Implement a new high-frequency runtime
+ profiler that leverages the existing remote debugging
+ functionality to collect detailed execution statistics
+ from running Python processes. This tool is exposed in the
+ profile.sample module and enables non-intrusive observation
+ of production applications by attaching to already-running
+ processes without requiring any code modifications,
+ restarts, or special startup flags. The observer can
+ perform extremely high-frequency sampling of stack traces
+ and interpreter state, providing detailed runtime execution
+ analysis of live applications.
+ - gh-136021: Make type_params parameter required in
+ typing._eval_type() after a deprecation period
+ for not providing this parameter. Also remove the
+ DeprecationWarning for the old behavior.
+ - gh-136286: Fix pickling failures for protocols 0 and 1 for
+ many objects related to subinterpreters.
+ - gh-136047: Fix issues with typing when the C implementation
+ of abc is not available.
+ - gh-136316: Improve support for evaluating nested forward
+ references in typing.evaluate_forward_ref().
+ - gh-136306: ssl can now get and set groups used for key
+ agreement.
+ - gh-136156: tempfile.TemporaryFile() no longer uses
+ os.O_EXCL with os.O_TMPFILE, so it’s possible to use
+ linkat() on the file descriptor. Patch by Victor Stinner.
+ - gh-133982: Update Python implementation of io.BytesIO to be
+ thread safe.
+ - gh-136193: Improve TypeError error message, when
+ richcomparing two types.SimpleNamespace objects.
+ - gh-136097: Fix potential infinite recursion and KeyError in
+ sysconfig --generate-posix-vars.
+ - gh-85702: If zoneinfo._common.load_tzdata is given a
+ package without a resource a zoneinfo.ZoneInfoNotFoundError
+ is raised rather than a PermissionError. Patch by Victor
+ Stinner.
+ - gh-90733: Improve error messages when reporting invalid
+ parameters in hashlib.scrypt(). Patch by Bénédikt Tran.
+ - gh-134759: Fix UnboundLocalError in
+ email.message.Message.get_payload() when the payload to
+ decode is a bytes object. Patch by Kliment Lamonov.
+ - gh-136028: Fix parsing month names containing “İ” (U+0130,
+ LATIN CAPITAL LETTER I WITH DOT ABOVE) in time.strptime().
+ This affects locales az_AZ, ber_DZ, ber_MA and crh_UA.
+ - gh-87135: Acquiring a threading.Lock or threading.RLock at
+ interpreter shutdown will raise PythonFinalizationError if
+ Python can determine that it would otherwise deadlock.
+ - gh-135995: In the palmos encoding, make byte 0x9b decode to
+ › (U+203A - SINGLE RIGHT-POINTING ANGLE QUOTATION MARK).
+ - gh-105456: Removed sre_compile, sre_constants and sre_parse
+ modules.
+ - gh-53203: Fix time.strptime() for %c and %x formats on
+ locales byn_ER, wal_ET and lzh_TW, and for %X format on
+ locales ar_SA, bg_BG and lzh_TW.
+ - gh-135878: Fixes a crash of types.SimpleNamespace on free
+ threading builds, when several threads were calling its
+ __repr__() method at the same time.
+ - gh-135853: Add math.fmax() and math.fmin() to get the
+ larger and smaller of two floating-point values. Patch by
+ Bénédikt Tran.
+ - gh-135836: Fix IndexError in
+ asyncio.loop.create_connection() that could occur when
+ non-OSError exception is raised during connection and
+ socket’s close() raises OSError.
+ - gh-135853: math: expose C99 signbit() function to determine
+ whether the sign bit of a floating-point value is set.
+ Patch by Bénédikt Tran.
+ - gh-134531: hmac: use the EVP_MAC(3ssl) interface for HMAC
+ when Python is built with OpenSSL 3.0 and later instead of
+ the deprecated HMAC_CTX(3ssl) interface. Patch by Bénédikt
+ Tran.
+ - gh-135836: Fix IndexError in
+ asyncio.loop.create_connection() that could occur when the
+ Happy Eyeballs algorithm resulted in an empty exceptions
+ list during connection attempts.
+ - gh-135855: Raise TypeError instead of SystemError when
+ _interpreters.set___main___attrs() is passed a non-dict
+ object. Patch by Brian Schubert.
+ - gh-135823: netrc: improve the error message when
+ the security check for the ownership of the default
+ configuration file ~/.netrc fails. Patch by Bénédikt Tran.
+ - gh-135815: netrc: skip security checks if os.getuid() is
+ missing. Patch by Bénédikt Tran.
+ - gh-135640: Address bug where it was possible to call
+ xml.etree.ElementTree.ElementTree.write() on an ElementTree
+ object with an invalid root element. This behavior blanked
+ the file passed to write if it already existed.
+ - gh-90117: Speed up pprint for list and tuple.
+ - gh-135759: hashlib: reject negative digest lengths in
+ OpenSSL-based SHAKE objects by raising a ValueError.
+ Previously, negative lengths were implicitly rejected by
+ raising a MemoryError or a SystemError. Patch by Bénédikt
+ Tran.
+ - gh-123471: Make concurrent iterations over itertools.chain
+ safe under free threading.
+ - gh-135645: Added supports_isolated_interpreters field to
+ sys.implementation.
+ - gh-135646: Raise consistent NameError exceptions in
+ annotationlib.ForwardRef.evaluate()
+ - gh-135557: Fix races on heapq updates and list reads on the
+ free threaded build.
+ - gh-119180: Only fetch globals and locals if necessary in
+ annotationlib.get_annotations()
+ - gh-135561: Fix a crash on DEBUG builds when an HACL* HMAC
+ routine fails. Patch by Bénédikt Tran.
+ - gh-135386: Fix opening a dbm.sqlite3 database for reading
+ from read-only file or directory.
+ - gh-135444: Fix asyncio.DatagramTransport.sendto() to
+ account for datagram header size when data cannot be sent.
+ - gh-65697: configparser’s error message when attempting to
+ write an invalid key is now more helpful.
+ - gh-135497: Fix os.getlogin() failing for longer usernames
+ on BSD-based platforms.
+ - gh-135487: Fix reprlib.Repr.repr_int() when given integers
+ with more than sys.get_int_max_str_digits() digits. Patch
+ by Bénédikt Tran.
+ - gh-135429: Fix the argument mismatch in _lsprof for
+ PY_THROW event.
+ - gh-135368: Fix unittest.mock.Mock generation on
+ dataclasses.dataclass() objects. Now all special attributes
+ are set as it was before gh-124429.
+ - gh-135336: json now encodes strings up to 2.2x faster
+ if they consist solely of characters that don’t require
+ escaping.
+ - gh-135335: multiprocessing: Flush stdout and stderr after
+ preloading modules in the forkserver.
+ - gh-126631: Fix multiprocessing forkserver bug which
+ prevented __main__ from being preloaded.
+ - gh-133967: Do not normalize locale name ‘C.UTF-8’ to
+ ‘en_US.UTF-8’.
+ - gh-130870: Preserve types.GenericAlias subclasses in
+ typing.get_type_hints()
+ - gh-135321: Raise a correct exception for values greater
+ than 0x7fffffff for the BINSTRING opcode in the C
+ implementation of pickle.
+ - gh-121914: Changed the names of the symbol tables for
+ lambda expressions and generator expressions to “”
+ and “” respectively to avoid conflicts with
+ user-defined names.
+ - gh-135276: Synchronized zipfile.Path with zipp 3.23,
+ including improved performance of zipfile.Path.open() for
+ non-reading modes, rely on functools.cached_property() to
+ cache values on the instance. Rely on save_method_args to
+ save the initialization method arguments. Fixed .name,
+ .stem and other basename-based properties on Windows when
+ working with a zipfile on disk.
+ - gh-135234: hashlib: improve exception messages when an
+ OpenSSL function failed. When memory allocation fails
+ on OpenSSL’s side, a MemoryError is raised instead of a
+ ValueError. Patch by Bénédikt Tran.
+ - gh-135244: uuid: when the MAC address cannot be
+ determined, the 48-bit node ID is now generated with a
+ cryptographically-secure pseudo-random number generator
+ (CSPRNG) as per RFC 9562, §6.10.3. This affects uuid1() and
+ uuid6().
+ - gh-135241: The INT opcode of the C accelerator _pickle
+ module was updated to look only for “00” and “01” to push
+ booleans onto the stack, aligning with the Python pickle
+ module.
+ - gh-133934: Improve sqlite3 CLI’s .help message.
+ - gh-135069: Fix the “Invalid error handling” exception in
+ encodings.idna.IncrementalDecoder to correctly replace the
+ ‘errors’ parameter.
+ - gh-130662: +Accept leading zeros in precision and width
+ fields for +:class:Decimal formatting, for example
+ format(Decimal(1.25), '.016f').
+ - gh-130662: Accept leading zeros in precision and
+ width fields for Fraction formatting, for example
+ format(Fraction(1, 3), '.016f').
+ - gh-135004: Rewrite and cleanup the internal _blake2 module.
+ Some exception messages were changed but their types were
+ left untouched. Patch by Bénédikt Tran.
+ - gh-134953: Expand _colorize theme with keyword_constant and
+ implement in repl.
+ - gh-134978: hashlib: Supporting the string keyword parameter
+ in hash function constructors such as new() or the direct
+ hash-named constructors such as md5() and sha256() is now
+ deprecated and slated for removal in Python 3.19. Prefer
+ passing the initial data as a positional argument for
+ maximum backwards compatibility. Patch by Bénédikt Tran.
+ - gh-134970: Fix the “unknown action” exception in
+ argparse.ArgumentParser.add_argument_group() to correctly
+ replace the action class.
+ - gh-134718: By default, omit optional Load() values in
+ ast.dump().
+ - gh-134718: ast.dump() now only omits None and [] values if
+ they are default values.
+ - gh-134939: Add the concurrent.interpreters module. See PEP
+ 734.
+ - gh-108885: Run each example as a subtest in unit
+ tests synthesized by doctest.DocFileSuite()
+ and doctest.DocTestSuite(). Add the
+ doctest.DocTestRunner.report_skip() method.
+ - gh-134885: Fix possible crash in the compression.zstd
+ module related to setting parameter types. Patch by Jelle
+ Zijlstra.
+ - gh-134857: Improve error report for doctests run with
+ unittest. Remove doctest module frames from tracebacks and
+ redundant newline character from a failure message.
+ - gh-128840: Fix parsing long IPv6 addresses with embedded
+ IPv4 address.
+ - gh-133579: curses: Consistently report failures of
+ curses C API calls in module-level methods by raising
+ a curses.error. This affects assume_default_colors(),
+ baudrate(), cbreak(), echo(), longname(), initscr(), nl(),
+ raw(), termattrs(), termname() and unctrl(). Patch by
+ Bénédikt Tran.
+ - gh-133579: curses.window.refresh() and
+ curses.window.noutrefresh() now raise a TypeError instead
+ of curses.error when called with an incorrect number of
+ arguments for pads. Patch by Bénédikt Tran.
+ - gh-133579: curses.window: Consistently report failures
+ of curses C API calls in Window methods by raising a
+ curses.error. This affects addch(), addnstr(), addstr(),
+ border(), box(), chgat(), getbkgd(), inch(), insstr() and
+ insnstr(). Patch by Bénédikt Tran.
+ - gh-134771: The time_clockid_converter() function now
+ selects correct type for clockid_t on Cygwin which fixes a
+ build error.
+ - gh-134637: Fix performance regression in calling a ctypes
+ function pointer in free threading.
+ - gh-134696: Built-in HACL* and OpenSSL implementations of
+ hash function constructors now correctly accept the same
+ documented named arguments. For instance, md5() could be
+ previously invoked as md5(data=data) or md5(string=string)
+ depending on the underlying implementation but these calls
+ were not compatible. Patch by Bénédikt Tran.
+ - gh-132710: If possible, ensure that uuid.getnode()
+ returns the same result even across different processes.
+ Previously, the result was constant only within the same
+ process. Patch by Bénédikt Tran.
+ - gh-134531: _hashlib: Rename internal C functions for
+ _hashlib.HASH and _hashlib.HASHXOF objects. Patch by
+ Bénédikt Tran.
+ - gh-134698: Fix a crash when calling methods of
+ ssl.SSLContext or ssl.SSLSocket across multiple threads.
+ - gh-134151: email: Fix TypeError in
+ email.utils.decode_params() when sorting RFC 2231
+ continuations that contain an unnumbered section.
+ - gh-134635: zlib: Allow to combine Adler-32 and CRC-32
+ checksums via adler32_combine() and crc32_combine(). Patch
+ by Callum Attryde and Bénédikt Tran.
+ - gh-134657: asyncio: Remove some private names from
+ asyncio.__all__.
+ - gh-134210: curses.window.getch() now correctly handles
+ signals. Patch by Bénédikt Tran.
+ - gh-80334: multiprocessing.freeze_support() now checks for
+ work on any “spawn” start method platform rather than only
+ on Windows.
+ - gh-134582: Fix tokenize.untokenize() round-trip errors
+ related to t-strings braces escaping
+ - gh-134580: Improved the styling of HTML diff pages
+ generated by the difflib.HtmlDiff class, and migrated the
+ output to the HTML5 standard.
+ - gh-134565: unittest.doModuleCleanups() no longer swallows
+ all but first exception raised in the cleanup code, but
+ raises a ExceptionGroup if multiple errors occurred.
+ - gh-134546: Ensure pdb remote debugging script is readable
+ by remote Python process.
+ - gh-134451: Converted asyncio.tools.CycleFoundException from
+ dataclass to a regular exception type.
+ - gh-114177: Fix asyncio to not close subprocess pipes which
+ would otherwise error out when the event loop is already
+ closed.
+ - gh-90871: Fixed an off by one error concerning the backlog
+ parameter in create_unix_server(). Contributed by Christian
+ Harries.
+ - gh-134323: Fix the threading.RLock.locked() method.
+ - gh-86802: Fixed asyncio memory leak in cancelled shield
+ tasks. For shielded tasks where the shield was cancelled,
+ log potential exceptions through the exception handler.
+ Contributed by Christian Harries.
+ - gh-71189: Add support of the all-but-last mode in
+ os.path.realpath().
+ - gh-72902: Improve speed (x1.1-1.8) of the Fraction
+ constructor for typical inputs (float’s, Decimal’s or
+ strings).
+ - gh-134209: curses: The curses.window.instr() and
+ curses.window.getstr() methods now allocate their internal
+ buffer on the heap instead of the stack; in addition, the
+ max buffer size is increased from 1023 to 2047.
+ - gh-88994: Change datetime.datetime.now()
+ to half-even rounding for consistency with
+ datetime.datetime.fromtimestamp(). Patch by John Keith
+ Hohm.
+ - gh-80184: The default queue size is now socket.SOMAXCONN
+ for socketserver.TCPServer.
+ - gh-132983: Add compression.zstd version information to
+ test.pythoninfo.
+ - gh-134235: Updated tab completion on REPL to include
+ builtin modules. Contributed by Tom Wang, Hunter Young
+ - gh-134152: Fixed UnboundLocalError that could occur during
+ email header parsing if an expected trailing delimiter is
+ missing in some contexts.
+ - gh-134152: email: Fix parsing of email message ID with
+ invalid domain.
+ - gh-134168: http.server: Fix IPv6 address binding and
+ --directory handling when using HTTPS.
+ - gh-62184: Remove import of C implementation of io.FileIO
+ from Python implementation which has its own implementation
+ - gh-134087: Remove support for arbitrary positional
+ or keyword arguments in the C implementation of
+ threading.RLock objects. This was deprecated since Python
+ 3.14. Patch by Bénédikt Tran.
+ - gh-134173: Speed up asyncio performance of transferring
+ state from thread pool concurrent.futures.Future by up to
+ 4.4x. Patch by J. Nick Koston.
+ - gh-133982: Emit RuntimeWarning in the Python implementation
+ of io when the file-like object is not closed explicitly in
+ the presence of multiple I/O layers.
+ - gh-133890: The tarfile module now handles
+ UnicodeEncodeError in the same way as OSError when cannot
+ extract a member.
+ - gh-134097: Fix interaction of the new REPL and -X
+ showrefcount command line option.
+ - gh-133889: The generated directory listing page in
+ http.server.SimpleHTTPRequestHandler now only shows the
+ decoded path component of the requested URL, and not the
+ query and fragment.
+ - gh-134098: Fix handling paths that end with
+ a percent-encoded slash (%2f or %2F) in
+ http.server.SimpleHTTPRequestHandler.
+ - gh-132124: On POSIX-compliant systems,
+ multiprocessing.util.get_temp_dir() now ignores TMPDIR
+ (and similar environment variables) if the path length of
+ AF_UNIX socket files exceeds the platform-specific maximum
+ length when using the forkserver start method. Patch by
+ Bénédikt Tran.
+ - gh-134062: ipaddress: fix collisions in __hash__() for
+ IPv4Network and IPv6Network objects.
+ - gh-134004: shelve as well as underlying dbm.dumb and
+ dbm.sqlite now have reorganize() methods to recover unused
+ free space previously occupied by deleted entries.
+ - gh-133970: Make string.templatelib.Template and
+ string.templatelib.Interpolation generic.
+ - gh-71253: Raise ValueError in open() if opener returns a
+ negative file-descriptor in the Python implementation of io
+ to match the C implementation.
+ - gh-133960: Simplify and improve
+ typing.evaluate_forward_ref(). It now no longer raises
+ errors on certain invalid types. In several situations,
+ it is now able to evaluate forward references that were
+ previously unsupported.
+ - gh-133925: Make the private class typing._UnionGenericAlias
+ hashable.
+ - gh-133604: Remove platform.java_ver() which was deprecated
+ since Python 3.13.
+ - gh-133875: Removed deprecated
+ pathlib.PurePath.is_reserved(). Use os.path.isreserved() to
+ detect reserved paths on Windows.
+ - gh-133873: Remove the deprecated getmark(), setmark()
+ and getmarkers() methods of the Wave_read and Wave_write
+ classes, which were deprecated since Python 3.13. Patch by
+ Bénédikt Tran.
+ - gh-133866: Remove the undocumented function
+ ctypes.SetPointerType(), which has been deprecated since
+ Python 3.13. Patch by Bénédikt Tran.
+ - gh-133823: Remove support for TD = TypedDict("TD")
+ and TD = TypedDict("TD", None) calls for constructing
+ typing.TypedDict objects with zero field. Patch by Bénédikt
+ Tran.
+ - gh-125996: Fix thread safety of collections.OrderedDict.
+ Patch by Kumar Aditya.
+ - gh-133817: Remove support for creating NamedTuple classes
+ via the undocumented keyword argument syntax. Patch by
+ Bénédikt Tran.
+ - gh-133653: Fix argparse.ArgumentParser with the
+ formatter_class argument. Fix TypeError when
+ formatter_class is a custom subclass of HelpFormatter.
+ Fix TypeError when formatter_class is not a subclass
+ of HelpFormatter and non-standard prefix_char is used.
+ Fix support of colorizing when formatter_class is not a
+ subclass of HelpFormatter.
+ - gh-133810: Remove http.server.CGIHTTPRequestHandler and
+ --cgi flag from the python -m http.server command-line
+ interface. They were deprecated in Python 3.13. Patch by
+ Bénédikt Tran.
+ - gh-132641: Fixed a race in functools.lru_cache() under
+ free-threading.
+ - gh-133783: Fix bug with applying copy.replace() to ast
+ objects. Attributes that default to None were incorrectly
+ treated as required for manually created AST nodes.
+ - gh-133684: Fix bug where annotationlib.get_annotations()
+ would return the wrong result for certain classes that are
+ part of a class hierarchy where from __future__ import
+ annotations is used.
+ - gh-77057: Fix handling of invalid markup declarations in
+ html.parser.HTMLParser.
+ - gh-130328: Speedup pasting in PyREPL on Windows in a legacy
+ console. Patch by Chris Eibl.
+ - gh-133701: Fix bug where typing.TypedDict classes defined
+ under from __future__ import annotations and inheriting
+ from another TypedDict had an incorrect __annotations__
+ attribute.
+ - gh-133656: Remove deprecated
+ zipimport.zipimporter.load_module(). Use
+ zipimport.zipimporter.exec_module() instead.
+ - gh-133722: Added a color option to difflib.unified_diff()
+ that colors output similar to git diff.
+ - gh-133489: random.getrandbits() can now generate more that
+ 231 bits. random.randbytes() can now generate more that 256
+ MiB.
+ - gh-133595: Clean up sqlite3.Connection APIs. All parameters
+ of sqlite3.connect() except database are now keyword-only.
+ The first three parameters of methods create_function()
+ and create_aggregate() are now positional-only.
+ The first parameter of methods set_authorizer(),
+ set_progress_handler() and set_trace_callback() is now
+ positional-only.
+ - gh-133581: Improve unparsing of t-strings in ast.unparse()
+ and from __future__ import annotations. Empty t-strings now
+ round-trip correctly and formatting in interpolations is
+ preserved. Patch by Jelle Zijlstra.
+ - gh-133577: Add parameter formatter to
+ logging.basicConfig().
+ - gh-92897: Removed the check_home parameter from
+ sysconfig.is_python_build(), deprecated since Python 3.12.
+ - gh-133551: Support t-strings (PEP 750) in annotationlib.
+ Patch by Jelle Zijlstra.
+ - gh-133517: Remove os.listdrives(), os.listvolumes() and
+ os.listmounts() in non Windows desktop builds since the
+ underlying functionality is missing.
+ - gh-133439: Fix dot commands with trailing spaces are
+ mistaken for multi-line SQL statements in the sqlite3
+ command-line interface.
+ - gh-133447: Add basic color to sqlite3 CLI interface.
+ - gh-133253: Fix thread-safety issues in linecache.
+ - gh-133390: Support keyword completion in the sqlite3
+ command-line interface and add sqlite3.SQLITE_KEYWORDS
+ constant.
+ - gh-132493: Avoid accessing __annotations__ unnecessarily in
+ inspect.signature().
+ - gh-133017: Improve the error message of
+ multiprocessing.sharedctypes.Array(),
+ multiprocessing.sharedctypes.RawArray(),
+ multiprocessing.sharedctypes.Value() and
+ multiprocessing.sharedctypes.RawValue() when an invalid
+ typecode is passed. Patch by Tomas Roun
+ - gh-132813: Improve error messages for incorrect types and
+ values of csv.Dialect attributes.
+ - gh-132969: Prevent the ProcessPoolExecutor executor thread,
+ which remains running when shutdown(wait=False), from
+ attempting to adjust the pool’s worker processes after
+ the object state has already been reset during shutdown.
+ A combination of conditions, including a worker process
+ having terminated abormally, resulted in an exception and
+ a potential hang when the still-running executor thread
+ attempted to replace dead workers within the pool.
+ - gh-132876: ldexp() on Windows doesn’t round subnormal
+ results before Windows 11, but should. Python’s
+ math.ldexp() wrapper now does round them, so results may
+ change slightly, in rare cases of very small results, on
+ Windows versions before 11.
+ - gh-133009: xml.etree.ElementTree: Fix a crash in
+ Element.__deepcopy__ when the element is concurrently
+ mutated. Patch by Bénédikt Tran.
+ - gh-132908: Add math.isnormal() and math.issubnormal()
+ functions. Patch by Sergey B Kirpichev.
+ - gh-95380: fcntl.fcntl() and fcntl.ioctl(): Remove the 1024
+ bytes limit on the size of not mutated bytes-like argument.
+ - gh-122781: Fix %z directive in datetime.datetime.strptime()
+ to allow for no provided offset as was documented.
+ - gh-123471: Make concurrent iterations over
+ itertools.combinations and itertools.product safe under
+ free-threading.
+ - gh-127081: Fix libc thread safety issues with dbm by
+ performing stateful operations in critical sections.
+ - gh-127081: Fix libc thread safety issues with os by
+ replacing getlogin with getlogin_r re-entrant version.
+ - gh-127081: Fix libc thread safety issues with pwd by
+ locking access to getpwall.
+ - gh-132551: Make io.BytesIO safe in free-threaded build.
+ - gh-107583: Fix Flag inversion when flag set has missing
+ values (IntFlag still flips all bits); fix negative
+ assigned values during flag creation (both Flag and IntFlag
+ ignore missing values).
+ - gh-87790: Support underscore and comma as thousands
+ separators in the fractional part for Fraction’s
+ formatting. Patch by Sergey B Kirpichev.
+ - gh-87790: Support underscore and comma as thousands
+ separators in the fractional part for Decimal’s formatting.
+ Patch by Sergey B Kirpichev.
+ - gh-131884: Fix formatting issues in json.dump() when both
+ indent and skipkeys are used.
+ - gh-131788: Make ResourceTracker.send from multiprocessing
+ re-entrant safe
+ - gh-91349: Adjust default compressionlevel= to 6 (down from
+ 9) in gzip and tarfile. It is the default level used by
+ most compression tools and a better tradeoff between speed
+ and performance.
+ - gh-131146: Fix calendar.TextCalendar,
+ calendar.HTMLCalendar, and the calendar CLI
+ to display month names in the nominative case
+ by adding calendar.standalone_month_name and
+ calendar.standalone_month_abbr, which provide month names
+ and abbreviations in the grammatical form used when a month
+ name stands by itself, if the locale supports it.
+ - gh-123471: Make concurrent iterations over itertools.cycle
+ safe under free-threading.
+ - gh-130664: Handle corner-case for Fraction’s formatting:
+ treat zero-padding (preceding the width field by a zero
+ ('0') character) as an equivalent to a fill character of
+ '0' with an alignment type of '=', just as in case of
+ float’s.
+ - gh-130999: Avoid exiting the new REPL and offer suggestions
+ even if there are non-string candidates when errors occur.
+ - gh-88473: Implement a fast path for datetime.date objects
+ in datetime.date.today() which results in a 5x performance
+ gain while proper subclasses retain their previous
+ performance.
+ - gh-126883: Add check that timezone fields are in
+ range for datetime.datetime.fromisoformat() and
+ datetime.time.fromisoformat(). Patch by Semyon Moroz.
+ - gh-125028: functools.Placeholder cannot be passed to
+ functools.partial() as a keyword argument.
+ - gh-125843: If possible, indicate which curses C function or
+ macro is responsible for raising a curses.error exception.
+ Patch by Bénédikt Tran.
+ - gh-119109: functools.partial() calls are now faster when
+ keyword arguments are used.
+ - gh-124033: SimplePath is now presented in
+ importlib.metadata.__all__.
+ - gh-91216: importlib.metadata now raises a KeyError instead
+ of returning None when a key is missing from the metadata.
+ - gh-120492: importlib.metadata now prioritizes valid dists
+ to invalid dists when retrieving by name.
+ - gh-99631: The shelve module now accepts custom
+ serialization and deserialization functions.
+ - gh-119186: Slightly speed up os.walk() by calling
+ os.path.join() less often.
+ - gh-120170: Fix an issue in the _pickle extension module in
+ which importing multiprocessing could change how pickle
+ identifies which module an object belongs to, potentially
+ breaking the unpickling of those objects.
+ - gh-118981: Fix potential hang in
+ multiprocessing.popen_spawn_posix that can happen when the
+ child proc dies early by closing the child fds right away.
+ - gh-105497: Fix flag mask inversion when unnamed flags
+ exist.
+ - gh-99813: ssl now uses SSL_sendfile internally when it is
+ possible (see OP_ENABLE_KTLS). The function sends a file
+ more efficiently because it performs TLS encryption in the
+ kernel to avoid additional context switches. Patch by Illia
+ Volochii.
+ - gh-62824: Fix aliases for iso8859_8 encoding. Patch by Dave
+ Goncalves.
+ - gh-86155: html.parser.HTMLParser.close() no longer loses
+ data when the