blob: 87199df32bf6384af0b1df70926a86e4f3fb9f95 [file] [log] [blame]
Yury Selivanovd1da5072015-05-27 22:09:10 -04001****************************
2 What's New In Python 3.6
3****************************
4
5:Release: |release|
6:Date: |today|
7
8.. Rules for maintenance:
9
10 * Anyone can add text to this document. Do not spend very much time
11 on the wording of your changes, because your text will probably
12 get rewritten to some degree.
13
14 * The maintainer will go through Misc/NEWS periodically and add
15 changes; it's therefore more important to add your changes to
16 Misc/NEWS than to this file.
17
18 * This is not a complete list of every single change; completeness
19 is the purpose of Misc/NEWS. Some changes I consider too small
20 or esoteric to include. If such a change is added to the text,
21 I'll just remove it. (This is another reason you shouldn't spend
22 too much time on writing your addition.)
23
24 * If you want to draw your new text to the attention of the
25 maintainer, add 'XXX' to the beginning of the paragraph or
26 section.
27
28 * It's OK to just add a fragmentary note about a change. For
29 example: "XXX Describe the transmogrify() function added to the
30 socket module." The maintainer will research the change and
31 write the necessary text.
32
33 * You can comment out your additions if you like, but it's not
34 necessary (especially when a final release is some months away).
35
36 * Credit the author of a patch or bugfix. Just the name is
37 sufficient; the e-mail address isn't necessary.
38
39 * It's helpful to add the bug/patch number as a comment:
40
41 XXX Describe the transmogrify() function added to the socket
42 module.
43 (Contributed by P.Y. Developer in :issue:`12345`.)
44
45 This saves the maintainer the effort of going through the Mercurial log
46 when researching a change.
47
48This article explains the new features in Python 3.6, compared to 3.5.
49
50For full details, see the :source:`Misc/NEWS` file.
51
52.. note::
53
54 Prerelease users should be aware that this document is currently in draft
55 form. It will be updated substantially as Python 3.6 moves towards release,
56 so it's worth checking back even after reading earlier versions.
57
58
59Summary -- Release highlights
60=============================
61
62.. This section singles out the most important changes in Python 3.6.
63 Brevity is key.
64
65* None yet.
66
67.. PEP-sized items next.
68
69.. _pep-4XX:
70
71.. PEP 4XX: Virtual Environments
72.. =============================
73
74
75.. (Implemented by Foo Bar.)
76
77.. .. seealso::
78
79 :pep:`4XX` - Python Virtual Environments
80 PEP written by Carl Meyer
81
82
83Other Language Changes
84======================
85
86* None yet.
87
88
89New Modules
90===========
91
92* None yet.
93
94
95Improved Modules
96================
97
Berker Peksagb6c95722015-10-08 13:58:49 +030098datetime
99--------
100
Martin Panterfad4b602015-11-14 01:29:17 +0000101The :meth:`datetime.strftime() <datetime.datetime.strftime>` and
102:meth:`date.strftime() <datetime.date.strftime>` methods now support ISO 8601 date
Berker Peksagb6c95722015-10-08 13:58:49 +0300103directives ``%G``, ``%u`` and ``%V``.
104(Contributed by Ashley Anderson in :issue:`12006`.)
105
106
Serhiy Storchaka0d554d72015-10-10 22:42:18 +0300107pickle
108------
109
Martin Panterfad4b602015-11-14 01:29:17 +0000110Objects that need calling ``__new__`` with keyword arguments can now be pickled
Serhiy Storchaka0d554d72015-10-10 22:42:18 +0300111using :ref:`pickle protocols <pickle-protocols>` older than protocol version 4.
112Protocol version 4 already supports this case. (Contributed by Serhiy
113Storchaka in :issue:`24164`.)
114
115
Martin Panterfad4b602015-11-14 01:29:17 +0000116rlcompleter
117-----------
Serhiy Storchakaab824222015-09-27 13:43:50 +0300118
119Private and special attribute names now are omitted unless the prefix starts
Martin Panterfad4b602015-11-14 01:29:17 +0000120with underscores. A space or a colon is added after some completed keywords.
Serhiy Storchakaab824222015-09-27 13:43:50 +0300121(Contributed by Serhiy Storchaka in :issue:`25011` and :issue:`25209`.)
122
Martin Panter6fe39262015-11-13 23:54:02 +0000123Names of most attributes listed by :func:`dir` are now completed.
124Previously, names of properties and slots which were not yet created on
125an instance were excluded. (Contributed by Martin Panter in :issue:`25590`.)
126
Serhiy Storchakaab824222015-09-27 13:43:50 +0300127
R David Murray4f098062015-11-28 12:24:52 -0500128telnetlib
129---------
130
131:class:`~telnetlib.Telnet` is now a context manager (contributed by
132Stéphane Wirtel in :issue:`25485`).
133
134
Berker Peksag960e8482015-10-08 12:27:06 +0300135urllib.robotparser
136------------------
137
Martin Panterfad4b602015-11-14 01:29:17 +0000138:class:`~urllib.robotparser.RobotFileParser` now supports the ``Crawl-delay`` and
Berker Peksag960e8482015-10-08 12:27:06 +0300139``Request-rate`` extensions.
140(Contributed by Nikolay Bogoychev in :issue:`16099`.)
141
142
Serhiy Storchaka503f9082016-02-08 00:02:25 +0200143zipfile
144-------
145
146A new :meth:`ZipInfo.from_file() <zipfile.ZipInfo.from_file>` class method
147allow to make :class:`~zipfile.ZipInfo` instance from a filesystem file.
148A new :meth:`ZipInfo.is_dir() <zipfile.ZipInfo.is_dir>` method can be used
149to check if the :class:`~zipfile.ZipInfo` instance represents a directory.
150(Contributed by Thomas Kluyver in :issue:`26039`.)
151
152
Martin Panter1fe0d132016-02-10 10:06:36 +0000153zlib
154----
155
156The :func:`~zlib.compress` function now accepts keyword arguments.
157(Contributed by Aviv Palivoda in :issue:`26243`.)
158
159
Yury Selivanovd1da5072015-05-27 22:09:10 -0400160Optimizations
161=============
162
Martin Panterfad4b602015-11-14 01:29:17 +0000163* The ASCII decoder is now up to 60 times as fast for error handlers
Victor Stinnerebcf9ed2015-10-14 10:10:00 +0200164 ``surrogateescape``, ``ignore`` and ``replace`` (Contributed
165 by Victor Stinner in :issue:`24870`).
Yury Selivanovd1da5072015-05-27 22:09:10 -0400166
Terry Jan Reedy6dc9ce12015-10-20 01:07:53 -0400167* The ASCII and the Latin1 encoders are now up to 3 times as fast for the
Martin Panterfad4b602015-11-14 01:29:17 +0000168 error handler ``surrogateescape`` (Contributed by Victor Stinner in :issue:`25227`).
Victor Stinnerc3713e92015-09-29 12:32:13 +0200169
Martin Panterfad4b602015-11-14 01:29:17 +0000170* The UTF-8 encoder is now up to 75 times as fast for error handlers
Victor Stinnerebcf9ed2015-10-14 10:10:00 +0200171 ``ignore``, ``replace``, ``surrogateescape``, ``surrogatepass`` (Contributed
172 by Victor Stinner in :issue:`25267`).
Victor Stinner01ada392015-10-01 21:54:51 +0200173
Martin Panterfad4b602015-11-14 01:29:17 +0000174* The UTF-8 decoder is now up to 15 times as fast for error handlers
Victor Stinnerebcf9ed2015-10-14 10:10:00 +0200175 ``ignore``, ``replace`` and ``surrogateescape`` (Contributed
176 by Victor Stinner in :issue:`25301`).
177
178* ``bytes % args`` is now up to 2 times faster. (Contributed by Victor Stinner
179 in :issue:`25349`).
180
181* ``bytearray % args`` is now between 2.5 and 5 times faster. (Contributed by
182 Victor Stinner in :issue:`25399`).
Victor Stinner1d65d912015-10-05 13:43:50 +0200183
Victor Stinner2bf89932015-10-14 11:25:33 +0200184* Optimize :meth:`bytes.fromhex` and :meth:`bytearray.fromhex`: they are now
185 between 2x and 3.5x faster. (Contributed by Victor Stinner in :issue:`25401`).
186
Yury Selivanovd1da5072015-05-27 22:09:10 -0400187
188Build and C API Changes
189=======================
190
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000191* New :c:func:`Py_FinalizeEx` API which indicates if flushing buffered data
192 failed (:issue:`5319`).
Yury Selivanovd1da5072015-05-27 22:09:10 -0400193
194
195Deprecated
196==========
197
Yury Selivanov7a219112015-05-28 17:10:29 -0400198New Keywords
199------------
200
Yury Selivanov62f27b52015-08-03 14:57:21 -0400201``async`` and ``await`` are not recommended to be used as variable, class,
202function or module names. Introduced by :pep:`492` in Python 3.5, they will
203become proper keywords in Python 3.7.
Yury Selivanov7a219112015-05-28 17:10:29 -0400204
205
Yury Selivanovd1da5072015-05-27 22:09:10 -0400206Deprecated Python modules, functions and methods
207------------------------------------------------
208
Brett Cannoneae30792015-12-28 17:55:27 -0800209* :meth:`importlib.machinery.SourceFileLoader` and
210 :meth:`importlib.machinery.SourcelessFileLoader` are now deprecated. They
211 were the only remaining implementations of
212 :meth:`importlib.abc.Loader.load_module` in :mod:`importlib` that had not
213 been deprecated in previous versions of Python in favour of
214 :meth:`importlib.abc.Loader.exec_module`.
Yury Selivanovd1da5072015-05-27 22:09:10 -0400215
216
217Deprecated functions and types of the C API
218-------------------------------------------
219
220* None yet.
221
222
223Deprecated features
224-------------------
225
Brett Cannon9b638682015-10-16 15:14:27 -0700226* The ``pyvenv`` script has been deprecated in favour of ``python3 -m venv``.
227 This prevents confusion as to what Python interpreter ``pyvenv`` is
228 connected to and thus what Python interpreter will be used by the virtual
Brett Cannon63b85052016-01-15 13:33:03 -0800229 environment. (Contributed by Brett Cannon in :issue:`25154`.)
230
231* When performing a relative import, falling back on ``__name__`` and
232 ``__path__`` from the calling module when ``__spec__`` or
233 ``__package__`` are not defined now raises an :exc:`ImportWarning`.
234 (Contributed by Rose Ames in :issue:`25791`.)
Yury Selivanovd1da5072015-05-27 22:09:10 -0400235
236
237Removed
238=======
239
240API and Feature Removals
241------------------------
242
Yury Selivanov56613162015-07-23 17:51:34 +0300243* ``inspect.getmoduleinfo()`` was removed (was deprecated since CPython 3.3).
Yury Selivanov6dfbc5d2015-07-23 17:49:00 +0300244 :func:`inspect.getmodulename` should be used for obtaining the module
245 name for a given path.
246
Senthil Kumaran613065b2016-01-17 20:12:16 -0800247* ``traceback.Ignore`` class and ``traceback.usage``, ``traceback.modname``,
248 ``traceback.fullmodname``, ``traceback.find_lines_from_code``,
249 ``traceback.find_lines``, ``traceback.find_strings``,
250 ``traceback.find_executable_lines`` methods were removed from the
251 :mod:`traceback` module. They were undocumented methods deprecated since
252 Python 3.2 and equivalent functionality is available from private methods.
253
Yury Selivanovd1da5072015-05-27 22:09:10 -0400254
255Porting to Python 3.6
256=====================
257
258This section lists previously described changes and other bugfixes
259that may require changes to your code.
260
261Changes in the Python API
262-------------------------
263
Victor Stinnerf3914eb2016-01-20 12:16:21 +0100264* The format of the ``co_lnotab`` attribute of code objects changed to support
265 negative line number delta. By default, Python does not emit bytecode with
266 negative line number delta. Functions using ``frame.f_lineno``,
267 ``PyFrame_GetLineNumber()`` or ``PyCode_Addr2Line()`` are not affected.
268 Functions decoding directly ``co_lnotab`` should be updated to use a signed
269 8-bit integer type for the line number delta, but it's only required to
270 support applications using negative line number delta. See
271 ``Objects/lnotab_notes.txt`` for the ``co_lnotab`` format and how to decode
272 it, and see the :pep:`511` for the rationale.
273
Brett Cannon1e3c3e92015-12-27 13:17:04 -0800274* The functions in the :mod:`compileall` module now return booleans instead
275 of ``1`` or ``0`` to represent success or failure, respectively. Thanks to
276 booleans being a subclass of integers, this should only be an issue if you
277 were doing identity checks for ``1`` or ``0``. See :issue:`25768`.
278
Robert Collinsdfa95c92015-08-10 09:53:30 +1200279* Reading the :attr:`~urllib.parse.SplitResult.port` attribute of
280 :func:`urllib.parse.urlsplit` and :func:`~urllib.parse.urlparse` results
281 now raises :exc:`ValueError` for out-of-range values, rather than
282 returning :const:`None`. See :issue:`20059`.
Yury Selivanovd1da5072015-05-27 22:09:10 -0400283
Brett Cannonc0d91af2015-10-16 12:21:37 -0700284* The :mod:`imp` module now raises a :exc:`DeprecationWarning` instead of
285 :exc:`PendingDeprecationWarning`.
286
Martin Panter28a465c2015-11-14 12:52:08 +0000287* The following modules have had missing APIs added to their :attr:`__all__`
Martin Pantere8afd012016-01-16 07:01:46 +0000288 attributes to match the documented APIs: :mod:`calendar`, :mod:`csv`,
289 :mod:`enum`, :mod:`fileinput`, :mod:`ftplib`, :mod:`logging`,
290 :mod:`optparse`, :mod:`tarfile`, :mod:`threading` and
Martin Panter28a465c2015-11-14 12:52:08 +0000291 :mod:`wave`. This means they will export new symbols when ``import *``
292 is used. See :issue:`23883`.
293
Brett Cannon849113a2016-01-22 15:25:50 -0800294* When performing a relative import, if ``__package__`` does not compare equal
295 to ``__spec__.parent`` then :exc:`ImportWarning` is raised.
296 (Contributed by Brett Cannon in :issue:`25791`.)
Brett Cannon63b85052016-01-15 13:33:03 -0800297
Brett Cannon9fa81262016-01-22 16:39:02 -0800298* When a relative import is performed and no parent package is known, then
299 :exc:`ImportError` will be raised. Previously, :exc:`SystemError` could be
300 raised. (Contribute by Brett Cannon in :issue:`18018`.)
301
Yury Selivanovd1da5072015-05-27 22:09:10 -0400302
303Changes in the C API
304--------------------
305
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000306* :c:func:`Py_Exit` (and the main interpreter) now override the exit status
307 with 120 if flushing buffered data failed. See :issue:`5319`.