1**************************** 2 What's New In Python 3.9 3**************************** 4 5:Editor: Łukasz Langa 6 7.. Rules for maintenance: 8 9 * Anyone can add text to this document. Your text might get 10 rewritten to some degree. 11 12 * The maintainer will go through Misc/NEWS periodically and add 13 changes; it's therefore more important to add your changes to 14 Misc/NEWS than to this file. 15 16 * This is not a complete list of every single change; completeness 17 is the purpose of Misc/NEWS. Some changes will be too small 18 or esoteric to include. If such a change is added to the text, 19 it might get removed during final editing. 20 21 * If you want to draw your new text to the attention of the 22 maintainer, add 'XXX' to the beginning of the paragraph or 23 section. 24 25 * It's OK to just add a fragmentary note about a change. For 26 example: "XXX Describe the transmogrify() function added to the 27 socket module." The maintainer will research the change and 28 write the necessary text. 29 30 * You can comment out your additions if you like, but it's not 31 necessary (especially when a final release is some months away). 32 33 * Credit the author of a patch or bugfix. Just the name is 34 sufficient; the e-mail address isn't necessary. 35 36 * It's helpful to add the bug/patch number as a comment: 37 38 XXX Describe the transmogrify() function added to the socket 39 module. 40 (Contributed by P.Y. Developer in :issue:`12345`.) 41 42 This saves the maintainer the effort of going through the Mercurial log 43 when researching a change. 44 45This article explains the new features in Python 3.9, compared to 3.8. 46Python 3.9 was released on October 5, 2020. 47For full details, see the :ref:`changelog <changelog>`. 48 49.. seealso:: 50 51 :pep:`596` - Python 3.9 Release Schedule 52 53 54Summary -- Release highlights 55============================= 56 57.. This section singles out the most important changes in Python 3.9. 58 Brevity is key. 59 60New syntax features: 61 62* :pep:`584`, union operators added to ``dict``; 63* :pep:`585`, type hinting generics in standard collections; 64* :pep:`614`, relaxed grammar restrictions on decorators. 65 66New built-in features: 67 68* :pep:`616`, string methods to remove prefixes and suffixes. 69 70New features in the standard library: 71 72* :pep:`593`, flexible function and variable annotations; 73* :func:`os.pidfd_open` added that allows process management without races 74 and signals. 75 76Interpreter improvements: 77 78* :pep:`573`, fast access to module state from methods of C extension 79 types; 80* :pep:`617`, CPython now uses a new parser based on PEG; 81* a number of Python builtins (range, tuple, set, frozenset, list, dict) are 82 now sped up using :pep:`590` vectorcall; 83* garbage collection does not block on resurrected objects; 84* a number of Python modules (:mod:`!_abc`, :mod:`!audioop`, :mod:`!_bz2`, 85 :mod:`!_codecs`, :mod:`!_contextvars`, :mod:`!_crypt`, :mod:`!_functools`, 86 :mod:`!_json`, :mod:`!_locale`, :mod:`math`, :mod:`operator`, :mod:`resource`, 87 :mod:`time`, :mod:`!_weakref`) now use multiphase initialization as defined 88 by PEP 489; 89* a number of standard library modules (:mod:`!audioop`, :mod:`ast`, :mod:`grp`, 90 :mod:`!_hashlib`, :mod:`pwd`, :mod:`!_posixsubprocess`, :mod:`random`, 91 :mod:`select`, :mod:`struct`, :mod:`termios`, :mod:`zlib`) are now using 92 the stable ABI defined by PEP 384. 93 94New library modules: 95 96* :pep:`615`, the IANA Time Zone Database is now present in the standard 97 library in the :mod:`zoneinfo` module; 98* an implementation of a topological sort of a graph is now provided in 99 the new :mod:`graphlib` module. 100 101Release process changes: 102 103* :pep:`602`, CPython adopts an annual release cycle. 104 105 106You should check for DeprecationWarning in your code 107==================================================== 108 109When Python 2.7 was still supported, a lot of functionality in Python 3 110was kept for backward compatibility with Python 2.7. With the end of Python 1112 support, these backward compatibility layers have been removed, or will 112be removed soon. Most of them emitted a :exc:`DeprecationWarning` warning for 113several years. For example, using ``collections.Mapping`` instead of 114``collections.abc.Mapping`` emits a :exc:`DeprecationWarning` since Python 1153.3, released in 2012. 116 117Test your application with the :option:`-W` ``default`` command-line option to see 118:exc:`DeprecationWarning` and :exc:`PendingDeprecationWarning`, or even with 119:option:`-W` ``error`` to treat them as errors. :ref:`Warnings Filter 120<warning-filter>` can be used to ignore warnings from third-party code. 121 122Python 3.9 is the last version providing those Python 2 backward compatibility 123layers, to give more time to Python projects maintainers to organize the 124removal of the Python 2 support and add support for Python 3.9. 125 126Aliases to :ref:`Abstract Base Classes <collections-abstract-base-classes>` in 127the :mod:`collections` module, like ``collections.Mapping`` alias to 128:class:`collections.abc.Mapping`, are kept for one last release for backward 129compatibility. They will be removed from Python 3.10. 130 131More generally, try to run your tests in the :ref:`Python Development Mode 132<devmode>` which helps to prepare your code to make it compatible with the 133next Python version. 134 135Note: a number of pre-existing deprecations were removed in this version of 136Python as well. Consult the :ref:`removed-in-python-39` section. 137 138 139New Features 140============ 141 142Dictionary Merge & Update Operators 143----------------------------------- 144 145Merge (``|``) and update (``|=``) operators have been added to the built-in 146:class:`dict` class. Those complement the existing ``dict.update`` and 147``{**d1, **d2}`` methods of merging dictionaries. 148 149Example:: 150 151 >>> x = {"key1": "value1 from x", "key2": "value2 from x"} 152 >>> y = {"key2": "value2 from y", "key3": "value3 from y"} 153 >>> x | y 154 {'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'} 155 >>> y | x 156 {'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'} 157 158See :pep:`584` for a full description. 159(Contributed by Brandt Bucher in :issue:`36144`.) 160 161New String Methods to Remove Prefixes and Suffixes 162-------------------------------------------------- 163 164:meth:`str.removeprefix(prefix)<str.removeprefix>` and 165:meth:`str.removesuffix(suffix)<str.removesuffix>` have been added 166to easily remove an unneeded prefix or a suffix from a string. Corresponding 167``bytes``, ``bytearray``, and ``collections.UserString`` methods have also been 168added. See :pep:`616` for a full description. (Contributed by Dennis Sweeney in 169:issue:`39939`.) 170 171Type Hinting Generics in Standard Collections 172--------------------------------------------- 173 174In type annotations you can now use built-in collection types such as 175``list`` and ``dict`` as generic types instead of importing the 176corresponding capitalized types (e.g. ``List`` or ``Dict``) from 177``typing``. Some other types in the standard library are also now generic, 178for example ``queue.Queue``. 179 180Example: 181 182.. code-block:: python 183 184 def greet_all(names: list[str]) -> None: 185 for name in names: 186 print("Hello", name) 187 188See :pep:`585` for more details. (Contributed by Guido van Rossum, 189Ethan Smith, and Batuhan Taşkaya in :issue:`39481`.) 190 191New Parser 192---------- 193 194Python 3.9 uses a new parser, based on `PEG 195<https://en.wikipedia.org/wiki/Parsing_expression_grammar>`_ instead 196of `LL(1) <https://en.wikipedia.org/wiki/LL_parser>`_. The new 197parser's performance is roughly comparable to that of the old parser, 198but the PEG formalism is more flexible than LL(1) when it comes to 199designing new language features. We'll start using this flexibility 200in Python 3.10 and later. 201 202The :mod:`ast` module uses the new parser and produces the same AST as 203the old parser. 204 205In Python 3.10, the old parser will be deleted and so will all 206functionality that depends on it (primarily the :mod:`!parser` module, 207which has long been deprecated). In Python 3.9 *only*, you can switch 208back to the LL(1) parser using a command line switch (``-X 209oldparser``) or an environment variable (``PYTHONOLDPARSER=1``). 210 211See :pep:`617` for more details. (Contributed by Guido van Rossum, 212Pablo Galindo and Lysandros Nikolaou in :issue:`40334`.) 213 214 215Other Language Changes 216====================== 217 218* :func:`__import__` now raises :exc:`ImportError` instead of 219 :exc:`ValueError`, which used to occur when a relative import went past 220 its top-level package. 221 (Contributed by Ngalim Siregar in :issue:`37444`.) 222 223* Python now gets the absolute path of the script filename specified on 224 the command line (ex: ``python3 script.py``): the ``__file__`` attribute of 225 the :mod:`__main__` module became an absolute path, rather than a relative 226 path. These paths now remain valid after the current directory is changed 227 by :func:`os.chdir`. As a side effect, the traceback also displays the 228 absolute path for :mod:`__main__` module frames in this case. 229 (Contributed by Victor Stinner in :issue:`20443`.) 230 231* In the :ref:`Python Development Mode <devmode>` and in :ref:`debug build <debug-build>`, the 232 *encoding* and *errors* arguments are now checked for string encoding and 233 decoding operations. Examples: :func:`open`, :meth:`str.encode` and 234 :meth:`bytes.decode`. 235 236 By default, for best performance, the *errors* argument is only checked at 237 the first encoding/decoding error and the *encoding* argument is sometimes 238 ignored for empty strings. 239 (Contributed by Victor Stinner in :issue:`37388`.) 240 241* ``"".replace("", s, n)`` now returns ``s`` instead of an empty string for 242 all non-zero ``n``. It is now consistent with ``"".replace("", s)``. 243 There are similar changes for :class:`bytes` and :class:`bytearray` objects. 244 (Contributed by Serhiy Storchaka in :issue:`28029`.) 245 246* Any valid expression can now be used as a :term:`decorator`. Previously, the 247 grammar was much more restrictive. See :pep:`614` for details. 248 (Contributed by Brandt Bucher in :issue:`39702`.) 249 250* Improved help for the :mod:`typing` module. Docstrings are now shown for 251 all special forms and special generic aliases (like ``Union`` and ``List``). 252 Using :func:`help` with generic alias like ``List[int]`` will show the help 253 for the correspondent concrete type (``list`` in this case). 254 (Contributed by Serhiy Storchaka in :issue:`40257`.) 255 256* Parallel running of :meth:`~agen.aclose` / :meth:`~agen.asend` / 257 :meth:`~agen.athrow` is now prohibited, and ``ag_running`` now reflects 258 the actual running status of the async generator. 259 (Contributed by Yury Selivanov in :issue:`30773`.) 260 261* Unexpected errors in calling the ``__iter__`` method are no longer masked by 262 ``TypeError`` in the :keyword:`in` operator and functions 263 :func:`~operator.contains`, :func:`~operator.indexOf` and 264 :func:`~operator.countOf` of the :mod:`operator` module. 265 (Contributed by Serhiy Storchaka in :issue:`40824`.) 266 267* Unparenthesized lambda expressions can no longer be the expression part in an 268 ``if`` clause in comprehensions and generator expressions. See :issue:`41848` 269 and :issue:`43755` for details. 270 271 272New Modules 273=========== 274 275zoneinfo 276-------- 277 278The :mod:`zoneinfo` module brings support for the IANA time zone database to 279the standard library. It adds :class:`zoneinfo.ZoneInfo`, a concrete 280:class:`datetime.tzinfo` implementation backed by the system's time zone data. 281 282Example:: 283 284 >>> from zoneinfo import ZoneInfo 285 >>> from datetime import datetime, timedelta 286 287 >>> # Daylight saving time 288 >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles")) 289 >>> print(dt) 290 2020-10-31 12:00:00-07:00 291 >>> dt.tzname() 292 'PDT' 293 294 >>> # Standard time 295 >>> dt += timedelta(days=7) 296 >>> print(dt) 297 2020-11-07 12:00:00-08:00 298 >>> print(dt.tzname()) 299 PST 300 301 302As a fall-back source of data for platforms that don't ship the IANA database, 303the :pypi:`tzdata` module was released as a first-party package -- distributed via 304PyPI and maintained by the CPython core team. 305 306.. seealso:: 307 308 :pep:`615` -- Support for the IANA Time Zone Database in the Standard Library 309 PEP written and implemented by Paul Ganssle 310 311 312graphlib 313--------- 314 315A new module, :mod:`graphlib`, was added that contains the 316:class:`graphlib.TopologicalSorter` class to offer functionality to perform 317topological sorting of graphs. (Contributed by Pablo Galindo, Tim Peters and 318Larry Hastings in :issue:`17005`.) 319 320 321Improved Modules 322================ 323 324ast 325--- 326 327Added the *indent* option to :func:`~ast.dump` which allows it to produce a 328multiline indented output. 329(Contributed by Serhiy Storchaka in :issue:`37995`.) 330 331Added :func:`ast.unparse` as a function in the :mod:`ast` module that can 332be used to unparse an :class:`ast.AST` object and produce a string with code 333that would produce an equivalent :class:`ast.AST` object when parsed. 334(Contributed by Pablo Galindo and Batuhan Taskaya in :issue:`38870`.) 335 336Added docstrings to AST nodes that contains the ASDL signature used to 337construct that node. (Contributed by Batuhan Taskaya in :issue:`39638`.) 338 339asyncio 340------- 341 342Due to significant security concerns, the *reuse_address* parameter of 343:meth:`asyncio.loop.create_datagram_endpoint` is no longer supported. This is 344because of the behavior of the socket option ``SO_REUSEADDR`` in UDP. For more 345details, see the documentation for ``loop.create_datagram_endpoint()``. 346(Contributed by Kyle Stanley, Antoine Pitrou, and Yury Selivanov in 347:issue:`37228`.) 348 349Added a new :term:`coroutine` :meth:`~asyncio.loop.shutdown_default_executor` 350that schedules a shutdown for the default executor that waits on the 351:class:`~concurrent.futures.ThreadPoolExecutor` to finish closing. Also, 352:func:`asyncio.run` has been updated to use the new :term:`coroutine`. 353(Contributed by Kyle Stanley in :issue:`34037`.) 354 355Added :class:`asyncio.PidfdChildWatcher`, a Linux-specific child watcher 356implementation that polls process file descriptors. (:issue:`38692`) 357 358Added a new :term:`coroutine` :func:`asyncio.to_thread`. It is mainly used for 359running IO-bound functions in a separate thread to avoid blocking the event 360loop, and essentially works as a high-level version of 361:meth:`~asyncio.loop.run_in_executor` that can directly take keyword arguments. 362(Contributed by Kyle Stanley and Yury Selivanov in :issue:`32309`.) 363 364When cancelling the task due to a timeout, :meth:`asyncio.wait_for` will now 365wait until the cancellation is complete also in the case when *timeout* is 366<= 0, like it does with positive timeouts. 367(Contributed by Elvis Pranskevichus in :issue:`32751`.) 368 369:mod:`asyncio` now raises :exc:`TypeError` when calling incompatible 370methods with an :class:`ssl.SSLSocket` socket. 371(Contributed by Ido Michael in :issue:`37404`.) 372 373compileall 374---------- 375 376Added new possibility to use hardlinks for duplicated ``.pyc`` files: *hardlink_dupes* parameter and --hardlink-dupes command line option. 377(Contributed by Lumír 'Frenzy' Balhar in :issue:`40495`.) 378 379Added new options for path manipulation in resulting ``.pyc`` files: *stripdir*, *prependdir*, *limit_sl_dest* parameters and -s, -p, -e command line options. 380Added the possibility to specify the option for an optimization level multiple times. 381(Contributed by Lumír 'Frenzy' Balhar in :issue:`38112`.) 382 383concurrent.futures 384------------------ 385 386Added a new *cancel_futures* parameter to 387:meth:`concurrent.futures.Executor.shutdown` that cancels all pending futures 388which have not started running, instead of waiting for them to complete before 389shutting down the executor. 390(Contributed by Kyle Stanley in :issue:`39349`.) 391 392Removed daemon threads from :class:`~concurrent.futures.ThreadPoolExecutor` 393and :class:`~concurrent.futures.ProcessPoolExecutor`. This improves 394compatibility with subinterpreters and predictability in their shutdown 395processes. (Contributed by Kyle Stanley in :issue:`39812`.) 396 397Workers in :class:`~concurrent.futures.ProcessPoolExecutor` are now spawned on 398demand, only when there are no available idle workers to reuse. This optimizes 399startup overhead and reduces the amount of lost CPU time to idle workers. 400(Contributed by Kyle Stanley in :issue:`39207`.) 401 402curses 403------ 404 405Added :func:`curses.get_escdelay`, :func:`curses.set_escdelay`, 406:func:`curses.get_tabsize`, and :func:`curses.set_tabsize` functions. 407(Contributed by Anthony Sottile in :issue:`38312`.) 408 409datetime 410-------- 411The :meth:`~datetime.date.isocalendar` of :class:`datetime.date` 412and :meth:`~datetime.datetime.isocalendar` of :class:`datetime.datetime` 413methods now returns a :func:`~collections.namedtuple` instead of a :class:`tuple`. 414(Contributed by Donghee Na in :issue:`24416`.) 415 416distutils 417--------- 418 419The :command:`upload` command now creates SHA2-256 and Blake2b-256 hash 420digests. It skips MD5 on platforms that block MD5 digest. 421(Contributed by Christian Heimes in :issue:`40698`.) 422 423fcntl 424----- 425 426Added constants :const:`~fcntl.F_OFD_GETLK`, :const:`~fcntl.F_OFD_SETLK` 427and :const:`~fcntl.F_OFD_SETLKW`. 428(Contributed by Donghee Na in :issue:`38602`.) 429 430ftplib 431------- 432 433:class:`~ftplib.FTP` and :class:`~ftplib.FTP_TLS` now raise a :class:`ValueError` 434if the given timeout for their constructor is zero to prevent the creation of 435a non-blocking socket. (Contributed by Donghee Na in :issue:`39259`.) 436 437gc 438-- 439 440When the garbage collector makes a collection in which some objects resurrect 441(they are reachable from outside the isolated cycles after the finalizers have 442been executed), do not block the collection of all objects that are still 443unreachable. (Contributed by Pablo Galindo and Tim Peters in :issue:`38379`.) 444 445Added a new function :func:`gc.is_finalized` to check if an object has been 446finalized by the garbage collector. (Contributed by Pablo Galindo in 447:issue:`39322`.) 448 449hashlib 450------- 451 452The :mod:`hashlib` module can now use SHA3 hashes and SHAKE XOF from OpenSSL 453when available. 454(Contributed by Christian Heimes in :issue:`37630`.) 455 456Builtin hash modules can now be disabled with 457``./configure --without-builtin-hashlib-hashes`` or selectively enabled with 458e.g. ``./configure --with-builtin-hashlib-hashes=sha3,blake2`` to force use 459of OpenSSL based implementation. 460(Contributed by Christian Heimes in :issue:`40479`) 461 462 463http 464---- 465 466HTTP status codes ``103 EARLY_HINTS``, ``418 IM_A_TEAPOT`` and ``425 TOO_EARLY`` are added to 467:class:`http.HTTPStatus`. (Contributed by Donghee Na in :issue:`39509` and Ross Rhodes in :issue:`39507`.) 468 469IDLE and idlelib 470---------------- 471 472Added option to toggle cursor blink off. (Contributed by Zackery Spytz 473in :issue:`4603`.) 474 475Escape key now closes IDLE completion windows. (Contributed by Johnny 476Najera in :issue:`38944`.) 477 478Added keywords to module name completion list. (Contributed by Terry J. 479Reedy in :issue:`37765`.) 480 481New in 3.9 maintenance releases 482 483Make IDLE invoke :func:`sys.excepthook` (when started without '-n'). 484User hooks were previously ignored. (Contributed by Ken Hilton in 485:issue:`43008`.) 486 487The changes above have been backported to 3.8 maintenance releases. 488 489Rearrange the settings dialog. Split the General tab into Windows 490and Shell/Ed tabs. Move help sources, which extend the Help menu, to the 491Extensions tab. Make space for new options and shorten the dialog. The 492latter makes the dialog better fit small screens. (Contributed by Terry Jan 493Reedy in :issue:`40468`.) Move the indent space setting from the Font tab to 494the new Windows tab. (Contributed by Mark Roseman and Terry Jan Reedy in 495:issue:`33962`.) 496 497Apply syntax highlighting to ``.pyi`` files. (Contributed by Alex 498Waygood and Terry Jan Reedy in :issue:`45447`.) 499 500imaplib 501------- 502 503:class:`~imaplib.IMAP4` and :class:`~imaplib.IMAP4_SSL` now have 504an optional *timeout* parameter for their constructors. 505Also, the :meth:`~imaplib.IMAP4.open` method now has an optional *timeout* parameter 506with this change. The overridden methods of :class:`~imaplib.IMAP4_SSL` and 507:class:`~imaplib.IMAP4_stream` were applied to this change. 508(Contributed by Donghee Na in :issue:`38615`.) 509 510:meth:`imaplib.IMAP4.unselect` is added. 511:meth:`imaplib.IMAP4.unselect` frees server's resources associated with the 512selected mailbox and returns the server to the authenticated 513state. This command performs the same actions as :meth:`imaplib.IMAP4.close`, except 514that no messages are permanently removed from the currently 515selected mailbox. (Contributed by Donghee Na in :issue:`40375`.) 516 517importlib 518--------- 519 520To improve consistency with import statements, :func:`importlib.util.resolve_name` 521now raises :exc:`ImportError` instead of :exc:`ValueError` for invalid relative 522import attempts. 523(Contributed by Ngalim Siregar in :issue:`37444`.) 524 525Import loaders which publish immutable module objects can now publish 526immutable packages in addition to individual modules. 527(Contributed by Dino Viehland in :issue:`39336`.) 528 529Added :func:`importlib.resources.files` function with support for 530subdirectories in package data, matching backport in ``importlib_resources`` 531version 1.5. 532(Contributed by Jason R. Coombs in :issue:`39791`.) 533 534Refreshed ``importlib.metadata`` from ``importlib_metadata`` version 1.6.1. 535 536inspect 537------- 538 539:attr:`inspect.BoundArguments.arguments` is changed from ``OrderedDict`` to regular 540dict. (Contributed by Inada Naoki in :issue:`36350` and :issue:`39775`.) 541 542ipaddress 543--------- 544 545:mod:`ipaddress` now supports IPv6 Scoped Addresses (IPv6 address with suffix ``%<scope_id>``). 546 547Scoped IPv6 addresses can be parsed using :class:`ipaddress.IPv6Address`. 548If present, scope zone ID is available through the :attr:`~ipaddress.IPv6Address.scope_id` attribute. 549(Contributed by Oleksandr Pavliuk in :issue:`34788`.) 550 551Starting with Python 3.9.5 the :mod:`ipaddress` module no longer 552accepts any leading zeros in IPv4 address strings. 553(Contributed by Christian Heimes in :issue:`36384`). 554 555math 556---- 557 558Expanded the :func:`math.gcd` function to handle multiple arguments. 559Formerly, it only supported two arguments. 560(Contributed by Serhiy Storchaka in :issue:`39648`.) 561 562Added :func:`math.lcm`: return the least common multiple of specified arguments. 563(Contributed by Mark Dickinson, Ananthakrishnan and Serhiy Storchaka in 564:issue:`39479` and :issue:`39648`.) 565 566Added :func:`math.nextafter`: return the next floating-point value after *x* 567towards *y*. 568(Contributed by Victor Stinner in :issue:`39288`.) 569 570Added :func:`math.ulp`: return the value of the least significant bit 571of a float. 572(Contributed by Victor Stinner in :issue:`39310`.) 573 574multiprocessing 575--------------- 576 577The :class:`multiprocessing.SimpleQueue` class has a new 578:meth:`~multiprocessing.SimpleQueue.close` method to explicitly close the 579queue. 580(Contributed by Victor Stinner in :issue:`30966`.) 581 582nntplib 583------- 584 585:class:`!NNTP` and :class:`!NNTP_SSL` now raise a :class:`ValueError` 586if the given timeout for their constructor is zero to prevent the creation of 587a non-blocking socket. (Contributed by Donghee Na in :issue:`39259`.) 588 589os 590-- 591 592Added :const:`~os.CLD_KILLED` and :const:`~os.CLD_STOPPED` for :attr:`!si_code`. 593(Contributed by Donghee Na in :issue:`38493`.) 594 595Exposed the Linux-specific :func:`os.pidfd_open` (:issue:`38692`) and 596:const:`os.P_PIDFD` (:issue:`38713`) for process management with file 597descriptors. 598 599The :func:`os.unsetenv` function is now also available on Windows. 600(Contributed by Victor Stinner in :issue:`39413`.) 601 602The :func:`os.putenv` and :func:`os.unsetenv` functions are now always 603available. 604(Contributed by Victor Stinner in :issue:`39395`.) 605 606Added :func:`os.waitstatus_to_exitcode` function: 607convert a wait status to an exit code. 608(Contributed by Victor Stinner in :issue:`40094`.) 609 610pathlib 611------- 612 613Added :meth:`pathlib.Path.readlink` which acts similarly to 614:func:`os.readlink`. 615(Contributed by Girts Folkmanis in :issue:`30618`) 616 617pdb 618--- 619 620On Windows now :class:`~pdb.Pdb` supports ``~/.pdbrc``. 621(Contributed by Tim Hopper and Dan Lidral-Porter in :issue:`20523`.) 622 623poplib 624------ 625 626:class:`~poplib.POP3` and :class:`~poplib.POP3_SSL` now raise a :class:`ValueError` 627if the given timeout for their constructor is zero to prevent the creation of 628a non-blocking socket. (Contributed by Donghee Na in :issue:`39259`.) 629 630pprint 631------ 632 633:mod:`pprint` can now pretty-print :class:`types.SimpleNamespace`. 634(Contributed by Carl Bordum Hansen in :issue:`37376`.) 635 636pydoc 637----- 638 639The documentation string is now shown not only for class, function, 640method etc, but for any object that has its own :attr:`~definition.__doc__` 641attribute. 642(Contributed by Serhiy Storchaka in :issue:`40257`.) 643 644random 645------ 646 647Added a new :attr:`random.Random.randbytes` method: generate random bytes. 648(Contributed by Victor Stinner in :issue:`40286`.) 649 650signal 651------ 652 653Exposed the Linux-specific :func:`signal.pidfd_send_signal` for sending to 654signals to a process using a file descriptor instead of a pid. (:issue:`38712`) 655 656smtplib 657------- 658 659:class:`~smtplib.SMTP` and :class:`~smtplib.SMTP_SSL` now raise a :class:`ValueError` 660if the given timeout for their constructor is zero to prevent the creation of 661a non-blocking socket. (Contributed by Donghee Na in :issue:`39259`.) 662 663:class:`~smtplib.LMTP` constructor now has an optional *timeout* parameter. 664(Contributed by Donghee Na in :issue:`39329`.) 665 666socket 667------ 668 669The :mod:`socket` module now exports the :const:`~socket.CAN_RAW_JOIN_FILTERS` 670constant on Linux 4.1 and greater. 671(Contributed by Stefan Tatschner and Zackery Spytz in :issue:`25780`.) 672 673The socket module now supports the :const:`~socket.CAN_J1939` protocol on 674platforms that support it. (Contributed by Karl Ding in :issue:`40291`.) 675 676The socket module now has the :func:`socket.send_fds` and 677:func:`socket.recv_fds` functions. (Contributed by Joannah Nanjekye, Shinya 678Okano and Victor Stinner in :issue:`28724`.) 679 680 681time 682---- 683 684On AIX, :func:`~time.thread_time` is now implemented with ``thread_cputime()`` 685which has nanosecond resolution, rather than 686``clock_gettime(CLOCK_THREAD_CPUTIME_ID)`` which has a resolution of 10 milliseconds. 687(Contributed by Batuhan Taskaya in :issue:`40192`) 688 689sys 690--- 691 692Added a new :data:`sys.platlibdir` attribute: name of the platform-specific 693library directory. It is used to build the path of standard library and the 694paths of installed extension modules. It is equal to ``"lib"`` on most 695platforms. On Fedora and SuSE, it is equal to ``"lib64"`` on 64-bit platforms. 696(Contributed by Jan Matějek, Matěj Cepl, Charalampos Stratakis and Victor Stinner in :issue:`1294959`.) 697 698Previously, :data:`sys.stderr` was block-buffered when non-interactive. Now 699``stderr`` defaults to always being line-buffered. 700(Contributed by Jendrik Seipp in :issue:`13601`.) 701 702tracemalloc 703----------- 704 705Added :func:`tracemalloc.reset_peak` to set the peak size of traced memory 706blocks to the current size, to measure the peak of specific pieces of code. 707(Contributed by Huon Wilson in :issue:`40630`.) 708 709typing 710------ 711 712:pep:`593` introduced an :data:`typing.Annotated` type to decorate existing 713types with context-specific metadata and new ``include_extras`` parameter to 714:func:`typing.get_type_hints` to access the metadata at runtime. (Contributed 715by Till Varoquaux and Konstantin Kashin.) 716 717unicodedata 718----------- 719 720The Unicode database has been updated to version 13.0.0. (:issue:`39926`). 721 722venv 723---- 724 725The activation scripts provided by :mod:`venv` now all specify their prompt 726customization consistently by always using the value specified by 727``__VENV_PROMPT__``. Previously some scripts unconditionally used 728``__VENV_PROMPT__``, others only if it happened to be set (which was the default 729case), and one used ``__VENV_NAME__`` instead. 730(Contributed by Brett Cannon in :issue:`37663`.) 731 732xml 733--- 734 735White space characters within attributes are now preserved when serializing 736:mod:`xml.etree.ElementTree` to XML file. EOLNs are no longer normalized 737to "\n". This is the result of discussion about how to interpret 738section 2.11 of XML spec. 739(Contributed by Mefistotelis in :issue:`39011`.) 740 741 742Optimizations 743============= 744 745* Optimized the idiom for assignment a temporary variable in comprehensions. 746 Now ``for y in [expr]`` in comprehensions is as fast as a simple assignment 747 ``y = expr``. For example: 748 749 sums = [s for s in [0] for x in data for s in [s + x]] 750 751 Unlike the ``:=`` operator this idiom does not leak a variable to the 752 outer scope. 753 754 (Contributed by Serhiy Storchaka in :issue:`32856`.) 755 756* Optimized signal handling in multithreaded applications. If a thread different 757 than the main thread gets a signal, the bytecode evaluation loop is no longer 758 interrupted at each bytecode instruction to check for pending signals which 759 cannot be handled. Only the main thread of the main interpreter can handle 760 signals. 761 762 Previously, the bytecode evaluation loop was interrupted at each instruction 763 until the main thread handles signals. 764 (Contributed by Victor Stinner in :issue:`40010`.) 765 766* Optimized the :mod:`subprocess` module on FreeBSD using ``closefrom()``. 767 (Contributed by Ed Maste, Conrad Meyer, Kyle Evans, Kubilay Kocak and Victor 768 Stinner in :issue:`38061`.) 769 770* :c:func:`PyLong_FromDouble` is now up to 1.87x faster for values that 771 fit into :c:expr:`long`. 772 (Contributed by Sergey Fedoseev in :issue:`37986`.) 773 774* A number of Python builtins (:class:`range`, :class:`tuple`, :class:`set`, 775 :class:`frozenset`, :class:`list`, :class:`dict`) are now sped up by using 776 :pep:`590` vectorcall protocol. 777 (Contributed by Donghee Na, Mark Shannon, Jeroen Demeyer and Petr Viktorin in :issue:`37207`.) 778 779* Optimized :func:`~set.difference_update` for the case when the other set 780 is much larger than the base set. 781 (Suggested by Evgeny Kapun with code contributed by Michele Orrù in :issue:`8425`.) 782 783* Python's small object allocator (``obmalloc.c``) now allows (no more than) 784 one empty arena to remain available for immediate reuse, without returning 785 it to the OS. This prevents thrashing in simple loops where an arena could 786 be created and destroyed anew on each iteration. 787 (Contributed by Tim Peters in :issue:`37257`.) 788 789* :term:`floor division` of float operation now has a better performance. Also 790 the message of :exc:`ZeroDivisionError` for this operation is updated. 791 (Contributed by Donghee Na in :issue:`39434`.) 792 793* Decoding short ASCII strings with UTF-8 and ascii codecs is now about 794 15% faster. (Contributed by Inada Naoki in :issue:`37348`.) 795 796Here's a summary of performance improvements from Python 3.4 through Python 3.9: 797 798.. code-block:: none 799 800 Python version 3.4 3.5 3.6 3.7 3.8 3.9 801 -------------- --- --- --- --- --- --- 802 803 Variable and attribute read access: 804 read_local 7.1 7.1 5.4 5.1 3.9 3.9 805 read_nonlocal 7.1 8.1 5.8 5.4 4.4 4.5 806 read_global 15.5 19.0 14.3 13.6 7.6 7.8 807 read_builtin 21.1 21.6 18.5 19.0 7.5 7.8 808 read_classvar_from_class 25.6 26.5 20.7 19.5 18.4 17.9 809 read_classvar_from_instance 22.8 23.5 18.8 17.1 16.4 16.9 810 read_instancevar 32.4 33.1 28.0 26.3 25.4 25.3 811 read_instancevar_slots 27.8 31.3 20.8 20.8 20.2 20.5 812 read_namedtuple 73.8 57.5 45.0 46.8 18.4 18.7 813 read_boundmethod 37.6 37.9 29.6 26.9 27.7 41.1 814 815 Variable and attribute write access: 816 write_local 8.7 9.3 5.5 5.3 4.3 4.3 817 write_nonlocal 10.5 11.1 5.6 5.5 4.7 4.8 818 write_global 19.7 21.2 18.0 18.0 15.8 16.7 819 write_classvar 92.9 96.0 104.6 102.1 39.2 39.8 820 write_instancevar 44.6 45.8 40.0 38.9 35.5 37.4 821 write_instancevar_slots 35.6 36.1 27.3 26.6 25.7 25.8 822 823 Data structure read access: 824 read_list 24.2 24.5 20.8 20.8 19.0 19.5 825 read_deque 24.7 25.5 20.2 20.6 19.8 20.2 826 read_dict 24.3 25.7 22.3 23.0 21.0 22.4 827 read_strdict 22.6 24.3 19.5 21.2 18.9 21.5 828 829 Data structure write access: 830 write_list 27.1 28.5 22.5 21.6 20.0 20.0 831 write_deque 28.7 30.1 22.7 21.8 23.5 21.7 832 write_dict 31.4 33.3 29.3 29.2 24.7 25.4 833 write_strdict 28.4 29.9 27.5 25.2 23.1 24.5 834 835 Stack (or queue) operations: 836 list_append_pop 93.4 112.7 75.4 74.2 50.8 50.6 837 deque_append_pop 43.5 57.0 49.4 49.2 42.5 44.2 838 deque_append_popleft 43.7 57.3 49.7 49.7 42.8 46.4 839 840 Timing loop: 841 loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3 842 843These results were generated from the variable access benchmark script at: 844``Tools/scripts/var_access_benchmark.py``. The benchmark script displays timings 845in nanoseconds. The benchmarks were measured on an 846`Intel® Core™ i7-4960HQ processor 847<https://ark.intel.com/content/www/us/en/ark/products/76088/intel-core-i7-4960hq-processor-6m-cache-up-to-3-80-ghz.html>`_ 848running the macOS 64-bit builds found at 849`python.org <https://www.python.org/downloads/macos/>`_. 850 851 852Deprecated 853========== 854 855* The distutils ``bdist_msi`` command is now deprecated, use 856 ``bdist_wheel`` (wheel packages) instead. 857 (Contributed by Hugo van Kemenade in :issue:`39586`.) 858 859* Currently :func:`math.factorial` accepts :class:`float` instances with 860 non-negative integer values (like ``5.0``). It raises a :exc:`ValueError` 861 for non-integral and negative floats. It is now deprecated. In future 862 Python versions it will raise a :exc:`TypeError` for all floats. 863 (Contributed by Serhiy Storchaka in :issue:`37315`.) 864 865* The :mod:`!parser` and :mod:`!symbol` modules are deprecated and will be 866 removed in future versions of Python. For the majority of use cases, 867 users can leverage the Abstract Syntax Tree (AST) generation and compilation 868 stage, using the :mod:`ast` module. 869 870* The Public C API functions :c:func:`!PyParser_SimpleParseStringFlags`, 871 :c:func:`!PyParser_SimpleParseStringFlagsFilename`, 872 :c:func:`!PyParser_SimpleParseFileFlags` and :c:func:`!PyNode_Compile` 873 are deprecated and will be removed in Python 3.10 together with the old parser. 874 875* Using :data:`NotImplemented` in a boolean context has been deprecated, 876 as it is almost exclusively the result of incorrect rich comparator 877 implementations. It will be made a :exc:`TypeError` in a future version 878 of Python. 879 (Contributed by Josh Rosenberg in :issue:`35712`.) 880 881* The :mod:`random` module currently accepts any hashable type as a 882 possible seed value. Unfortunately, some of those types are not 883 guaranteed to have a deterministic hash value. After Python 3.9, 884 the module will restrict its seeds to :const:`None`, :class:`int`, 885 :class:`float`, :class:`str`, :class:`bytes`, and :class:`bytearray`. 886 887* Opening the :class:`~gzip.GzipFile` file for writing without specifying 888 the *mode* argument is deprecated. In future Python versions it will always 889 be opened for reading by default. Specify the *mode* argument for opening 890 it for writing and silencing a warning. 891 (Contributed by Serhiy Storchaka in :issue:`28286`.) 892 893* Deprecated the ``split()`` method of :class:`!_tkinter.TkappType` in 894 favour of the ``splitlist()`` method which has more consistent and 895 predictable behavior. 896 (Contributed by Serhiy Storchaka in :issue:`38371`.) 897 898* The explicit passing of coroutine objects to :func:`asyncio.wait` has been 899 deprecated and will be removed in version 3.11. 900 (Contributed by Yury Selivanov and Kyle Stanley in :issue:`34790`.) 901 902* binhex4 and hexbin4 standards are now deprecated. The :mod:`!binhex` module 903 and the following :mod:`binascii` functions are now deprecated: 904 905 * :func:`!b2a_hqx`, :func:`!a2b_hqx` 906 * :func:`!rlecode_hqx`, :func:`!rledecode_hqx` 907 908 (Contributed by Victor Stinner in :issue:`39353`.) 909 910* :mod:`ast` classes ``slice``, ``Index`` and ``ExtSlice`` are considered deprecated 911 and will be removed in future Python versions. ``value`` itself should be 912 used instead of ``Index(value)``. ``Tuple(slices, Load())`` should be 913 used instead of ``ExtSlice(slices)``. 914 (Contributed by Serhiy Storchaka in :issue:`34822`.) 915 916* :mod:`ast` classes ``Suite``, ``Param``, ``AugLoad`` and ``AugStore`` 917 are considered deprecated and will be removed in future Python versions. 918 They were not generated by the parser and not accepted by the code 919 generator in Python 3. 920 (Contributed by Batuhan Taskaya in :issue:`39639` and :issue:`39969` 921 and Serhiy Storchaka in :issue:`39988`.) 922 923* The :c:func:`!PyEval_InitThreads` and :c:func:`!PyEval_ThreadsInitialized` 924 functions are now deprecated and will be removed in Python 3.11. Calling 925 :c:func:`!PyEval_InitThreads` now does nothing. The :term:`GIL` is initialized 926 by :c:func:`Py_Initialize` since Python 3.7. 927 (Contributed by Victor Stinner in :issue:`39877`.) 928 929* Passing ``None`` as the first argument to the :func:`shlex.split` function 930 has been deprecated. (Contributed by Zackery Spytz in :issue:`33262`.) 931 932* :func:`!smtpd.MailmanProxy` is now deprecated as it is unusable without 933 an external module, ``mailman``. (Contributed by Samuel Colvin in :issue:`35800`.) 934 935* The :mod:`!lib2to3` module now emits a :exc:`PendingDeprecationWarning`. 936 Python 3.9 switched to a PEG parser (see :pep:`617`), and Python 3.10 may 937 include new language syntax that is not parsable by lib2to3's LL(1) parser. 938 The :mod:`!lib2to3` module may be removed from the standard library in a future 939 Python version. Consider third-party alternatives such as `LibCST`_ or 940 `parso`_. 941 (Contributed by Carl Meyer in :issue:`40360`.) 942 943* The *random* parameter of :func:`random.shuffle` has been deprecated. 944 (Contributed by Raymond Hettinger in :issue:`40465`) 945 946.. _LibCST: https://libcst.readthedocs.io/ 947.. _parso: https://parso.readthedocs.io/ 948 949.. _removed-in-python-39: 950 951Removed 952======= 953 954* The erroneous version at :data:`!unittest.mock.__version__` has been removed. 955 956* :class:`!nntplib.NNTP`: ``xpath()`` and ``xgtitle()`` methods have been removed. 957 These methods are deprecated since Python 3.3. Generally, these extensions 958 are not supported or not enabled by NNTP server administrators. 959 For ``xgtitle()``, please use :meth:`!nntplib.NNTP.descriptions` or 960 :meth:`!nntplib.NNTP.description` instead. 961 (Contributed by Donghee Na in :issue:`39366`.) 962 963* :class:`array.array`: ``tostring()`` and ``fromstring()`` methods have been 964 removed. They were aliases to ``tobytes()`` and ``frombytes()``, deprecated 965 since Python 3.2. 966 (Contributed by Victor Stinner in :issue:`38916`.) 967 968* The undocumented ``sys.callstats()`` function has been removed. Since Python 969 3.7, it was deprecated and always returned :const:`None`. It required a special 970 build option ``CALL_PROFILE`` which was already removed in Python 3.7. 971 (Contributed by Victor Stinner in :issue:`37414`.) 972 973* The ``sys.getcheckinterval()`` and ``sys.setcheckinterval()`` functions have 974 been removed. They were deprecated since Python 3.2. Use 975 :func:`sys.getswitchinterval` and :func:`sys.setswitchinterval` instead. 976 (Contributed by Victor Stinner in :issue:`37392`.) 977 978* The C function ``PyImport_Cleanup()`` has been removed. It was documented as: 979 "Empty the module table. For internal use only." 980 (Contributed by Victor Stinner in :issue:`36710`.) 981 982* ``_dummy_thread`` and ``dummy_threading`` modules have been removed. These 983 modules were deprecated since Python 3.7 which requires threading support. 984 (Contributed by Victor Stinner in :issue:`37312`.) 985 986* ``aifc.openfp()`` alias to ``aifc.open()``, ``sunau.openfp()`` alias to 987 ``sunau.open()``, and ``wave.openfp()`` alias to :func:`wave.open` have been 988 removed. They were deprecated since Python 3.7. 989 (Contributed by Victor Stinner in :issue:`37320`.) 990 991* The :meth:`!isAlive` method of :class:`threading.Thread` 992 has been removed. It was deprecated since Python 3.8. 993 Use :meth:`~threading.Thread.is_alive` instead. 994 (Contributed by Donghee Na in :issue:`37804`.) 995 996* Methods ``getchildren()`` and ``getiterator()`` of classes 997 :class:`~xml.etree.ElementTree.ElementTree` and 998 :class:`~xml.etree.ElementTree.Element` in the :mod:`~xml.etree.ElementTree` 999 module have been removed. They were deprecated in Python 3.2. 1000 Use ``iter(x)`` or ``list(x)`` instead of ``x.getchildren()`` and 1001 ``x.iter()`` or ``list(x.iter())`` instead of ``x.getiterator()``. 1002 (Contributed by Serhiy Storchaka in :issue:`36543`.) 1003 1004* The old :mod:`plistlib` API has been removed, it was deprecated since Python 1005 3.4. Use the :func:`~plistlib.load`, :func:`~plistlib.loads`, :func:`~plistlib.dump`, and 1006 :func:`~plistlib.dumps` functions. Additionally, the *use_builtin_types* parameter was 1007 removed, standard :class:`bytes` objects are always used instead. 1008 (Contributed by Jon Janzen in :issue:`36409`.) 1009 1010* The C function ``PyGen_NeedsFinalizing`` has been removed. It was not 1011 documented, tested, or used anywhere within CPython after the implementation 1012 of :pep:`442`. Patch by Joannah Nanjekye. 1013 (Contributed by Joannah Nanjekye in :issue:`15088`) 1014 1015* ``base64.encodestring()`` and ``base64.decodestring()``, aliases deprecated 1016 since Python 3.1, have been removed: use :func:`base64.encodebytes` and 1017 :func:`base64.decodebytes` instead. 1018 (Contributed by Victor Stinner in :issue:`39351`.) 1019 1020* ``fractions.gcd()`` function has been removed, it was deprecated since Python 1021 3.5 (:issue:`22486`): use :func:`math.gcd` instead. 1022 (Contributed by Victor Stinner in :issue:`39350`.) 1023 1024* The *buffering* parameter of :class:`bz2.BZ2File` has been removed. Since 1025 Python 3.0, it was ignored and using it emitted a :exc:`DeprecationWarning`. 1026 Pass an open file object to control how the file is opened. 1027 (Contributed by Victor Stinner in :issue:`39357`.) 1028 1029* The *encoding* parameter of :func:`json.loads` has been removed. 1030 As of Python 3.1, it was deprecated and ignored; using it has emitted a 1031 :exc:`DeprecationWarning` since Python 3.8. 1032 (Contributed by Inada Naoki in :issue:`39377`) 1033 1034* ``with (await asyncio.lock):`` and ``with (yield from asyncio.lock):`` statements are 1035 not longer supported, use ``async with lock`` instead. The same is correct for 1036 ``asyncio.Condition`` and ``asyncio.Semaphore``. 1037 (Contributed by Andrew Svetlov in :issue:`34793`.) 1038 1039* The :func:`!sys.getcounts` function, the ``-X showalloccount`` command line 1040 option and the ``show_alloc_count`` field of the C structure 1041 :c:type:`PyConfig` have been removed. They required a special Python build by 1042 defining ``COUNT_ALLOCS`` macro. 1043 (Contributed by Victor Stinner in :issue:`39489`.) 1044 1045* The ``_field_types`` attribute of the :class:`typing.NamedTuple` class 1046 has been removed. It was deprecated since Python 3.8. Use 1047 the ``__annotations__`` attribute instead. 1048 (Contributed by Serhiy Storchaka in :issue:`40182`.) 1049 1050* The :meth:`!symtable.SymbolTable.has_exec` method has been removed. It was 1051 deprecated since 2006, and only returning ``False`` when it's called. 1052 (Contributed by Batuhan Taskaya in :issue:`40208`) 1053 1054* The :meth:`!asyncio.Task.current_task` and :meth:`!asyncio.Task.all_tasks` 1055 have been removed. They were deprecated since Python 3.7 and you can use 1056 :func:`asyncio.current_task` and :func:`asyncio.all_tasks` instead. 1057 (Contributed by Rémi Lapeyre in :issue:`40967`) 1058 1059* The ``unescape()`` method in the :class:`html.parser.HTMLParser` class 1060 has been removed (it was deprecated since Python 3.4). :func:`html.unescape` 1061 should be used for converting character references to the corresponding 1062 unicode characters. 1063 1064 1065Porting to Python 3.9 1066===================== 1067 1068This section lists previously described changes and other bugfixes 1069that may require changes to your code. 1070 1071 1072Changes in the Python API 1073------------------------- 1074 1075* :func:`__import__` and :func:`importlib.util.resolve_name` now raise 1076 :exc:`ImportError` where it previously raised :exc:`ValueError`. Callers 1077 catching the specific exception type and supporting both Python 3.9 and 1078 earlier versions will need to catch both using ``except (ImportError, ValueError):``. 1079 1080* The :mod:`venv` activation scripts no longer special-case when 1081 ``__VENV_PROMPT__`` is set to ``""``. 1082 1083* The :meth:`select.epoll.unregister` method no longer ignores the 1084 :const:`~errno.EBADF` error. 1085 (Contributed by Victor Stinner in :issue:`39239`.) 1086 1087* The *compresslevel* parameter of :class:`bz2.BZ2File` became keyword-only, 1088 since the *buffering* parameter has been removed. 1089 (Contributed by Victor Stinner in :issue:`39357`.) 1090 1091* Simplified AST for subscription. Simple indices will be represented by 1092 their value, extended slices will be represented as tuples. 1093 ``Index(value)`` will return a ``value`` itself, ``ExtSlice(slices)`` 1094 will return ``Tuple(slices, Load())``. 1095 (Contributed by Serhiy Storchaka in :issue:`34822`.) 1096 1097* The :mod:`importlib` module now ignores the :envvar:`PYTHONCASEOK` 1098 environment variable when the :option:`-E` or :option:`-I` command line 1099 options are being used. 1100 1101* The *encoding* parameter has been added to the classes :class:`ftplib.FTP` and 1102 :class:`ftplib.FTP_TLS` as a keyword-only parameter, and the default encoding 1103 is changed from Latin-1 to UTF-8 to follow :rfc:`2640`. 1104 1105* :meth:`asyncio.loop.shutdown_default_executor` has been added to 1106 :class:`~asyncio.AbstractEventLoop`, meaning alternative event loops that 1107 inherit from it should have this method defined. 1108 (Contributed by Kyle Stanley in :issue:`34037`.) 1109 1110* The constant values of future flags in the :mod:`__future__` module 1111 is updated in order to prevent collision with compiler flags. Previously 1112 ``PyCF_ALLOW_TOP_LEVEL_AWAIT`` was clashing with ``CO_FUTURE_DIVISION``. 1113 (Contributed by Batuhan Taskaya in :issue:`39562`) 1114 1115* ``array('u')`` now uses :c:type:`wchar_t` as C type instead of ``Py_UNICODE``. 1116 This change doesn't affect to its behavior because ``Py_UNICODE`` is alias 1117 of :c:type:`wchar_t` since Python 3.3. 1118 (Contributed by Inada Naoki in :issue:`34538`.) 1119 1120* The :func:`logging.getLogger` API now returns the root logger when passed 1121 the name ``'root'``, whereas previously it returned a non-root logger named 1122 ``'root'``. This could affect cases where user code explicitly wants a 1123 non-root logger named ``'root'``, or instantiates a logger using 1124 ``logging.getLogger(__name__)`` in some top-level module called ``'root.py'``. 1125 (Contributed by Vinay Sajip in :issue:`37742`.) 1126 1127* Division handling of :class:`~pathlib.PurePath` now returns :data:`NotImplemented` 1128 instead of raising a :exc:`TypeError` when passed something other than an 1129 instance of ``str`` or :class:`~pathlib.PurePath`. This allows creating 1130 compatible classes that don't inherit from those mentioned types. 1131 (Contributed by Roger Aiudi in :issue:`34775`). 1132 1133* Starting with Python 3.9.5 the :mod:`ipaddress` module no longer 1134 accepts any leading zeros in IPv4 address strings. Leading zeros are 1135 ambiguous and interpreted as octal notation by some libraries. For example 1136 the legacy function :func:`socket.inet_aton` treats leading zeros as octal 1137 notatation. glibc implementation of modern :func:`~socket.inet_pton` does 1138 not accept any leading zeros. 1139 (Contributed by Christian Heimes in :issue:`36384`). 1140 1141* :func:`codecs.lookup` now normalizes the encoding name the same way as 1142 :func:`encodings.normalize_encoding`, except that :func:`codecs.lookup` also 1143 converts the name to lower case. For example, ``"latex+latin1"`` encoding 1144 name is now normalized to ``"latex_latin1"``. 1145 (Contributed by Jordon Xu in :issue:`37751`.) 1146 1147 1148Changes in the C API 1149-------------------- 1150 1151* Instances of :ref:`heap-allocated types <heap-types>` (such as those created with 1152 :c:func:`PyType_FromSpec` and similar APIs) hold a reference to their type 1153 object since Python 3.8. As indicated in the "Changes in the C API" of Python 1154 3.8, for the vast majority of cases, there should be no side effect but for 1155 types that have a custom :c:member:`~PyTypeObject.tp_traverse` function, 1156 ensure that all custom ``tp_traverse`` functions of heap-allocated types 1157 visit the object's type. 1158 1159 Example: 1160 1161 .. code-block:: c 1162 1163 int 1164 foo_traverse(foo_struct *self, visitproc visit, void *arg) { 1165 // Rest of the traverse function 1166 #if PY_VERSION_HEX >= 0x03090000 1167 // This was not needed before Python 3.9 (Python issue 35810 and 40217) 1168 Py_VISIT(Py_TYPE(self)); 1169 #endif 1170 } 1171 1172 If your traverse function delegates to ``tp_traverse`` of its base class 1173 (or another type), ensure that ``Py_TYPE(self)`` is visited only once. 1174 Note that only :ref:`heap type <heap-types>` are expected to visit the type 1175 in ``tp_traverse``. 1176 1177 For example, if your ``tp_traverse`` function includes: 1178 1179 .. code-block:: c 1180 1181 base->tp_traverse(self, visit, arg) 1182 1183 then add: 1184 1185 .. code-block:: c 1186 1187 #if PY_VERSION_HEX >= 0x03090000 1188 // This was not needed before Python 3.9 (bpo-35810 and bpo-40217) 1189 if (base->tp_flags & Py_TPFLAGS_HEAPTYPE) { 1190 // a heap type's tp_traverse already visited Py_TYPE(self) 1191 } else { 1192 Py_VISIT(Py_TYPE(self)); 1193 } 1194 #else 1195 1196 (See :issue:`35810` and :issue:`40217` for more information.) 1197 1198* The functions ``PyEval_CallObject``, ``PyEval_CallFunction``, 1199 ``PyEval_CallMethod`` and ``PyEval_CallObjectWithKeywords`` are deprecated. 1200 Use :c:func:`PyObject_Call` and its variants instead. 1201 (See more details in :issue:`29548`.) 1202 1203CPython bytecode changes 1204------------------------ 1205 1206* The :opcode:`LOAD_ASSERTION_ERROR` opcode was added for handling the 1207 :keyword:`assert` statement. Previously, the assert statement would not work 1208 correctly if the :exc:`AssertionError` exception was being shadowed. 1209 (Contributed by Zackery Spytz in :issue:`34880`.) 1210 1211* The :opcode:`COMPARE_OP` opcode was split into four distinct instructions: 1212 1213 * ``COMPARE_OP`` for rich comparisons 1214 * ``IS_OP`` for 'is' and 'is not' tests 1215 * ``CONTAINS_OP`` for 'in' and 'not in' tests 1216 * ``JUMP_IF_NOT_EXC_MATCH`` for checking exceptions in 'try-except' 1217 statements. 1218 1219 (Contributed by Mark Shannon in :issue:`39156`.) 1220 1221 1222Build Changes 1223============= 1224 1225* Added ``--with-platlibdir`` option to the ``configure`` script: name of the 1226 platform-specific library directory, stored in the new :data:`sys.platlibdir` 1227 attribute. See :data:`sys.platlibdir` attribute for more information. 1228 (Contributed by Jan Matějek, Matěj Cepl, Charalampos Stratakis 1229 and Victor Stinner in :issue:`1294959`.) 1230 1231* The ``COUNT_ALLOCS`` special build macro has been removed. 1232 (Contributed by Victor Stinner in :issue:`39489`.) 1233 1234* On non-Windows platforms, the :c:func:`!setenv` and :c:func:`!unsetenv` 1235 functions are now required to build Python. 1236 (Contributed by Victor Stinner in :issue:`39395`.) 1237 1238* On non-Windows platforms, creating ``bdist_wininst`` installers is now 1239 officially unsupported. (See :issue:`10945` for more details.) 1240 1241* When building Python on macOS from source, ``_tkinter`` now links with 1242 non-system Tcl and Tk frameworks if they are installed in 1243 ``/Library/Frameworks``, as had been the case on older releases 1244 of macOS. If a macOS SDK is explicitly configured, by using 1245 :option:`--enable-universalsdk` or ``-isysroot``, only the SDK itself is 1246 searched. The default behavior can still be overridden with 1247 ``--with-tcltk-includes`` and ``--with-tcltk-libs``. 1248 (Contributed by Ned Deily in :issue:`34956`.) 1249 1250* Python can now be built for Windows 10 ARM64. 1251 (Contributed by Steve Dower in :issue:`33125`.) 1252 1253* Some individual tests are now skipped when ``--pgo`` is used. The tests 1254 in question increased the PGO task time significantly and likely 1255 didn't help improve optimization of the final executable. This 1256 speeds up the task by a factor of about 15x. Running the full unit test 1257 suite is slow. This change may result in a slightly less optimized build 1258 since not as many code branches will be executed. If you are willing to 1259 wait for the much slower build, the old behavior can be restored using 1260 ``./configure [..] PROFILE_TASK="-m test --pgo-extended"``. We make no 1261 guarantees as to which PGO task set produces a faster build. Users who care 1262 should run their own relevant benchmarks as results can depend on the 1263 environment, workload, and compiler tool chain. 1264 (See :issue:`36044` and :issue:`37707` for more details.) 1265 1266 1267C API Changes 1268============= 1269 1270New Features 1271------------ 1272 1273* :pep:`573`: Added :c:func:`PyType_FromModuleAndSpec` to associate 1274 a module with a class; :c:func:`PyType_GetModule` and 1275 :c:func:`PyType_GetModuleState` to retrieve the module and its state; and 1276 :c:type:`PyCMethod` and :c:macro:`METH_METHOD` to allow a method to 1277 access the class it was defined in. 1278 (Contributed by Marcel Plch and Petr Viktorin in :issue:`38787`.) 1279 1280* Added :c:func:`PyFrame_GetCode` function: get a frame code. 1281 Added :c:func:`PyFrame_GetBack` function: get the frame next outer frame. 1282 (Contributed by Victor Stinner in :issue:`40421`.) 1283 1284* Added :c:func:`PyFrame_GetLineNumber` to the limited C API. 1285 (Contributed by Victor Stinner in :issue:`40421`.) 1286 1287* Added :c:func:`PyThreadState_GetInterpreter` and 1288 :c:func:`PyInterpreterState_Get` functions to get the interpreter. 1289 Added :c:func:`PyThreadState_GetFrame` function to get the current frame of a 1290 Python thread state. 1291 Added :c:func:`PyThreadState_GetID` function: get the unique identifier of a 1292 Python thread state. 1293 (Contributed by Victor Stinner in :issue:`39947`.) 1294 1295* Added a new public :c:func:`PyObject_CallNoArgs` function to the C API, which 1296 calls a callable Python object without any arguments. It is the most efficient 1297 way to call a callable Python object without any argument. 1298 (Contributed by Victor Stinner in :issue:`37194`.) 1299 1300* Changes in the limited C API (if ``Py_LIMITED_API`` macro is defined): 1301 1302 * Provide :c:func:`Py_EnterRecursiveCall` and :c:func:`Py_LeaveRecursiveCall` 1303 as regular functions for the limited API. Previously, there were defined as 1304 macros, but these macros didn't compile with the limited C API which cannot 1305 access ``PyThreadState.recursion_depth`` field (the structure is opaque in 1306 the limited C API). 1307 1308 * ``PyObject_INIT()`` and ``PyObject_INIT_VAR()`` become regular "opaque" 1309 function to hide implementation details. 1310 1311 (Contributed by Victor Stinner in :issue:`38644` and :issue:`39542`.) 1312 1313* The :c:func:`PyModule_AddType` function is added to help adding a type 1314 to a module. 1315 (Contributed by Donghee Na in :issue:`40024`.) 1316 1317* Added the functions :c:func:`PyObject_GC_IsTracked` and 1318 :c:func:`PyObject_GC_IsFinalized` to the public API to allow to query if 1319 Python objects are being currently tracked or have been already finalized by 1320 the garbage collector respectively. 1321 (Contributed by Pablo Galindo Salgado in :issue:`40241`.) 1322 1323* Added :c:func:`!_PyObject_FunctionStr` to get a user-friendly string 1324 representation of a function-like object. 1325 (Patch by Jeroen Demeyer in :issue:`37645`.) 1326 1327* Added :c:func:`PyObject_CallOneArg` for calling an object with one 1328 positional argument 1329 (Patch by Jeroen Demeyer in :issue:`37483`.) 1330 1331 1332Porting to Python 3.9 1333--------------------- 1334 1335* ``PyInterpreterState.eval_frame`` (:pep:`523`) now requires a new mandatory 1336 *tstate* parameter (``PyThreadState*``). 1337 (Contributed by Victor Stinner in :issue:`38500`.) 1338 1339* Extension modules: :c:member:`~PyModuleDef.m_traverse`, 1340 :c:member:`~PyModuleDef.m_clear` and :c:member:`~PyModuleDef.m_free` 1341 functions of :c:type:`PyModuleDef` are no longer called if the module state 1342 was requested but is not allocated yet. This is the case immediately after 1343 the module is created and before the module is executed 1344 (:c:data:`Py_mod_exec` function). More precisely, these functions are not called 1345 if :c:member:`~PyModuleDef.m_size` is greater than 0 and the module state (as 1346 returned by :c:func:`PyModule_GetState`) is ``NULL``. 1347 1348 Extension modules without module state (``m_size <= 0``) are not affected. 1349 1350* If :c:func:`Py_AddPendingCall` is called in a subinterpreter, the function is 1351 now scheduled to be called from the subinterpreter, rather than being called 1352 from the main interpreter. Each subinterpreter now has its own list of 1353 scheduled calls. 1354 (Contributed by Victor Stinner in :issue:`39984`.) 1355 1356* The Windows registry is no longer used to initialize :data:`sys.path` when 1357 the ``-E`` option is used (if :c:member:`PyConfig.use_environment` is set to 1358 ``0``). This is significant when embedding Python on Windows. 1359 (Contributed by Zackery Spytz in :issue:`8901`.) 1360 1361* The global variable :c:data:`PyStructSequence_UnnamedField` is now a constant 1362 and refers to a constant string. 1363 (Contributed by Serhiy Storchaka in :issue:`38650`.) 1364 1365* The :c:type:`!PyGC_Head` structure is now opaque. It is only defined in the 1366 internal C API (``pycore_gc.h``). 1367 (Contributed by Victor Stinner in :issue:`40241`.) 1368 1369* The ``Py_UNICODE_COPY``, ``Py_UNICODE_FILL``, ``PyUnicode_WSTR_LENGTH``, 1370 :c:func:`!PyUnicode_FromUnicode`, :c:func:`!PyUnicode_AsUnicode`, 1371 ``_PyUnicode_AsUnicode``, and :c:func:`!PyUnicode_AsUnicodeAndSize` are 1372 marked as deprecated in C. They have been deprecated by :pep:`393` since 1373 Python 3.3. 1374 (Contributed by Inada Naoki in :issue:`36346`.) 1375 1376* The :c:func:`Py_FatalError` function is replaced with a macro which logs 1377 automatically the name of the current function, unless the 1378 ``Py_LIMITED_API`` macro is defined. 1379 (Contributed by Victor Stinner in :issue:`39882`.) 1380 1381* The vectorcall protocol now requires that the caller passes only strings as 1382 keyword names. (See :issue:`37540` for more information.) 1383 1384* Implementation details of a number of macros and functions are now hidden: 1385 1386 * :c:func:`PyObject_IS_GC` macro was converted to a function. 1387 1388 * The :c:func:`!PyObject_NEW` macro becomes an alias to the 1389 :c:macro:`PyObject_New` macro, and the :c:func:`!PyObject_NEW_VAR` macro 1390 becomes an alias to the :c:macro:`PyObject_NewVar` macro. They no longer 1391 access directly the :c:member:`PyTypeObject.tp_basicsize` member. 1392 1393 * :c:func:`!PyObject_GET_WEAKREFS_LISTPTR` macro was converted to a function: 1394 the macro accessed directly the :c:member:`PyTypeObject.tp_weaklistoffset` 1395 member. 1396 1397 * :c:func:`PyObject_CheckBuffer` macro was converted to a function: the macro 1398 accessed directly the :c:member:`PyTypeObject.tp_as_buffer` member. 1399 1400 * :c:func:`PyIndex_Check` is now always declared as an opaque function to hide 1401 implementation details: removed the ``PyIndex_Check()`` macro. The macro accessed 1402 directly the :c:member:`PyTypeObject.tp_as_number` member. 1403 1404 (See :issue:`40170` for more details.) 1405 1406Removed 1407------- 1408 1409* Excluded ``PyFPE_START_PROTECT()`` and ``PyFPE_END_PROTECT()`` macros of 1410 ``pyfpe.h`` from the limited C API. 1411 (Contributed by Victor Stinner in :issue:`38835`.) 1412 1413* The ``tp_print`` slot of :ref:`PyTypeObject <type-structs>` has been removed. 1414 It was used for printing objects to files in Python 2.7 and before. Since 1415 Python 3.0, it has been ignored and unused. 1416 (Contributed by Jeroen Demeyer in :issue:`36974`.) 1417 1418* Changes in the limited C API (if ``Py_LIMITED_API`` macro is defined): 1419 1420 * Excluded the following functions from the limited C API: 1421 1422 * ``PyThreadState_DeleteCurrent()`` 1423 (Contributed by Joannah Nanjekye in :issue:`37878`.) 1424 * ``_Py_CheckRecursionLimit`` 1425 * ``_Py_NewReference()`` 1426 * ``_Py_ForgetReference()`` 1427 * ``_PyTraceMalloc_NewReference()`` 1428 * ``_Py_GetRefTotal()`` 1429 * The trashcan mechanism which never worked in the limited C API. 1430 * ``PyTrash_UNWIND_LEVEL`` 1431 * ``Py_TRASHCAN_BEGIN_CONDITION`` 1432 * ``Py_TRASHCAN_BEGIN`` 1433 * ``Py_TRASHCAN_END`` 1434 * ``Py_TRASHCAN_SAFE_BEGIN`` 1435 * ``Py_TRASHCAN_SAFE_END`` 1436 1437 * Moved following functions and definitions to the internal C API: 1438 1439 * ``_PyDebug_PrintTotalRefs()`` 1440 * ``_Py_PrintReferences()`` 1441 * ``_Py_PrintReferenceAddresses()`` 1442 * ``_Py_tracemalloc_config`` 1443 * ``_Py_AddToAllObjects()`` (specific to ``Py_TRACE_REFS`` build) 1444 1445 (Contributed by Victor Stinner in :issue:`38644` and :issue:`39542`.) 1446 1447* Removed ``_PyRuntime.getframe`` hook and removed ``_PyThreadState_GetFrame`` 1448 macro which was an alias to ``_PyRuntime.getframe``. They were only exposed 1449 by the internal C API. Removed also ``PyThreadFrameGetter`` type. 1450 (Contributed by Victor Stinner in :issue:`39946`.) 1451 1452* Removed the following functions from the C API. Call :c:func:`PyGC_Collect` 1453 explicitly to clear all free lists. 1454 (Contributed by Inada Naoki and Victor Stinner in :issue:`37340`, 1455 :issue:`38896` and :issue:`40428`.) 1456 1457 * ``PyAsyncGen_ClearFreeLists()`` 1458 * ``PyContext_ClearFreeList()`` 1459 * ``PyDict_ClearFreeList()`` 1460 * ``PyFloat_ClearFreeList()`` 1461 * ``PyFrame_ClearFreeList()`` 1462 * ``PyList_ClearFreeList()`` 1463 * ``PyMethod_ClearFreeList()`` and ``PyCFunction_ClearFreeList()``: 1464 the free lists of bound method objects have been removed. 1465 * ``PySet_ClearFreeList()``: the set free list has been removed 1466 in Python 3.4. 1467 * ``PyTuple_ClearFreeList()`` 1468 * ``PyUnicode_ClearFreeList()``: the Unicode free list has been removed in 1469 Python 3.3. 1470 1471* Removed ``_PyUnicode_ClearStaticStrings()`` function. 1472 (Contributed by Victor Stinner in :issue:`39465`.) 1473 1474* Removed ``Py_UNICODE_MATCH``. It has been deprecated by :pep:`393`, and 1475 broken since Python 3.3. The :c:func:`PyUnicode_Tailmatch` function can be 1476 used instead. 1477 (Contributed by Inada Naoki in :issue:`36346`.) 1478 1479* Cleaned header files of interfaces defined but with no implementation. 1480 The public API symbols being removed are: 1481 ``_PyBytes_InsertThousandsGroupingLocale``, 1482 ``_PyBytes_InsertThousandsGrouping``, ``_Py_InitializeFromArgs``, 1483 ``_Py_InitializeFromWideArgs``, ``_PyFloat_Repr``, ``_PyFloat_Digits``, 1484 ``_PyFloat_DigitsInit``, ``PyFrame_ExtendStack``, ``_PyAIterWrapper_Type``, 1485 ``PyNullImporter_Type``, ``PyCmpWrapper_Type``, ``PySortWrapper_Type``, 1486 ``PyNoArgsFunction``. 1487 (Contributed by Pablo Galindo Salgado in :issue:`39372`.) 1488 1489Notable changes in Python 3.9.1 1490=============================== 1491 1492typing 1493------ 1494 1495The behavior of :class:`typing.Literal` was changed to conform with :pep:`586` 1496and to match the behavior of static type checkers specified in the PEP. 1497 14981. ``Literal`` now de-duplicates parameters. 14992. Equality comparisons between ``Literal`` objects are now order independent. 15003. ``Literal`` comparisons now respect types. For example, 1501 ``Literal[0] == Literal[False]`` previously evaluated to ``True``. It is 1502 now ``False``. To support this change, the internally used type cache now 1503 supports differentiating types. 15044. ``Literal`` objects will now raise a :exc:`TypeError` exception during 1505 equality comparisons if any of their parameters are not :term:`hashable`. 1506 Note that declaring ``Literal`` with mutable parameters will not throw 1507 an error:: 1508 1509 >>> from typing import Literal 1510 >>> Literal[{0}] 1511 >>> Literal[{0}] == Literal[{False}] 1512 Traceback (most recent call last): 1513 File "<stdin>", line 1, in <module> 1514 TypeError: unhashable type: 'set' 1515 1516(Contributed by Yurii Karabas in :issue:`42345`.) 1517 1518macOS 11.0 (Big Sur) and Apple Silicon Mac support 1519-------------------------------------------------- 1520 1521As of 3.9.1, Python now fully supports building and running on macOS 11.0 1522(Big Sur) and on Apple Silicon Macs (based on the ``ARM64`` architecture). 1523A new universal build variant, ``universal2``, is now available to natively 1524support both ``ARM64`` and ``Intel 64`` in one set of executables. Binaries 1525can also now be built on current versions of macOS to be deployed on a range 1526of older macOS versions (tested to 10.9) while making some newer OS 1527functions and options conditionally available based on the operating system 1528version in use at runtime ("weaklinking"). 1529 1530(Contributed by Ronald Oussoren and Lawrence D'Anna in :issue:`41100`.) 1531 1532Notable changes in Python 3.9.2 1533=============================== 1534 1535collections.abc 1536--------------- 1537 1538:class:`collections.abc.Callable` generic now flattens type parameters, similar 1539to what :data:`typing.Callable` currently does. This means that 1540``collections.abc.Callable[[int, str], str]`` will have ``__args__`` of 1541``(int, str, str)``; previously this was ``([int, str], str)``. To allow this 1542change, :class:`types.GenericAlias` can now be subclassed, and a subclass will 1543be returned when subscripting the :class:`collections.abc.Callable` type. 1544Code which accesses the arguments via :func:`typing.get_args` or ``__args__`` 1545need to account for this change. A :exc:`DeprecationWarning` may be emitted for 1546invalid forms of parameterizing :class:`collections.abc.Callable` which may have 1547passed silently in Python 3.9.1. This :exc:`DeprecationWarning` will 1548become a :exc:`TypeError` in Python 3.10. 1549(Contributed by Ken Jin in :issue:`42195`.) 1550 1551urllib.parse 1552------------ 1553 1554Earlier Python versions allowed using both ``;`` and ``&`` as 1555query parameter separators in :func:`urllib.parse.parse_qs` and 1556:func:`urllib.parse.parse_qsl`. Due to security concerns, and to conform with 1557newer W3C recommendations, this has been changed to allow only a single 1558separator key, with ``&`` as the default. This change also affects 1559:func:`!cgi.parse` and :func:`!cgi.parse_multipart` as they use the affected 1560functions internally. For more details, please see their respective 1561documentation. 1562(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.) 1563 1564Notable changes in Python 3.9.3 1565=============================== 1566 1567A security fix alters the :class:`ftplib.FTP` behavior to not trust the 1568IPv4 address sent from the remote server when setting up a passive data 1569channel. We reuse the ftp server IP address instead. For unusual code 1570requiring the old behavior, set a ``trust_server_pasv_ipv4_address`` 1571attribute on your FTP instance to ``True``. (See :gh:`87451`) 1572 1573Notable changes in Python 3.9.5 1574=============================== 1575 1576urllib.parse 1577------------ 1578 1579The presence of newline or tab characters in parts of a URL allows for some 1580forms of attacks. Following the WHATWG specification that updates :rfc:`3986`, 1581ASCII newline ``\n``, ``\r`` and tab ``\t`` characters are stripped from the 1582URL by the parser in :mod:`urllib.parse` preventing such attacks. The removal 1583characters are controlled by a new module level variable 1584``urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE``. (See :gh:`88048`) 1585 1586Notable security feature in 3.9.14 1587================================== 1588 1589Converting between :class:`int` and :class:`str` in bases other than 2 1590(binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 (decimal) 1591now raises a :exc:`ValueError` if the number of digits in string form is 1592above a limit to avoid potential denial of service attacks due to the 1593algorithmic complexity. This is a mitigation for :cve:`2020-10735`. 1594This limit can be configured or disabled by environment variable, command 1595line flag, or :mod:`sys` APIs. See the :ref:`integer string conversion 1596length limitation <int_max_str_digits>` documentation. The default limit 1597is 4300 digits in string form. 1598 1599Notable changes in 3.9.17 1600========================= 1601 1602tarfile 1603------- 1604 1605* The extraction methods in :mod:`tarfile`, and :func:`shutil.unpack_archive`, 1606 have a new a *filter* argument that allows limiting tar features than may be 1607 surprising or dangerous, such as creating files outside the destination 1608 directory. 1609 See :ref:`tarfile-extraction-filter` for details. 1610 In Python 3.12, use without the *filter* argument will show a 1611 :exc:`DeprecationWarning`. 1612 In Python 3.14, the default will switch to ``'data'``. 1613 (Contributed by Petr Viktorin in :pep:`706`.) 1614