| |
| **************************** |
| What's New In Python 3.13 |
| **************************** |
| |
| :Release: |release| |
| :Date: |today| |
| |
| .. Rules for maintenance: |
| |
| * Anyone can add text to this document. Do not spend very much time |
| on the wording of your changes, because your text will probably |
| get rewritten to some degree. |
| |
| * The maintainer will go through Misc/NEWS periodically and add |
| changes; it's therefore more important to add your changes to |
| Misc/NEWS than to this file. |
| |
| * This is not a complete list of every single change; completeness |
| is the purpose of Misc/NEWS. Some changes I consider too small |
| or esoteric to include. If such a change is added to the text, |
| I'll just remove it. (This is another reason you shouldn't spend |
| too much time on writing your addition.) |
| |
| * If you want to draw your new text to the attention of the |
| maintainer, add 'XXX' to the beginning of the paragraph or |
| section. |
| |
| * It's OK to just add a fragmentary note about a change. For |
| example: "XXX Describe the transmogrify() function added to the |
| socket module." The maintainer will research the change and |
| write the necessary text. |
| |
| * You can comment out your additions if you like, but it's not |
| necessary (especially when a final release is some months away). |
| |
| * Credit the author of a patch or bugfix. Just the name is |
| sufficient; the e-mail address isn't necessary. |
| |
| * It's helpful to add the issue number as a comment: |
| |
| XXX Describe the transmogrify() function added to the socket |
| module. |
| (Contributed by P.Y. Developer in :gh:`12345`.) |
| |
| This saves the maintainer the effort of going through the VCS log |
| when researching a change. |
| |
| This article explains the new features in Python 3.13, compared to 3.12. |
| |
| For full details, see the :ref:`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. |
| |
| |
| Summary -- Release highlights |
| ============================= |
| |
| .. This section singles out the most important changes in Python 3.13. |
| Brevity is key. |
| |
| |
| .. PEP-sized items next. |
| |
| |
| |
| New Features |
| ============ |
| |
| |
| |
| Other Language Changes |
| ====================== |
| |
| |
| |
| New Modules |
| =========== |
| |
| * None yet. |
| |
| |
| Improved Modules |
| ================ |
| |
| pathlib |
| ------- |
| |
| * Add *follow_symlinks* keyword-only argument to :meth:`pathlib.Path.glob` and |
| :meth:`~pathlib.Path.rglob`. |
| (Contributed by Barney Gale in :gh:`77609`.) |
| |
| Optimizations |
| ============= |
| |
| |
| |
| |
| Deprecated |
| ========== |
| |
| |
| |
| Removed |
| ======= |
| |
| * :pep:`594`: Remove the :mod:`!telnetlib` module, deprecated in Python 3.11: |
| use the projects `telnetlib3 <https://pypi.org/project/telnetlib3/>`_ or |
| `Exscript <https://pypi.org/project/Exscript/>`_ instead. |
| (Contributed by Victor Stinner in :gh:`104773`.) |
| |
| * Remove the ``2to3`` program and the :mod:`!lib2to3` module, |
| deprecated in Python 3.11. |
| (Contributed by Victor Stinner in :gh:`104780`.) |
| |
| * Namespaces ``typing.io`` and ``typing.re``, deprecated in Python 3.8, |
| are now removed. The items in those namespaces can be imported directly |
| from :mod:`typing`. (Contributed by Sebastian Rittau in :gh:`92871`.) |
| |
| * Remove the untested and undocumented :mod:`webbrowser` :class:`!MacOSX` class, |
| deprecated in Python 3.11. |
| Use the :class:`!MacOSXOSAScript` class (introduced in Python 3.2) instead. |
| (Contributed by Hugo van Kemenade in :gh:`104804`.) |
| |
| * Remove support for using :class:`pathlib.Path` objects as context managers. |
| This functionality was deprecated and made a no-op in Python 3.9. |
| |
| * Remove the undocumented :class:`!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 in :gh:`104886`.) |
| |
| * Remove the :meth:`!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 in :gh:`104876`.) |
| |
| * Removed the following :mod:`unittest` functions, deprecated in Python 3.11: |
| |
| * :func:`!unittest.findTestCases` |
| * :func:`!unittest.makeSuite` |
| * :func:`!unittest.getTestCaseNames` |
| |
| Use :class:`~unittest.TestLoader` methods instead: |
| |
| * :meth:`unittest.TestLoader.loadTestsFromModule` |
| * :meth:`unittest.TestLoader.loadTestsFromTestCase` |
| * :meth:`unittest.TestLoader.getTestCaseNames` |
| |
| (Contributed by Hugo van Kemenade in :gh:`104835`.) |
| |
| * :pep:`594`: Remove the :mod:`!cgi`` and :mod:`!cgitb` modules, |
| deprecated in Python 3.11. |
| |
| * ``cgi.FieldStorage`` can typically be replaced with |
| :func:`urllib.parse.parse_qsl` for ``GET`` and ``HEAD`` requests, and the |
| :mod:`email.message` module or `multipart |
| <https://pypi.org/project/multipart/>`__ PyPI project for ``POST`` and |
| ``PUT``. |
| |
| * ``cgi.parse()`` can be replaced by calling :func:`urllib.parse.parse_qs` |
| directly on the desired query string, except for ``multipart/form-data`` |
| input, which can be handled as described for ``cgi.parse_multipart()``. |
| |
| * ``cgi.parse_multipart()`` can be replaced with the functionality in the |
| :mod:`email` package (e.g. :class:`email.message.EmailMessage` and |
| :class:`email.message.Message`) which implements the same MIME RFCs, or |
| with the `multipart <https://pypi.org/project/multipart/>`__ PyPI project. |
| |
| * ``cgi.parse_header()`` can be replaced with the functionality in the |
| :mod:`email` package, which implements the same MIME RFCs. For example, |
| with :class:`email.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 :gh:`104773`.) |
| |
| * :pep:`594`: Remove the :mod:`!sndhdr` module, deprecated in Python 3.11: use |
| the projects `filetype <https://pypi.org/project/filetype/>`_, `puremagic |
| <https://pypi.org/project/puremagic/>`_, or `python-magic |
| <https://pypi.org/project/python-magic/>`_ instead. |
| (Contributed by Victor Stinner in :gh:`104773`.) |
| |
| * :pep:`594`: Remove the :mod:`!pipes` module, deprecated in Python 3.11: |
| use the :mod:`subprocess` module instead. |
| (Contributed by Victor Stinner in :gh:`104773`.) |
| |
| * :pep:`594`: Remove the :mod:`!ossaudiodev` module, deprecated in Python 3.11: |
| use the `pygame project <https://www.pygame.org/>`_ for audio playback. |
| (Contributed by Victor Stinner in :gh:`104780`.) |
| |
| * :pep:`594`: Remove the :mod:`!sunau` module, deprecated in Python 3.11. |
| (Contributed by Victor Stinner in :gh:`104773`.) |
| |
| * :pep:`594`: Remove the :mod:`!mailcap` module, deprecated in Python 3.11. |
| The :mod:`mimetypes` module provides an alternative. |
| (Contributed by Victor Stinner in :gh:`104773`.) |
| |
| * :pep:`594`: Remove the :mod:`!spwd` module, deprecated in Python 3.11: |
| the `python-pam project <https://pypi.org/project/python-pam/>`_ can be used |
| instead. |
| (Contributed by Victor Stinner in :gh:`104773`.) |
| |
| * :pep:`594`: Remove the :mod:`!nntplib` module, deprecated in Python 3.11: |
| the `PyPI nntplib project <https://pypi.org/project/nntplib/>`_ can be used |
| instead. |
| (Contributed by Victor Stinner in :gh:`104773`.) |
| |
| * :pep:`594`: Remove the :mod:`!nis` module, deprecated in Python 3.11. |
| (Contributed by Victor Stinner in :gh:`104773`.) |
| |
| * :pep:`594`: Remove the :mod:`!xdrlib` module, deprecated in Python 3.11. |
| (Contributed by Victor Stinner in :gh:`104773`.) |
| |
| * :pep:`594`: Remove the :mod:`!msilib` module, deprecated in Python 3.11. |
| (Contributed by Zachary Ware in :gh:`104773`.) |
| |
| * :pep:`594`: Remove the :mod:`!crypt` module and its private :mod:`!_crypt` |
| extension, deprecated in Python 3.11. |
| The :mod:`hashlib` module is a potential replacement for certain use cases. |
| Otherwise, the following PyPI projects can be used: |
| |
| * `bcrypt <https://pypi.org/project/bcrypt/>`_: |
| Modern password hashing for your software and your servers. |
| * `passlib <https://pypi.org/project/passlib/>`_: |
| Comprehensive password hashing framework supporting over 30 schemes. |
| * `argon2-cffi <https://pypi.org/project/argon2-cffi/>`_: |
| The secure Argon2 password hashing algorithm. |
| * `legacycrypt <https://pypi.org/project/legacycrypt/>`_: |
| Wrapper to the POSIX crypt library call and associated functionality. |
| |
| (Contributed by Victor Stinner in :gh:`104773`.) |
| |
| * :pep:`594`: Remove the :mod:`!uu` module, deprecated in Python 3.11: |
| the :mod:`base64` module is a modern alternative. |
| (Contributed by Victor Stinner in :gh:`104773`.) |
| |
| * :pep:`594`: Remove the :mod:`!aifc` module, deprecated in Python 3.11. |
| (Contributed by Victor Stinner in :gh:`104773`.) |
| |
| * :pep:`594`: Remove the :mod:`!audioop` module, deprecated in Python 3.11. |
| (Contributed by Victor Stinner in :gh:`104773`.) |
| |
| * :pep:`594`: Remove the :mod:`!chunk` module, deprecated in Python 3.11. |
| (Contributed by Victor Stinner in :gh:`104773`.) |
| |
| * Remove support for the keyword-argument method of creating |
| :class:`typing.TypedDict` types, deprecated in Python 3.11. |
| (Contributed by Tomas Roun in :gh:`104786`.) |
| |
| * :pep:`594`: Remove the :mod:`!imghdr` module, deprecated in Python 3.11: |
| use the projects |
| `filetype <https://pypi.org/project/filetype/>`_, |
| `puremagic <https://pypi.org/project/puremagic/>`_, |
| or `python-magic <https://pypi.org/project/python-magic/>`_ instead. |
| (Contributed by Victor Stinner in :gh:`104773`.) |
| |
| * Remove the untested and undocumented :meth:`!unittest.TestProgram.usageExit` |
| method, deprecated in Python 3.11. |
| (Contributed by Hugo van Kemenade in :gh:`104992`.) |
| |
| * Remove the :mod:`!tkinter.tix` module, deprecated in Python 3.6. The |
| third-party Tix library which the module wrapped is unmaintained. |
| (Contributed by Zachary Ware in :gh:`75552`.) |
| |
| |
| |
| Porting to Python 3.13 |
| ====================== |
| |
| This section lists previously described changes and other bugfixes |
| that may require changes to your code. |
| |
| |
| Build Changes |
| ============= |
| |
| |
| C API Changes |
| ============= |
| |
| New Features |
| ------------ |
| |
| Porting to Python 3.13 |
| ---------------------- |
| |
| Deprecated |
| ---------- |
| |
| Removed |
| ------- |
| |