@@ -688,10 +688,122 @@ although there is currently no date scheduled for their removal.
688688Removed
689689=======
690690
691- * :pep: `594 `: Remove the :mod: `!telnetlib ` module, deprecated in Python 3.11:
692- use the projects `telnetlib3 <https://pypi.org/project/telnetlib3/ >`_ or
693- `Exscript <https://pypi.org/project/Exscript/ >`_ instead.
694- (Contributed by Victor Stinner in :gh: `104773 `.)
691+ PEP 594: dead batteries
692+ -----------------------
693+
694+ * :pep: `594 `: Removed 19 modules from the standard library,
695+ deprecated in Python 3.11:
696+
697+ * :mod: `!telnetlib `, :use the projects
698+ `telnetlib3 <https://pypi.org/project/telnetlib3/ >`_ or
699+ `Exscript <https://pypi.org/project/Exscript/ >`_ instead.
700+ (Contributed by Victor Stinner in :gh: `104773 `.)
701+
702+ * :mod: `!cgi ` and :mod: `!cgitb `.
703+
704+ * ``cgi.FieldStorage `` can typically be replaced with
705+ :func: `urllib.parse.parse_qsl ` for ``GET `` and ``HEAD `` requests,
706+ and the :mod: `email.message ` module or `multipart
707+ <https://pypi.org/project/multipart/> `__ PyPI project for ``POST `` and
708+ ``PUT ``.
709+
710+ * ``cgi.parse() `` can be replaced by calling :func: `urllib.parse.parse_qs `
711+ directly on the desired query string, except for ``multipart/form-data ``
712+ input, which can be handled as described for ``cgi.parse_multipart() ``.
713+
714+ * ``cgi.parse_multipart() `` can be replaced with the functionality in the
715+ :mod: `email ` package (e.g. :class: `email.message.EmailMessage ` and
716+ :class: `email.message.Message `) which implements the same MIME RFCs, or
717+ with the `multipart <https://pypi.org/project/multipart/ >`__ PyPI project.
718+
719+ * ``cgi.parse_header() `` can be replaced with the functionality in the
720+ :mod: `email ` package, which implements the same MIME RFCs. For example,
721+ with :class: `email.message.EmailMessage `::
722+
723+ from email.message import EmailMessage
724+ msg = EmailMessage()
725+ msg['content-type'] = 'application/json; charset="utf8"'
726+ main, params = msg.get_content_type(), msg['content-type'].params
727+
728+ (Contributed by Victor Stinner in :gh: `104773 `.)
729+
730+ * :mod: `!sndhdr `: use the projects
731+ `filetype <https://pypi.org/project/filetype/ >`_,
732+ `puremagic <https://pypi.org/project/puremagic/ >`_, or
733+ `python-magic <https://pypi.org/project/python-magic/ >`_ instead.
734+ (Contributed by Victor Stinner in :gh: `104773 `.)
735+
736+ * :mod: `!pipes `: use the :mod: `subprocess ` module instead.
737+ (Contributed by Victor Stinner in :gh: `104773 `.)
738+
739+ * :mod: `!ossaudiodev `: use the
740+ `pygame project <https://www.pygame.org/ >`_ for audio playback.
741+ (Contributed by Victor Stinner in :gh: `104780 `.)
742+
743+ * :mod: `!sunau `.
744+ (Contributed by Victor Stinner in :gh: `104773 `.)
745+
746+ * :mod: `!mailcap `.
747+ The :mod: `mimetypes ` module provides an alternative.
748+ (Contributed by Victor Stinner in :gh: `104773 `.)
749+
750+ * :mod: `!spwd `:
751+ the `python-pam project <https://pypi.org/project/python-pam/ >`_
752+ can be used instead.
753+ (Contributed by Victor Stinner in :gh: `104773 `.)
754+
755+ * :mod: `!nntplib `:
756+ the `PyPI nntplib project <https://pypi.org/project/nntplib/ >`_
757+ can be used instead.
758+ (Contributed by Victor Stinner in :gh: `104773 `.)
759+
760+ * :mod: `!nis `.
761+ (Contributed by Victor Stinner in :gh: `104773 `.)
762+
763+ * :mod: `!xdrlib `.
764+ (Contributed by Victor Stinner in :gh: `104773 `.)
765+
766+ * :mod: `!msilib `.
767+ (Contributed by Zachary Ware in :gh: `104773 `.)
768+
769+ * :mod: `!crypt ` module and its private :mod: `!_crypt ` extension.
770+ The :mod: `hashlib ` module is a potential replacement for certain use cases.
771+ Otherwise, the following PyPI projects can be used:
772+
773+ * `bcrypt <https://pypi.org/project/bcrypt/ >`_:
774+ Modern password hashing for your software and your servers.
775+ * `passlib <https://pypi.org/project/passlib/ >`_:
776+ Comprehensive password hashing framework supporting over 30 schemes.
777+ * `argon2-cffi <https://pypi.org/project/argon2-cffi/ >`_:
778+ The secure Argon2 password hashing algorithm.
779+ * `legacycrypt <https://pypi.org/project/legacycrypt/ >`_:
780+ Wrapper to the POSIX crypt library call and associated functionality.
781+
782+ (Contributed by Victor Stinner in :gh: `104773 `.)
783+
784+ * :mod: `!uu `: the :mod: `base64 ` module is a modern alternative.
785+ (Contributed by Victor Stinner in :gh: `104773 `.)
786+
787+ * :mod: `!aifc `.
788+ (Contributed by Victor Stinner in :gh: `104773 `.)
789+
790+ * :mod: `!audioop `.
791+ (Contributed by Victor Stinner in :gh: `104773 `.)
792+
793+ * :mod: `!chunk `.
794+ (Contributed by Victor Stinner in :gh: `104773 `.)
795+
796+ * :mod: `!imghdr `:
797+ use the projects
798+ `filetype <https://pypi.org/project/filetype/ >`_,
799+ `puremagic <https://pypi.org/project/puremagic/ >`_,
800+ or `python-magic <https://pypi.org/project/python-magic/ >`_ instead.
801+ (Contributed by Victor Stinner in :gh: `104773 `.)
802+
803+ * Remove support for the keyword-argument method of creating
804+ :class: `typing.TypedDict ` types, deprecated in Python 3.11.
805+ (Contributed by Tomas Roun in :gh: `104786 `.)
806+
695807
696808* Remove the ``2to3 `` program and the :mod: `!lib2to3 ` module,
697809 deprecated in Python 3.11.
@@ -733,115 +845,6 @@ Removed
733845
734846 (Contributed by Hugo van Kemenade in :gh: `104835 `.)
735847
736- * :pep: `594 `: Remove the :mod: `!cgi ` and :mod: `!cgitb ` modules,
737- deprecated in Python 3.11.
738-
739- * ``cgi.FieldStorage `` can typically be replaced with
740- :func: `urllib.parse.parse_qsl ` for ``GET `` and ``HEAD `` requests, and the
741- :mod: `email.message ` module or `multipart
742- <https://pypi.org/project/multipart/> `__ PyPI project for ``POST `` and
743- ``PUT ``.
744-
745- * ``cgi.parse() `` can be replaced by calling :func: `urllib.parse.parse_qs `
746- directly on the desired query string, except for ``multipart/form-data ``
747- input, which can be handled as described for ``cgi.parse_multipart() ``.
748-
749- * ``cgi.parse_multipart() `` can be replaced with the functionality in the
750- :mod: `email ` package (e.g. :class: `email.message.EmailMessage ` and
751- :class: `email.message.Message `) which implements the same MIME RFCs, or
752- with the `multipart <https://pypi.org/project/multipart/ >`__ PyPI project.
753-
754- * ``cgi.parse_header() `` can be replaced with the functionality in the
755- :mod: `email ` package, which implements the same MIME RFCs. For example,
756- with :class: `email.message.EmailMessage `::
757-
758- from email.message import EmailMessage
759- msg = EmailMessage()
760- msg['content-type'] = 'application/json; charset="utf8"'
761- main, params = msg.get_content_type(), msg['content-type'].params
762-
763- (Contributed by Victor Stinner in :gh: `104773 `.)
764-
765- * :pep: `594 `: Remove the :mod: `!sndhdr ` module, deprecated in Python 3.11: use
766- the projects `filetype <https://pypi.org/project/filetype/ >`_, `puremagic
767- <https://pypi.org/project/puremagic/> `_, or `python-magic
768- <https://pypi.org/project/python-magic/> `_ instead.
769- (Contributed by Victor Stinner in :gh: `104773 `.)
770-
771- * :pep: `594 `: Remove the :mod: `!pipes ` module, deprecated in Python 3.11:
772- use the :mod: `subprocess ` module instead.
773- (Contributed by Victor Stinner in :gh: `104773 `.)
774-
775- * :pep: `594 `: Remove the :mod: `!ossaudiodev ` module, deprecated in Python 3.11:
776- use the `pygame project <https://www.pygame.org/ >`_ for audio playback.
777- (Contributed by Victor Stinner in :gh: `104780 `.)
778-
779- * :pep: `594 `: Remove the :mod: `!sunau ` module, deprecated in Python 3.11.
780- (Contributed by Victor Stinner in :gh: `104773 `.)
781-
782- * :pep: `594 `: Remove the :mod: `!mailcap ` module, deprecated in Python 3.11.
783- The :mod: `mimetypes ` module provides an alternative.
784- (Contributed by Victor Stinner in :gh: `104773 `.)
785-
786- * :pep: `594 `: Remove the :mod: `!spwd ` module, deprecated in Python 3.11:
787- the `python-pam project <https://pypi.org/project/python-pam/ >`_ can be used
788- instead.
789- (Contributed by Victor Stinner in :gh: `104773 `.)
790-
791- * :pep: `594 `: Remove the :mod: `!nntplib ` module, deprecated in Python 3.11:
792- the `PyPI nntplib project <https://pypi.org/project/nntplib/ >`_ can be used
793- instead.
794- (Contributed by Victor Stinner in :gh: `104773 `.)
795-
796- * :pep: `594 `: Remove the :mod: `!nis ` module, deprecated in Python 3.11.
797- (Contributed by Victor Stinner in :gh: `104773 `.)
798-
799- * :pep: `594 `: Remove the :mod: `!xdrlib ` module, deprecated in Python 3.11.
800- (Contributed by Victor Stinner in :gh: `104773 `.)
801-
802- * :pep: `594 `: Remove the :mod: `!msilib ` module, deprecated in Python 3.11.
803- (Contributed by Zachary Ware in :gh: `104773 `.)
804-
805- * :pep: `594 `: Remove the :mod: `!crypt ` module and its private :mod: `!_crypt `
806- extension, deprecated in Python 3.11.
807- The :mod: `hashlib ` module is a potential replacement for certain use cases.
808- Otherwise, the following PyPI projects can be used:
809-
810- * `bcrypt <https://pypi.org/project/bcrypt/ >`_:
811- Modern password hashing for your software and your servers.
812- * `passlib <https://pypi.org/project/passlib/ >`_:
813- Comprehensive password hashing framework supporting over 30 schemes.
814- * `argon2-cffi <https://pypi.org/project/argon2-cffi/ >`_:
815- The secure Argon2 password hashing algorithm.
816- * `legacycrypt <https://pypi.org/project/legacycrypt/ >`_:
817- Wrapper to the POSIX crypt library call and associated functionality.
818-
819- (Contributed by Victor Stinner in :gh: `104773 `.)
820-
821- * :pep: `594 `: Remove the :mod: `!uu ` module, deprecated in Python 3.11:
822- the :mod: `base64 ` module is a modern alternative.
823- (Contributed by Victor Stinner in :gh: `104773 `.)
824-
825- * :pep: `594 `: Remove the :mod: `!aifc ` module, deprecated in Python 3.11.
826- (Contributed by Victor Stinner in :gh: `104773 `.)
827-
828- * :pep: `594 `: Remove the :mod: `!audioop ` module, deprecated in Python 3.11.
829- (Contributed by Victor Stinner in :gh: `104773 `.)
830-
831- * :pep: `594 `: Remove the :mod: `!chunk ` module, deprecated in Python 3.11.
832- (Contributed by Victor Stinner in :gh: `104773 `.)
833-
834- * Remove support for the keyword-argument method of creating
835- :class: `typing.TypedDict ` types, deprecated in Python 3.11.
836- (Contributed by Tomas Roun in :gh: `104786 `.)
837-
838- * :pep: `594 `: Remove the :mod: `!imghdr ` module, deprecated in Python 3.11:
839- use the projects
840- `filetype <https://pypi.org/project/filetype/ >`_,
841- `puremagic <https://pypi.org/project/puremagic/ >`_,
842- or `python-magic <https://pypi.org/project/python-magic/ >`_ instead.
843- (Contributed by Victor Stinner in :gh: `104773 `.)
844-
845848* Remove the untested and undocumented :meth: `!unittest.TestProgram.usageExit `
846849 method, deprecated in Python 3.11.
847850 (Contributed by Hugo van Kemenade in :gh: `104992 `.)
0 commit comments