@@ -1274,13 +1274,19 @@ although there is currently no date scheduled for their removal.
12741274Removed
12751275=======
12761276
1277- * ``asynchat `` and ``asyncore ``: These two modules have been removed
1277+ asynchat and asyncore
1278+ ---------------------
1279+
1280+ * These two modules have been removed
12781281 according to the schedule in :pep: `594 `,
12791282 having been deprecated in Python 3.6.
12801283 Use :mod: `asyncio ` instead.
12811284 (Contributed by Nikita Sobolev in :gh: `96580 `.)
12821285
1283- * :mod: `configparser `: Several names deprecated in the :mod: `configparser ` way back in 3.2 have
1286+ configparser
1287+ ------------
1288+
1289+ * Several names deprecated in the :mod: `configparser ` way back in 3.2 have
12841290 been removed per :gh: `89336 `:
12851291
12861292 * :class: `configparser.ParsingError ` no longer has a ``filename `` attribute
@@ -1290,13 +1296,19 @@ Removed
12901296 * :class: `configparser.ConfigParser ` no longer has a ``readfp `` method.
12911297 Use :meth: `~configparser.ConfigParser.read_file ` instead.
12921298
1293- * ``distutils ``: Remove the ``distutils `` package. It was deprecated in Python 3.10 by
1299+ distutils
1300+ ---------
1301+
1302+ * Remove the :py:mod: `!distutils ` package. It was deprecated in Python 3.10 by
12941303 :pep: `632 ` "Deprecate distutils module". For projects still using
12951304 ``distutils `` and cannot be updated to something else, the ``setuptools ``
12961305 project can be installed: it still provides ``distutils ``.
12971306 (Contributed by Victor Stinner in :gh: `92584 `.)
12981307
1299- * :mod: `ensurepip `: Remove the bundled setuptools wheel from :mod: `ensurepip `,
1308+ ensurepip
1309+ ---------
1310+
1311+ * Remove the bundled setuptools wheel from :mod: `ensurepip `,
13001312 and stop installing setuptools in environments created by :mod: `venv `.
13011313
13021314 ``pip (>= 22.1) `` does not require setuptools to be installed in the
@@ -1314,27 +1326,42 @@ Removed
13141326
13151327 (Contributed by Pradyun Gedam in :gh: `95299 `.)
13161328
1317- * :mod: `enum `: Remove ``EnumMeta.__getattr__ ``, which is no longer needed for
1329+ enum
1330+ ----
1331+
1332+ * Remove :mod: `enum `'s ``EnumMeta.__getattr__ ``, which is no longer needed for
13181333 enum attribute access.
13191334 (Contributed by Ethan Furman in :gh: `95083 `.)
13201335
1321- * :mod: `ftplib `: Remove the ``FTP_TLS.ssl_version `` class attribute: use the
1336+ ftplib
1337+ ------
1338+
1339+ * Remove :mod: `ftplib `'s ``FTP_TLS.ssl_version `` class attribute: use the
13221340 *context * parameter instead.
13231341 (Contributed by Victor Stinner in :gh: `94172 `.)
13241342
1325- * :mod: `gzip `: Remove the ``filename `` attribute of :class: `gzip.GzipFile `,
1343+ gzip
1344+ ----
1345+
1346+ * Remove the ``filename `` attribute of :mod: `gzip `'s :class: `gzip.GzipFile `,
13261347 deprecated since Python 2.6, use the :attr: `~gzip.GzipFile.name ` attribute
13271348 instead. In write mode, the ``filename `` attribute added ``'.gz' `` file
13281349 extension if it was not present.
13291350 (Contributed by Victor Stinner in :gh: `94196 `.)
13301351
1331- * :mod: `hashlib `: Remove the pure Python implementation of
1352+ hashlib
1353+ -------
1354+
1355+ * Remove the pure Python implementation of :mod: `hashlib `'s
13321356 :func: `hashlib.pbkdf2_hmac() `, deprecated in Python 3.10. Python 3.10 and
13331357 newer requires OpenSSL 1.1.1 (:pep: `644 `): this OpenSSL version provides
13341358 a C implementation of :func: `~hashlib.pbkdf2_hmac() ` which is faster.
13351359 (Contributed by Victor Stinner in :gh: `94199 `.)
13361360
1337- * :mod: `importlib `: Many previously deprecated cleanups in :mod: `importlib ` have now been
1361+ importlib
1362+ ---------
1363+
1364+ * Many previously deprecated cleanups in :mod: `importlib ` have now been
13381365 completed:
13391366
13401367 * References to, and support for :meth: `!module_repr() ` has been removed.
@@ -1350,10 +1377,13 @@ Removed
13501377 * ``importlib.abc.Finder ``, ``pkgutil.ImpImporter ``, and ``pkgutil.ImpLoader ``
13511378 have been removed. (Contributed by Barry Warsaw in :gh: `98040 `.)
13521379
1353- * The :mod: ` ! imp` module has been removed. (Contributed by Barry Warsaw in
1354- :gh: ` 98040 `.)
1380+ imp
1381+ ---
13551382
1356- * Replace removed :mod: `!imp ` functions with :mod: `importlib ` functions:
1383+ * The :mod: `!imp ` module has been removed. (Contributed by Barry Warsaw in
1384+ :gh: `98040 `.)
1385+
1386+ * Replace removed :mod: `!imp ` functions with :mod: `importlib ` functions:
13571387
13581388 ================================= =======================================
13591389 imp importlib
@@ -1370,7 +1400,7 @@ Removed
13701400 ``imp.source_from_cache() `` :func: `importlib.util.source_from_cache `
13711401 ================================= =======================================
13721402
1373- * Replace ``imp.load_source() `` with::
1403+ * Replace ``imp.load_source() `` with::
13741404
13751405 import importlib.util
13761406 import importlib.machinery
@@ -1385,28 +1415,34 @@ Removed
13851415 loader.exec_module(module)
13861416 return module
13871417
1388- * Removed :mod: `!imp ` functions and attributes with no replacements:
1418+ * Removed :mod: `!imp ` functions and attributes with no replacements:
1419+
1420+ * undocumented functions:
13891421
1390- * undocumented functions:
1422+ * ``imp.init_builtin() ``
1423+ * ``imp.load_compiled() ``
1424+ * ``imp.load_dynamic() ``
1425+ * ``imp.load_package() ``
13911426
1392- * ``imp.init_builtin() ``
1393- * ``imp.load_compiled() ``
1394- * ``imp.load_dynamic() ``
1395- * ``imp.load_package() ``
1427+ * ``imp.lock_held() ``, ``imp.acquire_lock() ``, ``imp.release_lock() ``:
1428+ the locking scheme has changed in Python 3.3 to per-module locks.
1429+ * ``imp.find_module() `` constants: ``SEARCH_ERROR ``, ``PY_SOURCE ``,
1430+ ``PY_COMPILED ``, ``C_EXTENSION ``, ``PY_RESOURCE ``, ``PKG_DIRECTORY ``,
1431+ ``C_BUILTIN ``, ``PY_FROZEN ``, ``PY_CODERESOURCE ``, ``IMP_HOOK ``.
13961432
1397- * ``imp.lock_held() ``, ``imp.acquire_lock() ``, ``imp.release_lock() ``:
1398- the locking scheme has changed in Python 3.3 to per-module locks.
1399- * ``imp.find_module() `` constants: ``SEARCH_ERROR ``, ``PY_SOURCE ``,
1400- ``PY_COMPILED ``, ``C_EXTENSION ``, ``PY_RESOURCE ``, ``PKG_DIRECTORY ``,
1401- ``C_BUILTIN ``, ``PY_FROZEN ``, ``PY_CODERESOURCE ``, ``IMP_HOOK ``.
1433+ io
1434+ --
14021435
1403- * :mod: `io `: Remove ``io.OpenWrapper `` and ``_pyio.OpenWrapper ``, deprecated in Python
1436+ * Remove :mod: `io `'s ``io.OpenWrapper `` and ``_pyio.OpenWrapper ``, deprecated in Python
14041437 3.10: just use :func: `open ` instead. The :func: `open ` (:func: `io.open `)
14051438 function is a built-in function. Since Python 3.10, :func: `!_pyio.open ` is
14061439 also a static method.
14071440 (Contributed by Victor Stinner in :gh: `94169 `.)
14081441
1409- * :mod: `locale `: Remove the :func: `!locale.format ` function, deprecated in Python 3.7:
1442+ locale
1443+ ------
1444+
1445+ * Remove :mod: `locale `'s :func: `!locale.format ` function, deprecated in Python 3.7:
14101446 use :func: `locale.format_string ` instead.
14111447 (Contributed by Victor Stinner in :gh: `94226 `.)
14121448
@@ -1418,7 +1454,10 @@ Removed
14181454
14191455.. _aiosmtpd : https://pypi.org/project/aiosmtpd/
14201456
1421- * :mod: `sqlite3 `: The following undocumented :mod: `sqlite3 ` features, deprecated in Python
1457+ sqlite3
1458+ -------
1459+
1460+ * The following undocumented :mod: `sqlite3 ` features, deprecated in Python
14221461 3.10, are now removed:
14231462
14241463 * ``sqlite3.enable_shared_cache() ``
@@ -1434,30 +1473,34 @@ Removed
14341473
14351474 (Contributed by Erlend E. Aasland in :gh: `92548 `.)
14361475
1437- * :mod: `ssl `:
1476+ ssl
1477+ ---
14381478
1439- * Remove the :func: `!ssl.RAND_pseudo_bytes ` function, deprecated in Python 3.6:
1440- use :func: `os.urandom ` or :func: `ssl.RAND_bytes ` instead.
1441- (Contributed by Victor Stinner in :gh: `94199 `.)
1479+ * Remove :mod: `ssl `'s :func: `!ssl.RAND_pseudo_bytes ` function, deprecated in Python 3.6:
1480+ use :func: `os.urandom ` or :func: `ssl.RAND_bytes ` instead.
1481+ (Contributed by Victor Stinner in :gh: `94199 `.)
1482+
1483+ * Remove the :func: `!ssl.match_hostname ` function.
1484+ It was deprecated in Python 3.7. OpenSSL performs
1485+ hostname matching since Python 3.7, Python no longer uses the
1486+ :func: `!ssl.match_hostname ` function.
1487+ (Contributed by Victor Stinner in :gh: `94199 `.)
14421488
1443- * Remove the :func: `!ssl.match_hostname ` function.
1444- It was deprecated in Python 3.7. OpenSSL performs
1445- hostname matching since Python 3.7, Python no longer uses the
1446- :func: `!ssl.match_hostname ` function.
1447- (Contributed by Victor Stinner in :gh: `94199 `.)
1489+ * Remove the :func: `!ssl.wrap_socket ` function, deprecated in Python 3.7:
1490+ instead, create a :class: `ssl.SSLContext ` object and call its
1491+ :class: `ssl.SSLContext.wrap_socket ` method. Any package that still uses
1492+ :func: `!ssl.wrap_socket ` is broken and insecure. The function neither sends a
1493+ SNI TLS extension nor validates server hostname. Code is subject to `CWE-295
1494+ <https://cwe.mitre.org/data/definitions/295.html> `_: Improper Certificate
1495+ Validation.
1496+ (Contributed by Victor Stinner in :gh: `94199 `.)
14481497
1449- * Remove the :func: `!ssl.wrap_socket ` function, deprecated in Python 3.7:
1450- instead, create a :class: `ssl.SSLContext ` object and call its
1451- :class: `ssl.SSLContext.wrap_socket ` method. Any package that still uses
1452- :func: `!ssl.wrap_socket ` is broken and insecure. The function neither sends a
1453- SNI TLS extension nor validates server hostname. Code is subject to `CWE-295
1454- <https://cwe.mitre.org/data/definitions/295.html> `_: Improper Certificate
1455- Validation.
1456- (Contributed by Victor Stinner in :gh: `94199 `.)
1498+ unittest
1499+ --------
14571500
1458- * :mod: ` unittest `: Removed many old deprecated :mod: `unittest ` features:
1501+ * Removed many old deprecated :mod: `unittest ` features:
14591502
1460- - A number of :class: `~unittest.TestCase ` method aliases:
1503+ * A number of :class: `~unittest.TestCase ` method aliases:
14611504
14621505 ============================ =============================== ===============
14631506 Deprecated alias Method Name Deprecated in
@@ -1482,33 +1525,45 @@ Removed
14821525 You can use https://github.com/isidentical/teyit to automatically modernise
14831526 your unit tests.
14841527
1485- - Undocumented and broken :class: `~unittest.TestCase ` method
1528+ * Undocumented and broken :class: `~unittest.TestCase ` method
14861529 ``assertDictContainsSubset `` (deprecated in Python 3.2).
14871530
1488- - Undocumented :meth: `TestLoader.loadTestsFromModule
1531+ * Undocumented :meth: `TestLoader.loadTestsFromModule
14891532 <unittest.TestLoader.loadTestsFromModule> ` parameter *use_load_tests *
14901533 (deprecated and ignored since Python 3.2).
14911534
1492- - An alias of the :class: `~unittest.TextTestResult ` class:
1535+ * An alias of the :class: `~unittest.TextTestResult ` class:
14931536 ``_TextTestResult `` (deprecated in Python 3.2).
14941537
14951538 (Contributed by Serhiy Storchaka in :issue: `45162 `.)
14961539
1497- * :mod: `webbrowser `: Remove support for obsolete browsers from :mod: `webbrowser `.
1540+ webbrowser
1541+ ----------
1542+
1543+ * Remove support for obsolete browsers from :mod: `webbrowser `.
14981544 Removed browsers include: Grail, Mosaic, Netscape, Galeon, Skipstone,
14991545 Iceape, Firebird, and Firefox versions 35 and below (:gh: `102871 `).
15001546
1501- * :mod: `xml.etree.ElementTree `: Remove the ``ElementTree.Element.copy() `` method of the
1547+ xml.etree.ElementTree
1548+ ---------------------
1549+
1550+ * Remove the ``ElementTree.Element.copy() `` method of the
15021551 pure Python implementation, deprecated in Python 3.10, use the
15031552 :func: `copy.copy ` function instead. The C implementation of :mod: `xml.etree.ElementTree `
15041553 has no ``copy() `` method, only a ``__copy__() `` method.
15051554 (Contributed by Victor Stinner in :gh: `94383 `.)
15061555
1507- * :mod: `zipimport `: Remove ``find_loader() `` and ``find_module() `` methods,
1556+ zipimport
1557+ ---------
1558+
1559+ * Remove :mod: `zipimport `'s ``find_loader() `` and ``find_module() `` methods,
15081560 deprecated in Python 3.10: use the ``find_spec() `` method instead. See
15091561 :pep: `451 ` for the rationale.
15101562 (Contributed by Victor Stinner in :gh: `94379 `.)
15111563
1564+ Others
1565+ ------
1566+
15121567* Removed the ``suspicious `` rule from the documentation Makefile, and
15131568 removed ``Doc/tools/rstlint.py ``, both in favor of `sphinx-lint
15141569 <https://github.com/sphinx-contrib/sphinx-lint> `_.
0 commit comments