- Release
- Date
This article explains the new features in Python 3.13, compared to 3.12.
For full details, see the changelog <changelog>
.
Note
Prerelease users should be aware that this document is currently in draft form. It will be updated substantially as Python 3.13 moves towards release, so it's worth checking back even after reading earlier versions.
- None yet.
- Add support for recursive wildcards in
pathlib.PurePath.match
. (Contributed by Barney Gale in73435
.) - Add follow_symlinks keyword-only argument to
pathlib.Path.glob
and~pathlib.Path.rglob
. (Contributed by Barney Gale in77609
.)
594
: Remove the!telnetlib
module, deprecated in Python 3.11: use the projects telnetlib3 or Exscript instead. (Contributed by Victor Stinner in104773
.)- Remove the
2to3
program and the!lib2to3
module, deprecated in Python 3.11. (Contributed by Victor Stinner in104780
.) - Namespaces
typing.io
andtyping.re
, deprecated in Python 3.8, are now removed. The items in those namespaces can be imported directly fromtyping
. (Contributed by Sebastian Rittau in92871
.) - Remove the untested and undocumented
webbrowser
!MacOSX
class, deprecated in Python 3.11. Use the!MacOSXOSAScript
class (introduced in Python 3.2) instead. (Contributed by Hugo van Kemenade in104804
.) - Remove support for using
pathlib.Path
objects as context managers. This functionality was deprecated and made a no-op in Python 3.9. - Remove the undocumented
!configparser.LegacyInterpolation
class, deprecated in the docstring since Python 3.2, and with a deprecation warning since Python 3.11. (Contributed by Hugo van Kemenade in104886
.) - Remove the
!turtle.RawTurtle.settiltangle
method, deprecated in docs since Python 3.1 and with a deprecation warning since Python 3.11. (Contributed by Hugo van Kemenade in104876
.) Removed the following
unittest
functions, deprecated in Python 3.11:!unittest.findTestCases
!unittest.makeSuite
!unittest.getTestCaseNames
Use
~unittest.TestLoader
methods instead:unittest.TestLoader.loadTestsFromModule
unittest.TestLoader.loadTestsFromTestCase
unittest.TestLoader.getTestCaseNames
(Contributed by Hugo van Kemenade in
104835
.)594
: Remove the!cgi
and :mod:!cgitb` modules, deprecated in Python 3.11.cgi.FieldStorage
can typically be replaced withurllib.parse.parse_qsl
forGET
andHEAD
requests, and theemail.message
module or multipart PyPI project forPOST
andPUT
.cgi.parse()
can be replaced by callingurllib.parse.parse_qs
directly on the desired query string, except formultipart/form-data
input, which can be handled as described forcgi.parse_multipart()
.cgi.parse_multipart()
can be replaced with the functionality in theemail
package (e.g.email.message.EmailMessage
andemail.message.Message
) which implements the same MIME RFCs, or with the multipart PyPI project.cgi.parse_header()
can be replaced with the functionality in theemail
package, which implements the same MIME RFCs. For example, withemail.message.EmailMessage
:from email.message import EmailMessage msg = EmailMessage() msg['content-type'] = 'application/json; charset="utf8"' main, params = msg.get_content_type(), msg['content-type'].params
(Contributed by Victor Stinner in
104773
.)594
: Remove the!sndhdr
module, deprecated in Python 3.11: use the projects filetype, puremagic, or python-magic instead. (Contributed by Victor Stinner in104773
.)594
: Remove the!pipes
module, deprecated in Python 3.11: use thesubprocess
module instead. (Contributed by Victor Stinner in104773
.)594
: Remove the!ossaudiodev
module, deprecated in Python 3.11: use the pygame project for audio playback. (Contributed by Victor Stinner in104780
.)594
: Remove the!sunau
module, deprecated in Python 3.11. (Contributed by Victor Stinner in104773
.)594
: Remove the!mailcap
module, deprecated in Python 3.11. Themimetypes
module provides an alternative. (Contributed by Victor Stinner in104773
.)594
: Remove the!spwd
module, deprecated in Python 3.11: the python-pam project can be used instead. (Contributed by Victor Stinner in104773
.)594
: Remove the!nntplib
module, deprecated in Python 3.11: the PyPI nntplib project can be used instead. (Contributed by Victor Stinner in104773
.)594
: Remove the!nis
module, deprecated in Python 3.11. (Contributed by Victor Stinner in104773
.)594
: Remove the!xdrlib
module, deprecated in Python 3.11. (Contributed by Victor Stinner in104773
.)594
: Remove the!msilib
module, deprecated in Python 3.11. (Contributed by Zachary Ware in104773
.)594
: Remove the!crypt
module and its private!_crypt
extension, deprecated in Python 3.11. Thehashlib
module is a potential replacement for certain use cases. Otherwise, the following PyPI projects can be used:- bcrypt: Modern password hashing for your software and your servers.
- passlib: Comprehensive password hashing framework supporting over 30 schemes.
- argon2-cffi: The secure Argon2 password hashing algorithm.
- legacycrypt: Wrapper to the POSIX crypt library call and associated functionality.
(Contributed by Victor Stinner in
104773
.)594
: Remove the!uu
module, deprecated in Python 3.11: thebase64
module is a modern alternative. (Contributed by Victor Stinner in104773
.)594
: Remove the!aifc
module, deprecated in Python 3.11. (Contributed by Victor Stinner in104773
.)594
: Remove the!audioop
module, deprecated in Python 3.11. (Contributed by Victor Stinner in104773
.)594
: Remove the!chunk
module, deprecated in Python 3.11. (Contributed by Victor Stinner in104773
.)- Remove support for the keyword-argument method of creating
typing.TypedDict
types, deprecated in Python 3.11. (Contributed by Tomas Roun in104786
.) 594
: Remove the!imghdr
module, deprecated in Python 3.11: use the projects filetype, puremagic, or python-magic instead. (Contributed by Victor Stinner in104773
.)- Remove the untested and undocumented
!unittest.TestProgram.usageExit
method, deprecated in Python 3.11. (Contributed by Hugo van Kemenade in104992
.) - Remove the
!tkinter.tix
module, deprecated in Python 3.6. The third-party Tix library which the module wrapped is unmaintained. (Contributed by Zachary Ware in75552
.)
This section lists previously described changes and other bugfixes that may require changes to your code.
- You no longer have to define the
PY_SSIZE_T_CLEAN
macro before includingPython.h
when using#
formats informat codes <arg-parsing-string-and-buffers>
. APIs accepting the format codes always usePy_ssize_t
for#
formats. (Contributed by Inada Naoki in104922
.)