PEP 594: add myself as co-author and target for Python 3.11 (#2262)

Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Co-authored-by: CAM Gerlach <CAM.Gerlach@Gerlach.CAM>
This commit is contained in:
Brett Cannon 2022-01-25 14:51:26 -08:00 committed by GitHub
parent 1f0826ea62
commit 9906d56876
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 71 additions and 447 deletions

2
.github/CODEOWNERS vendored
View File

@ -458,7 +458,7 @@ pep-0590.rst @markshannon
pep-0591.rst @ilevkivskyi pep-0591.rst @ilevkivskyi
pep-0592.rst @dstufft pep-0592.rst @dstufft
pep-0593.rst @ilevkivskyi pep-0593.rst @ilevkivskyi
pep-0594.rst @tiran pep-0594.rst @tiran @brettcannon
pep-0595.rst @ezio-melotti @berkerpeksag pep-0595.rst @ezio-melotti @berkerpeksag
pep-0596.rst @ambv pep-0596.rst @ambv
pep-0597.rst @methane pep-0597.rst @methane

View File

@ -1,11 +1,13 @@
PEP: 594 PEP: 594
Title: Removing dead batteries from the standard library Title: Removing dead batteries from the standard library
Author: Christian Heimes <christian@python.org> Author: Christian Heimes <christian@python.org>,
Brett Cannon <brett@python.org>
Discussions-To: https://discuss.python.org/t/pep-594-removing-dead-batteries-from-the-standard-library/1704 Discussions-To: https://discuss.python.org/t/pep-594-removing-dead-batteries-from-the-standard-library/1704
Status: Draft Status: Draft
Type: Standards Track Type: Standards Track
Content-Type: text/x-rst Content-Type: text/x-rst
Created: 20-May-2019 Created: 20-May-2019
Python-Version: 3.11
Post-History: 21-May-2019 Post-History: 21-May-2019
@ -18,7 +20,7 @@ and SUN file formats), APIs and operating systems that have been superseded a
long time ago (e.g. Mac OS 9), or modules that have security implications and long time ago (e.g. Mac OS 9), or modules that have security implications and
better alternatives (e.g. password and login). better alternatives (e.g. password and login).
The PEP follows in the foot steps of other PEPS like :pep:`3108`. The The PEP follows in the footsteps of other PEPS like :pep:`3108`. The
*Standard Library Reorganization* proposal removed a bunch of modules from *Standard Library Reorganization* proposal removed a bunch of modules from
Python 3.0. In 2007, the PEP referred to maintenance burden as: Python 3.0. In 2007, the PEP referred to maintenance burden as:
@ -29,7 +31,7 @@ Python 3.0. In 2007, the PEP referred to maintenance burden as:
up an undue amount of time and effort." up an undue amount of time and effort."
The withdrawn :pep:`206` from 2000 expresses issues with the Python standard The withdrawn :pep:`206` from 2000 expresses issues with the Python standard
library unvarnished and fortright: library in an unvarnished and forthright manner:
"[...] the standard library modules aren't always the best choices for a "[...] the standard library modules aren't always the best choices for a
job. Some library modules were quick hacks (e.g. ``calendar``, job. Some library modules were quick hacks (e.g. ``calendar``,
@ -47,13 +49,13 @@ philosophy and was one of the cornerstones to Python's success story.
Users didn't have to figure out how to download and install separate Users didn't have to figure out how to download and install separate
packages in order to write a simple web server or parse email. packages in order to write a simple web server or parse email.
Times have changed. The introduction of the cheese shop (PyPI), setuptools, Times have changed. The introduction of PyPI (née Cheeseshop), setuptools,
and later pip, it became simple and straightforward to download and install and later pip, it became simple and straightforward to download and install
packages. Nowadays Python has a rich and vibrant ecosystem of third-party packages. Nowadays Python has a rich and vibrant ecosystem of third-party
packages. It's pretty much standard to either install packages from PyPI or packages. It's pretty much standard to either install packages from PyPI or
use one of the many Python or Linux distributions. use one of the many Python or Linux distributions.
On the other hand, Python's standard library is piling up cruft, unnecessary On the other hand, Python's standard library is piling up with cruft, unnecessary
duplication of functionality, and dispensable features. This is undesirable duplication of functionality, and dispensable features. This is undesirable
for several reasons. for several reasons.
@ -71,7 +73,7 @@ for several reasons.
Micro:bit). Python on mobile platforms like BeeWare or WebAssembly Micro:bit). Python on mobile platforms like BeeWare or WebAssembly
(e.g. pyodide) also benefit from reduced download size. (e.g. pyodide) also benefit from reduced download size.
The modules in the PEP have been selected for deprecation because their The modules in this PEP have been selected for deprecation because their
removal is either least controversial or most beneficial. For example, removal is either least controversial or most beneficial. For example,
least controversial are 30-year-old multimedia formats like the ``sunau`` least controversial are 30-year-old multimedia formats like the ``sunau``
audio format, which was used on SPARC and NeXT workstations in the late audio format, which was used on SPARC and NeXT workstations in the late
@ -91,7 +93,7 @@ code is not permitted without legal approval.
* The ``optparse`` and ``getopt`` modules are widely used. They are mature * The ``optparse`` and ``getopt`` modules are widely used. They are mature
modules with very low maintenance overhead. modules with very low maintenance overhead.
* According to David Beazley [5]_ the ``wave`` module is easy to teach to * According to David Beazley [5]_ the ``wave`` module is easy to teach to
kids and can make crazy sounds. Making a computer generate crazy sounds is kids and can make crazy sounds. Making a computer generate sounds is a
powerful and highly motivating exercise for a nine-year-old aspiring developer. powerful and highly motivating exercise for a nine-year-old aspiring developer.
It's a fun battery to keep. It's a fun battery to keep.
@ -99,59 +101,22 @@ code is not permitted without legal approval.
Deprecation schedule Deprecation schedule
==================== ====================
3.8 3.11
---
This PEP targets Python 3.8. Version 3.8.0 final is scheduled to be released
a few months before Python 2.7 will reach its end of lifetime. We expect that
Python 3.8 will be targeted by users that migrate to Python 3 in 2019 and
2020. To reduce churn and to allow a smooth transition from Python 2,
Python 3.8 will neither raise ``DeprecationWarning`` nor remove any
modules that have been scheduled for removal. Instead deprecated modules will
just be *documented* as deprecated. Optionally modules may emit a
``PendingDeprecationWarning``.
All deprecated modules will also undergo a feature freeze. No additional
features should be added *unless* python-dev agrees that the deprecation of
the module is reverted and the code will not be removed. Bug should still be
fixed.
3.9
---
Starting with Python 3.9, deprecated modules will start issuing
``DeprecationWarning``. The `parser`_ module is removed and potentially
replaced with a new module.
All other deprecated modules are fully supported and will receive security
updates until Python 3.9 reaches its end-of-life. Python 3.9.0 will
be released about 18 months after 3.8.0 (April 2021?) and most likely
be supported for five years after the release. The estimated EOL of Python 3.9
is in 2026.
3.10
---- ----
In 3.10 all deprecated modules will be removed from the CPython repository Starting with Python 3.11, deprecated modules will start issuing
together with tests, documentation, and autoconf rules. ``DeprecationWarning``. The estimated EOL of Python 3.11 is October 2027.
3.12
----
PEP acceptance process There should be no specific change compared to Python 3.11.
======================
3.8.0b1 is scheduled to be release shortly after the PEP is officially 3.13
submitted. Since it's improbable that the PEP will pass all stages of the ----
PEP process in time, I propose a two-step acceptance process that is
analogous to Python's two-release deprecation process.
The first *provisionally-accepted* phase targets Python 3.8.0b1. In the first All modules deprecated by this PEP are removed from the ``main`` branch
phase no code is changed or removed. Modules are only documented as of the CPython repository and are no longer distributed as part of Python.
deprecated. The only exception is the `parser`_ module. It has been
documented as deprecated since Python 2.5 and is scheduled for removal for
3.9 to make place for a more advanced parser.
The final decision, which modules will be removed and how the removed code
is preserved, can be delayed for another year.
Deprecated modules Deprecated modules
@ -167,36 +132,35 @@ audio processing.
:header: "Module", "Deprecated in", "To be removed", "Added in", "Has maintainer?", "Replacement" :header: "Module", "Deprecated in", "To be removed", "Added in", "Has maintainer?", "Replacement"
:widths: 2, 1, 1, 1, 1, 2 :widths: 2, 1, 1, 1, 1, 2
aifc,3.8 (3.0\*),3.10,1993,**yes (inactive)**,\- aifc,3.11 (3.0\*),3.13,1993,**yes (inactive)**,\-
asynchat,**3.6** (3.0\*),3.10,1999,**yes**,asyncio_ asynchat,**3.6** (3.0\*),3.12,1999,**yes**,asyncio_
asyncore,**3.6** (3.0\*),3.10,1999,**yes**,asyncio_ asyncore,**3.6** (3.0\*),3.12,1999,**yes**,asyncio_
audioop,3.8 (3.0\*),3.10,1992,**yes**,\- audioop,3.11 (3.0\*),3.13,1992,**yes**,\-
binhex,3.8,3.10,1995,no,\- binhex,3.11,3.13,1995,no,\-
cgi,3.8 (2.0\*\*),3.10,1995,no,\- cgi,3.11 (2.0\*\*),3.13,1995,no,\-
cgitb,3.8 (2.0\*\*),3.10,1995,no,\- cgitb,3.11 (2.0\*\*),3.13,1995,no,\-
chunk,3.8,3.10,1999,no,\- chunk,3.11,3.13,1999,no,\-
crypt,3.8,3.10,1994,**yes (inactive)**,"legacycrypt_, bcrypt_, argon2cffi_, hashlib_, passlib_" crypt,3.11,3.13,1994,**yes (inactive)**,"legacycrypt_, bcrypt_, argon2-cffi_, hashlib_, passlib_"
formatter,**3.4**,3.10,1995,no,\- formatter,**3.4**,3.10,1995,no,\-
fpectl,**3.7**,**3.7**,1997,n/a,\- fpectl,**3.7**,**3.7**,1997,n/a,\-
imghdr,3.8,3.10,1992,no,"filetype_, puremagic_, python-magic_" imghdr,3.11,3.13,1992,no,"filetype_, puremagic_, python-magic_"
imp,**3.4**,3.10,1990/1995,no,importlib_ imp,**3.4**,3.12,1990/1995,no,importlib_
macpath,**3.7**,**3.8**,1990,n/a,\- macpath,**3.7**,**3.11**,1990,n/a,\-
msilib,3.8,3.10,2006,no,\- msilib,3.11,3.13,2006,no,\-
nntplib,3.8,3.10,1992,no,\- nntplib,3.11,3.13,1992,no,\-
nis,3.8 (3.0\*),3.10,1992,no,\- nis,3.8 (3.0\*),3.13,1992,no,\-
ossaudiodev,3.8,3.10,2002,no,\- ossaudiodev,3.11,3.13,2002,no,\-
parser,**2.5**,**3.9**,1993,**yes**,"ast_, astroid_, lib2to3.pgen2" pipes,3.11,3.13,1992,no,"subprocess_"
pipes,3.8,3.10,1992,no,"subprocess_" smtpd,"**3.4.7**, **3.5.4**",3.12,2001,**yes**,"aiosmtpd_"
smtpd,"**3.4.7**, **3.5.4**",3.10,2001,**yes**,"aiosmtpd_" sndhdr,3.11,3.13,1994,no,"filetype_, puremagic_, python-magic_"
sndhdr,3.8,3.10,1994,no,"filetype_, puremagic_, python-magic_" spwd,3.11,3.13,2005,no,"python-pam_"
spwd,3.8,3.10,2005,no,"python-pam_, simplepam_" sunau,3.11 (3.0\*),3.13,1993,no,\-
sunau,3.8 (3.0\*),3.10,1993,no,\- telnetlib,3.11 (3.0\*),3.13,1997,no,"telnetlib3_, Exscript_"
telnetlib,3.8 (3.0\*),3.10,1997,no,"telnetlib3_, Exscript_" uu,3.11,3.13,1994,no,\-
uu,3.8,3.10,1994,no,\- xdrlib,3.11,3.13,1992/1996,no,\-
xdrlib,3.8,3.10,1992/1996,no,\-
.. _aiosmtpd: https://pypi.org/project/aiosmtpd/ .. _aiosmtpd: https://pypi.org/project/aiosmtpd/
.. _argon2cffi: https://pypi.org/project/argon2-cffi/ .. _argon2-cffi: https://pypi.org/project/argon2-cffi/
.. _ast: https://docs.python.org/3/library/ast.html .. _ast: https://docs.python.org/3/library/ast.html
.. _astroid: https://pypi.org/project/astroid/ .. _astroid: https://pypi.org/project/astroid/
.. _asyncio: https://docs.python.org/3/library/hashlib.html .. _asyncio: https://docs.python.org/3/library/hashlib.html
@ -235,9 +199,9 @@ encode binary email attachments.
Module type Module type
pure Python pure Python
Deprecated in Deprecated in
3.8 3.11
To be removed in To be removed in
3.10 3.13
Has a designated expert Has a designated expert
no no
Substitute Substitute
@ -252,16 +216,6 @@ format has been replaced by MIME. The uu codec is provided by the ``binascii``
module. There's also ``encodings/uu_codec.py`` which is a codec for the module. There's also ``encodings/uu_codec.py`` which is a codec for the
same encoding; it should also be deprecated. same encoding; it should also be deprecated.
Module type
pure Python
Deprecated in
3.8
To be removed in
3.10
Has a designated expert
no
Substitute
**none**
xdrlib xdrlib
~~~~~~ ~~~~~~
@ -271,17 +225,6 @@ the Sun External Data Representation Standard. XDR is an old binary
serialization format from 1987. These days it's rarely used outside serialization format from 1987. These days it's rarely used outside
specialized domains like NFS. specialized domains like NFS.
Module type
pure Python
Deprecated in
3.8
To be removed in
3.10
Has a designated expert
no
Substitute
**none**
Multimedia modules Multimedia modules
------------------ ------------------
@ -302,16 +245,6 @@ may be a compelling argument to keep the ``aifc`` module in the standard
library. The file format is stable and the module does not require much library. The file format is stable and the module does not require much
maintenance. The strategic benefits for Python may outmatch the burden. maintenance. The strategic benefits for Python may outmatch the burden.
Module type
pure Python (depends on some functions from `audioop`_ C extension)
Deprecated in
3.8
To be removed in
3.10
Has a designated expert
yes, but expert is currently inactive.
Substitute
**none**
audioop audioop
~~~~~~~ ~~~~~~~
@ -328,16 +261,6 @@ the ``audioop`` module is converted into a private implementation detail,
e.g. ``_audioop`` with ``byteswap``, ``alaw2lin``, ``ulaw2lin``, ``lin2alaw``, e.g. ``_audioop`` with ``byteswap``, ``alaw2lin``, ``ulaw2lin``, ``lin2alaw``,
``lin2ulaw``, and ``lin2adpcm``. ``lin2ulaw``, and ``lin2adpcm``.
Module type
C extension
Deprecated in
3.8
To be removed in
3.10
Has a designated expert
yes
Substitute
**none**
chunk chunk
~~~~~ ~~~~~
@ -347,16 +270,6 @@ support for reading and writing Electronic Arts' Interchange File Format.
IFF is an old audio file format originally introduced for Commodore and IFF is an old audio file format originally introduced for Commodore and
Amiga. The format is no longer relevant. Amiga. The format is no longer relevant.
Module type
pure Python
Deprecated in
3.8
To be removed in
3.10
Has a designated expert
no
Substitute
**none**
imghdr imghdr
~~~~~~ ~~~~~~
@ -366,18 +279,6 @@ simple tool to guess the image file format from the first 32 bytes
of a file or buffer. It supports only a limited number of formats and of a file or buffer. It supports only a limited number of formats and
neither returns resolution nor color depth. neither returns resolution nor color depth.
Module type
pure Python
Deprecated in
3.8
To be removed in
3.10
Has a designated expert
no
Substitute
`puremagic <https://pypi.org/project/puremagic/>`_,
`filetype <https://pypi.org/project/filetype/>`_,
`python-magic <https://pypi.org/project/python-magic/>`_
ossaudiodev ossaudiodev
~~~~~~~~~~~ ~~~~~~~~~~~
@ -400,16 +301,6 @@ The standard library used to have more audio-related modules. The other
audio device interface (``audiodev``, ``linuxaudiodev``, ``sunaudiodev``) audio device interface (``audiodev``, ``linuxaudiodev``, ``sunaudiodev``)
were removed in 2007 as part of the :pep:`3108` stdlib re-organization. were removed in 2007 as part of the :pep:`3108` stdlib re-organization.
Module type
C extension
Deprecated in
3.8
To be removed in
3.10
Has a designated expert
no
Substitute
**none**
sndhdr sndhdr
~~~~~~ ~~~~~~
@ -420,18 +311,6 @@ format, channels, frame rate, and sample widths from the first 512 bytes of
a file or buffer. The module only supports AU, AIFF, HCOM, VOC, WAV, and a file or buffer. The module only supports AU, AIFF, HCOM, VOC, WAV, and
other ancient formats. other ancient formats.
Module type
pure Python (depends on `audioop`_ C extension for some operations)
Deprecated in
3.8
To be removed in
3.10
Has a designated expert
no
Substitute
`puremagic <https://pypi.org/project/puremagic/>`_,
`filetype <https://pypi.org/project/filetype/>`_,
`python-magic <https://pypi.org/project/python-magic/>`_
sunau sunau
~~~~~ ~~~~~
@ -439,17 +318,6 @@ sunau
The `sunau <https://docs.python.org/3/library/sunhdr.html>`_ module provides The `sunau <https://docs.python.org/3/library/sunhdr.html>`_ module provides
support for Sun AU sound format. It's yet another old, obsolete file format. support for Sun AU sound format. It's yet another old, obsolete file format.
Module type
pure Python (depends on `audioop`_ C extension for some operations)
Deprecated in
3.8
To be removed in
3.10
Has a designated expert
no
Substitute
**none**
Networking modules Networking modules
------------------ ------------------
@ -460,16 +328,6 @@ asynchat
The `asynchat <https://docs.python.org/3/library/asynchat.html>`_ module The `asynchat <https://docs.python.org/3/library/asynchat.html>`_ module
is built on top of `asyncore`_ and has been deprecated since Python 3.6. is built on top of `asyncore`_ and has been deprecated since Python 3.6.
Module type
pure Python
Deprecated in
3.6
Removed in
3.10
Has a designated expert
yes
Substitute
asyncio
asyncore asyncore
~~~~~~~~ ~~~~~~~~
@ -483,17 +341,6 @@ The ``asyncore`` module is also used in stdlib tests. The tests for
based on ``asyncore``. These tests must be updated to use asyncio or based on ``asyncore``. These tests must be updated to use asyncio or
threading. threading.
Module type
pure Python
Deprecated in
3.6
Removed in
3.10
Has a designated expert
yes
Substitute
asyncio
cgi cgi
~~~ ~~~
@ -513,17 +360,6 @@ deprecated for a while and are actually aliases for
function ``cgi.quote`` has been deprecated in favor of ``html.quote`` function ``cgi.quote`` has been deprecated in favor of ``html.quote``
with secure default values. with secure default values.
Module type
pure Python
Deprecated in
3.8 (originally proposed for 2.0 by :pep:`206`)
To be removed in
3.10
Has a designated expert
no
Substitute
**none**
cgitb cgitb
~~~~~ ~~~~~
@ -535,16 +371,6 @@ The ``cgitb`` module is not used by any major Python web framework (Django,
Pyramid, Plone, Flask, CherryPy, or Bottle). Only Paste uses it in an Pyramid, Plone, Flask, CherryPy, or Bottle). Only Paste uses it in an
optional debugging middleware. optional debugging middleware.
Module type
pure Python
Deprecated in
3.8 (originally proposed for 2.0 by :pep:`206`)
To be removed in
3.10
Has a designated expert
no
Substitute
**none**
smtpd smtpd
~~~~~ ~~~~~
@ -554,16 +380,6 @@ a simple implementation of a SMTP mail server. The module documentation
marks the module as deprecated and recommends ``aiosmtpd`` instead. The marks the module as deprecated and recommends ``aiosmtpd`` instead. The
deprecation message was added in releases 3.4.7, 3.5.4, and 3.6.1. deprecation message was added in releases 3.4.7, 3.5.4, and 3.6.1.
Module type
pure Python
Deprecated in
**3.4.7**, **3.5.4**, **3.6.1**
To be removed in
3.10
Has a designated expert
yes
Substitute
aiosmtpd
nntplib nntplib
~~~~~~~ ~~~~~~~
@ -584,16 +400,6 @@ external news server. The servers are sometimes unavailable, too slow, or do
not work correctly over IPv6. The situation causes flaky test runs on not work correctly over IPv6. The situation causes flaky test runs on
buildbots. buildbots.
Module type
pure Python
Deprecated in
3.8
To be removed in
3.10
Has a designated expert
no
Substitute
**none**
telnetlib telnetlib
~~~~~~~~~ ~~~~~~~~~
@ -601,16 +407,6 @@ telnetlib
The `telnetlib <https://docs.python.org/3/library/telnetlib.html>`_ module The `telnetlib <https://docs.python.org/3/library/telnetlib.html>`_ module
provides a Telnet class that implements the Telnet protocol. provides a Telnet class that implements the Telnet protocol.
Module type
pure Python
Deprecated in
3.8
To be removed in
3.10
Substitute
telnetlib3_,
Exscript_
Operating system interface Operating system interface
-------------------------- --------------------------
@ -638,20 +434,6 @@ quality and insecure. Users are discouraged to use them.
password modification operations must go through PAM (pluggable password modification operations must go through PAM (pluggable
authentication module), see `spwd`_ deprecation. authentication module), see `spwd`_ deprecation.
Module type
C extension + Python module
Deprecated in
3.8
To be removed in
3.10
Has a designated expert
yes, but expert is currently inactive.
Substitute
`legacycrypt <https://pypi.org/project/legacycrypt/>`_ (ctypes wrapper),
`bcrypt <https://pypi.org/project/bcrypt/>`_,
`passlib <https://pypi.org/project/passlib/>`_,
`argon2cffi <https://pypi.org/project/argon2-cffi/>`_,
hashlib module (PBKDF2, scrypt)
macpath macpath
~~~~~~~ ~~~~~~~
@ -660,16 +442,6 @@ The `macpath <https://docs.python.org/3/library/macpath.html>`_ module
provides Mac OS 9 implementation of ``os.path`` routines. Mac OS 9 is no longer provides Mac OS 9 implementation of ``os.path`` routines. Mac OS 9 is no longer
supported. supported.
Module type
pure Python
Deprecated in
3.7
Removed in
3.8
Has a designated expert
n/a
Substitute
**none**
nis nis
~~~ ~~~
@ -681,16 +453,6 @@ designed successor NIS+ from 1992 never took off. For a long time, libc's
Name Service Switch, LDAP, and Kerberos/GSSAPI are considered a more powerful Name Service Switch, LDAP, and Kerberos/GSSAPI are considered a more powerful
and more secure replacement of NIS. and more secure replacement of NIS.
Module type
C extension
Deprecated in
3.8
To be removed in
3.10
Has a designated expert
no
Substitute
**none**
spwd spwd
~~~~ ~~~~
@ -710,17 +472,6 @@ Functions like ``getspnam(3)`` access the ``/etc/shadow`` file directly. This
is dangerous and even forbidden for confined services on systems with a is dangerous and even forbidden for confined services on systems with a
security engine like SELinux or AppArmor. security engine like SELinux or AppArmor.
Module type
C extension
Deprecated in
3.8
To be removed in
3.10
Has a designated expert
no
Substitute
`python-pam <https://pypi.org/project/python-pam/>`_,
`simpleplam <https://pypi.org/project/simplepam/>`_
Misc modules Misc modules
------------ ------------
@ -731,16 +482,6 @@ formatter
The `formatter <https://docs.python.org/3/library/formatter.html>`_ module The `formatter <https://docs.python.org/3/library/formatter.html>`_ module
is an old text formatting module which has been deprecated since Python 3.4. is an old text formatting module which has been deprecated since Python 3.4.
Module type
pure Python
Deprecated in
3.4
To be removed in
3.10
Has a designated expert
no
Substitute
*n/a*
imp imp
~~~ ~~~
@ -751,16 +492,6 @@ predecessor of the
functions have been deprecated since Python 3.3 and the module since functions have been deprecated since Python 3.3 and the module since
Python 3.4. Python 3.4.
Module type
C extension
Deprecated in
3.4
To be removed in
3.10
Has a designated expert
yes, experts have deprecated the module
Substitute
importlib
msilib msilib
~~~~~~ ~~~~~~
@ -775,47 +506,6 @@ Windows installer, too.
Microsoft is slowly moving away from MSI in favor of Windows 10 Apps (AppX) Microsoft is slowly moving away from MSI in favor of Windows 10 Apps (AppX)
as new deployment model [3]_. as new deployment model [3]_.
Module type
C extension + Python code
Deprecated in
3.8
To be removed in
3.10
Has a designated expert
no
Substitute
**none**
parser
~~~~~~
The `parser <https://docs.python.org/3/library/parser.html>`_ module provides
an interface to Pythons internal parser and bytecode compiler. The stdlib
has superior ways to interact with the parse tree. From Python 2.5 onward,
it's much more convenient to cut in at the Abstract Syntax Tree (AST)
generation and compilation stage.
The ``parser`` module causes additional work. It's C code that must be
kept in sync with any change to Python's grammar and internal parser.
Pablo wants to remove the parser module and promote lib2to3's pgen2 instead
[6]_.
Most importantly the presence of the ``parser`` module makes it harder to
switch to something more powerful than a LL(1) parser [7]_. Since the
``parser`` module is documented as deprecated since Python 2.5 and a new
parsing technology is planned for 3.9, the ``parser`` module is scheduled for
removal in 3.9.
Module type
C extension
Deprecated in
3.8, documented as deprecated since **2.5**
To be removed in
**3.9**
Has a designated expert
yes, experts have deprecated the module.
Substitute
ast, lib2to3.pgen2
pipes pipes
~~~~~ ~~~~~
@ -825,16 +515,6 @@ helpers to pipe the input of one command into the output of another command.
The module is built on top of ``os.popen``. Users are encouraged to use The module is built on top of ``os.popen``. Users are encouraged to use
the subprocess module instead. the subprocess module instead.
Module type
pure Python
Deprecated in
3.8
To be removed in
3.10
Has a designated expert
no
Substitute
subprocess module
Removed modules Removed modules
=============== ===============
@ -848,17 +528,6 @@ It also required a configure flag that caused an ABI incompatibility. The
module was removed in 3.7 by Nathaniel J. Smith in module was removed in 3.7 by Nathaniel J. Smith in
`bpo-29137 <https://bugs.python.org/issue29137>`_. `bpo-29137 <https://bugs.python.org/issue29137>`_.
Module type
C extension + CAPI
Deprecated in
3.7
Removed in
3.7
Has a designated expert
n/a
Substitute
**none**
Modules to keep Modules to keep
=============== ===============
@ -892,15 +561,6 @@ The PyPI packages ``colormath``, ``colour``, and ``colorspacious`` provide more
advanced features. The Pillow library is better suited to transform images advanced features. The Pillow library is better suited to transform images
between color systems. between color systems.
Module type
pure Python
Has a designated expert
no
Substitute
`colormath <https://pypi.org/project/colormath/>`_,
`colour <https://pypi.org/project/colour/>`_
`colorspacious <https://pypi.org/project/colorspacious/>`_,
`Pillow <https://pypi.org/project/Pillow/>`_
fileinput fileinput
--------- ---------
@ -913,10 +573,6 @@ can be implemented with the ``argparser`` module.
Several core developers expressed their interest to keep the module in the Several core developers expressed their interest to keep the module in the
standard library, as it is handy for quick scripts. standard library, as it is handy for quick scripts.
Module type
pure Python
Has a designated expert
no
lib2to3 lib2to3
------- -------
@ -927,10 +583,6 @@ the ``2to3`` command to transpile Python 2 code to Python 3 code.
The package is useful for other tasks besides porting code from Python 2 to The package is useful for other tasks besides porting code from Python 2 to
3. For example, `Black`_ uses it for code reformatting. 3. For example, `Black`_ uses it for code reformatting.
Module type
pure Python
Has a designated expert
no
getopt getopt
------ ------
@ -942,12 +594,6 @@ Although users are encouraged to use ``argparse`` instead, the ``getopt`` module
still widely used. The module is small, simple, and handy for C developers still widely used. The module is small, simple, and handy for C developers
to write simple Python scripts. to write simple Python scripts.
Module type
pure Python
Has a designated expert
no
Substitute
argparse
optparse optparse
-------- --------
@ -958,14 +604,6 @@ the predecessor of the ``argparse`` module.
Although it has been deprecated for many years, it's still too widely used Although it has been deprecated for many years, it's still too widely used
to remove it. to remove it.
Module type
pure Python
Deprecated in
3.2
Has a designated expert
yes
Substitute
argparse
wave wave
---- ----
@ -984,42 +622,6 @@ module. To remove ``wave``'s dependency on ``audioop``, the byte swap
function could be either be moved to another module (e.g. ``operator``) or function could be either be moved to another module (e.g. ``operator``) or
the ``array`` module could gain support for 24-bit (3-byte) arrays. the ``array`` module could gain support for 24-bit (3-byte) arrays.
Module type
pure Python (depends on *byteswap* from `audioop`_ C extension)
Has a designated expert
no
Future maintenance of removed modules
=====================================
The main goal of the PEP is to reduce the burden and workload on the Python
core developer team. Therefore, removed modules will not be maintained by
the core team as separate PyPI packages. However the removed code, tests and
documentation may be moved into a new Git repository, so community members
have a place from which they can pick up and fork code.
A first draft of a `legacylib <https://github.com/tiran/legacylib>`_
repository is available on my private GitHub account. The modules could be
made available on PyPI. The Python core team will not publish or maintain
the packages. It is my hope that members of the Python community will
adopt, maintain, and perhaps improve the deprecated modules.
It's my hope that some of the deprecated modules will be picked up and
adopted by users that actually care about them. For example, ``colorsys`` and
``imghdr`` are useful modules, but have limited feature set. A fork of
``imghdr`` can add new features and support for more image formats, without
being constrained by Python's release cycle.
Most of the modules are in pure Python and can be easily packaged. Some
depend on a simple C module, e.g. `audioop`_ and `crypt`_. Since `audioop`_
does not depend on any external libraries, it can be shipped as binary
wheels with some effort. Other C modules can be replaced with ``ctypes`` or ``cffi``.
For example, I created `legacycrypt`_, which provides a full implementation of
``crypt``. It is implemented on top of a ctypes wrapper around ``libxcrypt``
and ``libcrypt`` instead of a C extension like the original ``_crypt``
module.
Discussions Discussions
=========== ===========
@ -1045,13 +647,29 @@ Discussions
stdlib doesn't have a replacement for the servers, yet. stdlib doesn't have a replacement for the servers, yet.
Rejected Ideas
==============
Creating/maintaining a separate repo for the deprecated modules
---------------------------------------------------------------
It was previously proposed to create a separate repository containing the
deprecated modules packaged for installation. One of the PEP authors went so far
as to create a `demo repository <https://github.com/tiran/legacylib>`_ . In the
end, though, it was decided that the added workload to create and maintain such
a repo officially wasn't justified, as the source code will continue to be
available in the CPython repository for people to vendor as necessary. Similar
work has also not been done when previous modules were deprecated and removed,
and it seemingly wasn't an undue burden on the community.
Update history Update history
============== ==============
Update 1 Update 1
-------- --------
* Deprecate `parser`_ module * Deprecate parser module
* Keep `fileinput`_ module * Keep `fileinput`_ module
* Elaborate why ``crypt`` and ``spwd`` are dangerous and bad * Elaborate why ``crypt`` and ``spwd`` are dangerous and bad
* Improve sections for `cgitb`_, `colorsys`_, `nntplib`_, and `smtpd`_ modules * Improve sections for `cgitb`_, `colorsys`_, `nntplib`_, and `smtpd`_ modules
@ -1079,6 +697,11 @@ Update 3
* Keep the legacy email API modules. Internal deprecations will be * Keep the legacy email API modules. Internal deprecations will be
handled separately. handled separately.
Update 4
--------
* Add Brett as a co-author.
* Retarget the PEP for Python 3.11.
References References
========== ==========
@ -1096,7 +719,8 @@ References
Copyright Copyright
========= =========
This document has been placed in the public domain. This document is placed in the public domain or under the
CC0-1.0-Universal license, whichever is more permissive.