blob: 7799adee471031f1d6fe12db7ae2d0482115653a [file] [log] [blame]
Giampaolo Rodolà3108f982011-02-24 20:59:48 +00001****************************
2 What's New In Python 3.3
3****************************
4
5:Author: Raymond Hettinger
6:Release: |release|
7:Date: |today|
8
Éric Araujob07b97f2011-10-05 01:03:34 +02009.. Rules for maintenance:
Giampaolo Rodolà3108f982011-02-24 20:59:48 +000010
11 * Anyone can add text to this document. Do not spend very much time
12 on the wording of your changes, because your text will probably
13 get rewritten to some degree.
14
15 * The maintainer will go through Misc/NEWS periodically and add
16 changes; it's therefore more important to add your changes to
17 Misc/NEWS than to this file.
18
19 * This is not a complete list of every single change; completeness
20 is the purpose of Misc/NEWS. Some changes I consider too small
21 or esoteric to include. If such a change is added to the text,
22 I'll just remove it. (This is another reason you shouldn't spend
23 too much time on writing your addition.)
24
25 * If you want to draw your new text to the attention of the
26 maintainer, add 'XXX' to the beginning of the paragraph or
27 section.
28
29 * It's OK to just add a fragmentary note about a change. For
30 example: "XXX Describe the transmogrify() function added to the
31 socket module." The maintainer will research the change and
32 write the necessary text.
33
34 * You can comment out your additions if you like, but it's not
35 necessary (especially when a final release is some months away).
36
37 * Credit the author of a patch or bugfix. Just the name is
38 sufficient; the e-mail address isn't necessary.
39
40 * It's helpful to add the bug/patch number as a comment:
41
Giampaolo Rodolà3108f982011-02-24 20:59:48 +000042 XXX Describe the transmogrify() function added to the socket
43 module.
Éric Araujob07b97f2011-10-05 01:03:34 +020044 (Contributed by P.Y. Developer in :issue:`12345`.)
Giampaolo Rodolà3108f982011-02-24 20:59:48 +000045
Éric Araujob07b97f2011-10-05 01:03:34 +020046 This saves the maintainer the effort of going through the Mercurial log
Giampaolo Rodolà3108f982011-02-24 20:59:48 +000047 when researching a change.
48
49This article explains the new features in Python 3.3, compared to 3.2.
50
51
Stefan Krah9a2d99e2012-02-25 12:24:21 +010052PEP 3118: New memoryview implementation and buffer protocol documentation
53=========================================================================
54
55:issue:`10181` - memoryview bug fixes and features.
56 Written by Stefan Krah.
57
58The new memoryview implementation comprehensively fixes all ownership and
59lifetime issues of dynamically allocated fields in the Py_buffer struct
60that led to multiple crash reports. Additionally, several functions that
61crashed or returned incorrect results for non-contiguous or multi-dimensional
62input have been fixed.
63
64The memoryview object now has a PEP-3118 compliant getbufferproc()
65that checks the consumer's request type. Many new features have been
66added, most of them work in full generality for non-contiguous arrays
67and arrays with suboffsets.
68
69The documentation has been updated, clearly spelling out responsibilities
70for both exporters and consumers. Buffer request flags are grouped into
71basic and compound flags. The memory layout of non-contiguous and
72multi-dimensional NumPy-style arrays is explained.
73
74Features
75--------
76
77* All native single character format specifiers in struct module syntax
78 (optionally prefixed with '@') are now supported.
79
80* With some restrictions, the cast() method allows changing of format and
81 shape of C-contiguous arrays.
82
83* Multi-dimensional list representations are supported for any array type.
84
85* Multi-dimensional comparisons are supported for any array type.
86
87* All array types are hashable if the exporting object is hashable
88 and the view is read-only.
89
90* Arbitrary slicing of any 1-D arrays type is supported. For example, it
91 is now possible to reverse a memoryview in O(1) by using a negative step.
92
93API changes
94-----------
95
96* The maximum number of dimensions is officially limited to 64.
97
98* The representation of empty shape, strides and suboffsets is now
99 an empty tuple instead of None.
100
101* Accessing a memoryview element with format 'B' (unsigned bytes)
102 now returns an integer (in accordance with the struct module syntax).
103 For returning a bytes object the view must be cast to 'c' first.
104
Stefan Krah54c32032012-02-29 17:47:21 +0100105* For further changes see `Build and C API Changes`_ and `Porting C code`_ .
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100106
Antoine Pitrou037ffbf2011-10-24 00:25:41 +0200107.. _pep-393:
108
Ezio Melotti48a2f8f2011-09-29 00:18:19 +0300109PEP 393: Flexible String Representation
110=======================================
111
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200112The Unicode string type is changed to support multiple internal
113representations, depending on the character with the largest Unicode ordinal
114(1, 2, or 4 bytes) in the represented string. This allows a space-efficient
115representation in common cases, but gives access to full UCS-4 on all
116systems. For compatibility with existing APIs, several representations may
117exist in parallel; over time, this compatibility should be phased out.
Ezio Melotti397546a2011-09-29 08:34:36 +0300118
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200119On the Python side, there should be no downside to this change.
Ezio Melotti397546a2011-09-29 08:34:36 +0300120
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200121On the C API side, PEP 393 is fully backward compatible. The legacy API
122should remain available at least five years. Applications using the legacy
123API will not fully benefit of the memory reduction, or - worse - may use
124a bit more memory, because Python may have to maintain two versions of each
125string (in the legacy format and in the new efficient storage).
126
Antoine Pitrou0599b5b2011-11-29 22:45:07 +0100127Functionality
128-------------
129
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200130Changes introduced by :pep:`393` are the following:
Ezio Melotti48a2f8f2011-09-29 00:18:19 +0300131
Ezio Melotti397546a2011-09-29 08:34:36 +0300132* Python now always supports the full range of Unicode codepoints, including
133 non-BMP ones (i.e. from ``U+0000`` to ``U+10FFFF``). The distinction between
134 narrow and wide builds no longer exists and Python now behaves like a wide
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200135 build, even under Windows.
Ezio Melotti397546a2011-09-29 08:34:36 +0300136
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200137* With the death of narrow builds, the problems specific to narrow builds have
138 also been fixed, for example:
Ezio Melotti397546a2011-09-29 08:34:36 +0300139
140 * :func:`len` now always returns 1 for non-BMP characters,
141 so ``len('\U0010FFFF') == 1``;
142
143 * surrogate pairs are not recombined in string literals,
144 so ``'\uDBFF\uDFFF' != '\U0010FFFF'``;
145
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200146 * indexing or slicing non-BMP characters returns the expected value,
Ezio Melotti397546a2011-09-29 08:34:36 +0300147 so ``'\U0010FFFF'[0]`` now returns ``'\U0010FFFF'`` and not ``'\uDBFF'``;
148
Antoine Pitroud136aec2011-11-17 01:48:06 +0100149 * all other functions in the standard library now correctly handle
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200150 non-BMP codepoints.
Ezio Melotti397546a2011-09-29 08:34:36 +0300151
Ezio Melotti48a2f8f2011-09-29 00:18:19 +0300152* The value of :data:`sys.maxunicode` is now always ``1114111`` (``0x10FFFF``
153 in hexadecimal). The :c:func:`PyUnicode_GetMax` function still returns
154 either ``0xFFFF`` or ``0x10FFFF`` for backward compatibility, and it should
155 not be used with the new Unicode API (see :issue:`13054`).
156
Ezio Melotti397546a2011-09-29 08:34:36 +0300157* The :file:`./configure` flag ``--with-wide-unicode`` has been removed.
Victor Stinner7d637ab2011-09-29 02:56:16 +0200158
Antoine Pitrou0599b5b2011-11-29 22:45:07 +0100159Performance and resource usage
160------------------------------
161
162The storage of Unicode strings now depends on the highest codepoint in the string:
163
164* pure ASCII and Latin1 strings (``U+0000-U+00FF``) use 1 byte per codepoint;
165
166* BMP strings (``U+0000-U+FFFF``) use 2 bytes per codepoint;
167
168* non-BMP strings (``U+10000-U+10FFFF``) use 4 bytes per codepoint.
169
170The net effect is that for most applications, memory usage of string storage
171should decrease significantly - especially compared to former wide unicode
172builds - as, in many cases, strings will be pure ASCII even in international
173contexts (because many strings store non-human language data, such as XML
174fragments, HTTP headers, JSON-encoded data, etc.). We also hope that it
175will, for the same reasons, increase CPU cache efficiency on non-trivial
176applications.
177
178.. The memory usage of Python 3.3 is two to three times smaller than Python 3.2,
179 and a little bit better than Python 2.7, on a `Django benchmark
180 <http://mail.python.org/pipermail/python-dev/2011-September/113714.html>`_.
181 XXX The result should be moved in the PEP and a link to the PEP should
182 be added here.
183
Éric Araujob07b97f2011-10-05 01:03:34 +0200184
Victor Stinnera1bf2982011-10-12 20:35:02 +0200185PEP 3151: Reworking the OS and IO exception hierarchy
186=====================================================
187
188:pep:`3151` - Reworking the OS and IO exception hierarchy
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200189 PEP written and implemented by Antoine Pitrou.
Victor Stinnera1bf2982011-10-12 20:35:02 +0200190
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200191The hierarchy of exceptions raised by operating system errors is now both
192simplified and finer-grained.
Victor Stinnera1bf2982011-10-12 20:35:02 +0200193
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200194You don't have to worry anymore about choosing the appropriate exception
195type between :exc:`OSError`, :exc:`IOError`, :exc:`EnvironmentError`,
196:exc:`WindowsError`, :exc:`mmap.error`, :exc:`socket.error` or
197:exc:`select.error`. All these exception types are now only one:
198:exc:`OSError`. The other names are kept as aliases for compatibility
199reasons.
Victor Stinnera1bf2982011-10-12 20:35:02 +0200200
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200201Also, it is now easier to catch a specific error condition. Instead of
202inspecting the ``errno`` attribute (or ``args[0]``) for a particular
203constant from the :mod:`errno` module, you can catch the adequate
204:exc:`OSError` subclass. The available subclasses are the following:
Victor Stinnera1bf2982011-10-12 20:35:02 +0200205
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200206* :exc:`BlockingIOError`
207* :exc:`ChildProcessError`
208* :exc:`ConnectionError`
209* :exc:`FileExistsError`
210* :exc:`FileNotFoundError`
211* :exc:`InterruptedError`
212* :exc:`IsADirectoryError`
213* :exc:`NotADirectoryError`
214* :exc:`PermissionError`
215* :exc:`ProcessLookupError`
216* :exc:`TimeoutError`
Victor Stinnera1bf2982011-10-12 20:35:02 +0200217
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200218And the :exc:`ConnectionError` itself has finer-grained subclasses:
Victor Stinnera1bf2982011-10-12 20:35:02 +0200219
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200220* :exc:`BrokenPipeError`
221* :exc:`ConnectionAbortedError`
222* :exc:`ConnectionRefusedError`
223* :exc:`ConnectionResetError`
Victor Stinnera1bf2982011-10-12 20:35:02 +0200224
225Thanks to the new exceptions, common usages of the :mod:`errno` can now be
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200226avoided. For example, the following code written for Python 3.2::
Victor Stinnera1bf2982011-10-12 20:35:02 +0200227
228 from errno import ENOENT, EACCES, EPERM
229
230 try:
231 with open("document.txt") as f:
232 content = f.read()
233 except IOError as err:
234 if err.errno == ENOENT:
235 print("document.txt file is missing")
236 elif err.errno in (EACCES, EPERM):
237 print("You are not allowed to read document.txt")
238 else:
239 raise
240
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200241can now be written without the :mod:`errno` import and without manual
242inspection of exception attributes::
Victor Stinnera1bf2982011-10-12 20:35:02 +0200243
244 try:
245 with open("document.txt") as f:
246 content = f.read()
247 except FileNotFoundError:
248 print("document.txt file is missing")
249 except PermissionError:
250 print("You are not allowed to read document.txt")
251
252
Nick Coghlan1f7ce622012-01-13 21:43:40 +1000253PEP 380: Syntax for Delegating to a Subgenerator
254================================================
255
Nick Coghlanab7bf212012-02-26 17:49:52 +1000256:pep:`380` - Syntax for Delegating to a Subgenerator
257 PEP written by Greg Ewing.
258
Nick Coghlan1f7ce622012-01-13 21:43:40 +1000259PEP 380 adds the ``yield from`` expression, allowing a generator to delegate
260part of its operations to another generator. This allows a section of code
261containing 'yield' to be factored out and placed in another generator.
262Additionally, the subgenerator is allowed to return with a value, and the
263value is made available to the delegating generator.
264While designed primarily for use in delegating to a subgenerator, the ``yield
265from`` expression actually allows delegation to arbitrary subiterators.
266
267(Implementation by Greg Ewing, integrated into 3.3 by Renaud Blanch, Ryan
268Kelly and Nick Coghlan, documentation by Zbigniew Jędrzejewski-Szmek and
269Nick Coghlan)
270
271
Nick Coghlanab7bf212012-02-26 17:49:52 +1000272PEP 409: Suppressing exception context
273======================================
274
275:pep:`409` - Suppressing exception context
276 PEP written by Ethan Furman, implemented by Ethan Furman and Nick Coghlan.
277
278PEP 409 introduces new syntax that allows the display of the chained
279exception context to be disabled. This allows cleaner error messages in
280applications that convert between exception types::
281
282 >>> class D:
283 ... def __init__(self, extra):
284 ... self._extra_attributes = extra
285 ... def __getattr__(self, attr):
286 ... try:
287 ... return self._extra_attributes[attr]
288 ... except KeyError:
289 ... raise AttributeError(attr) from None
290 ...
291 >>> D({}).x
292 Traceback (most recent call last):
293 File "<stdin>", line 1, in <module>
294 File "<stdin>", line 8, in __getattr__
295 AttributeError: x
296
297Without the ``from None`` suffix to suppress the cause, the original
298exception would be displayed by default::
299
300 >>> class C:
301 ... def __init__(self, extra):
302 ... self._extra_attributes = extra
303 ... def __getattr__(self, attr):
304 ... try:
305 ... return self._extra_attributes[attr]
306 ... except KeyError:
307 ... raise AttributeError(attr)
308 ...
309 >>> C({}).x
310 Traceback (most recent call last):
311 File "<stdin>", line 6, in __getattr__
312 KeyError: 'x'
313
314 During handling of the above exception, another exception occurred:
315
316 Traceback (most recent call last):
317 File "<stdin>", line 1, in <module>
318 File "<stdin>", line 8, in __getattr__
319 AttributeError: x
320
321No debugging capability is lost, as the original exception context remains
322available if needed (for example, if an intervening library has incorrectly
323suppressed valuable underlying details)::
324
325 >>> try:
326 ... D({}).x
327 ... except AttributeError as exc:
328 ... print(repr(exc.__context__))
329 ...
330 KeyError('x',)
331
332
Antoine Pitrou6bbd76b2011-11-25 19:10:05 +0100333PEP 3155: Qualified name for classes and functions
334==================================================
335
336:pep:`3155` - Qualified name for classes and functions
337 PEP written and implemented by Antoine Pitrou.
338
339Functions and class objects have a new ``__qualname__`` attribute representing
340the "path" from the module top-level to their definition. For global functions
341and classes, this is the same as ``__name__``. For other functions and classes,
342it provides better information about where they were actually defined, and
343how they might be accessible from the global scope.
344
345Example with (non-bound) methods::
Nick Coghlan2dfe6b02012-01-14 14:19:49 +1000346
Antoine Pitrou6bbd76b2011-11-25 19:10:05 +0100347 >>> class C:
348 ... def meth(self):
349 ... pass
350 >>> C.meth.__name__
351 'meth'
352 >>> C.meth.__qualname__
353 'C.meth'
354
355Example with nested classes::
356
357 >>> class C:
358 ... class D:
359 ... def meth(self):
360 ... pass
361 ...
362 >>> C.D.__name__
363 'D'
364 >>> C.D.__qualname__
365 'C.D'
366 >>> C.D.meth.__name__
367 'meth'
368 >>> C.D.meth.__qualname__
369 'C.D.meth'
370
371Example with nested functions::
372
373 >>> def outer():
374 ... def inner():
375 ... pass
376 ... return inner
377 ...
378 >>> outer().__name__
379 'inner'
380 >>> outer().__qualname__
381 'outer.<locals>.inner'
382
Antoine Pitroue7ede062011-11-25 19:11:26 +0100383The string representation of those objects is also changed to include the
Antoine Pitrou6bbd76b2011-11-25 19:10:05 +0100384new, more precise information::
385
386 >>> str(C.D)
387 "<class '__main__.C.D'>"
388 >>> str(C.D.meth)
389 '<function C.D.meth at 0x7f46b9fe31e0>'
390
391
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000392Other Language Changes
393======================
394
395Some smaller changes made to the core Python language are:
396
Antoine Pitrou7b578b32011-11-29 22:47:11 +0100397* Added support for Unicode name aliases and named sequences.
398 Both :func:`unicodedata.lookup()` and ``'\N{...}'`` now resolve name aliases,
399 and :func:`unicodedata.lookup()` resolves named sequences too.
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000400
Antoine Pitrou7b578b32011-11-29 22:47:11 +0100401 (Contributed by Ezio Melotti in :issue:`12753`)
Ezio Melotti931b8aa2011-10-21 21:57:36 +0300402
Antoine Pitrou7b578b32011-11-29 22:47:11 +0100403* Equality comparisons on :func:`range` objects now return a result reflecting
404 the equality of the underlying sequences generated by those range objects.
Ezio Melotti931b8aa2011-10-21 21:57:36 +0300405
Sandro Tosicd899122012-01-22 12:16:04 +0100406 (:issue:`13201`)
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000407
Antoine Pitrou7b578b32011-11-29 22:47:11 +0100408* The ``count()``, ``find()``, ``rfind()``, ``index()`` and ``rindex()``
409 methods of :class:`bytes` and :class:`bytearray` objects now accept an
410 integer between 0 and 255 as their first argument.
Mark Dickinson36645682011-10-23 19:53:01 +0100411
Antoine Pitrou7b578b32011-11-29 22:47:11 +0100412 (:issue:`12170`)
Mark Dickinson36645682011-10-23 19:53:01 +0100413
Antoine Pitrou7b578b32011-11-29 22:47:11 +0100414* Memoryview objects are now hashable when the underlying object is hashable.
Mark Dickinson36645682011-10-23 19:53:01 +0100415
Antoine Pitrou7b578b32011-11-29 22:47:11 +0100416 (Contributed by Antoine Pitrou in :issue:`13411`)
Petri Lehtinen61ea8a02011-11-24 22:00:46 +0200417
418
Victor Stinner46606ce2011-11-20 18:27:55 +0100419New and Improved Modules
420========================
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000421
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100422abc
423---
424
425Improved support for abstract base classes containing descriptors composed with
426abstract methods. The recommended approach to declaring abstract descriptors is
427now to provide :attr:`__isabstractmethod__` as a dynamically updated
428property. The built-in descriptors have been updated accordingly.
429
430 * :class:`abc.abstractproperty` has been deprecated, use :class:`property`
431 with :func:`abc.abstractmethod` instead.
432 * :class:`abc.abstractclassmethod` has been deprecated, use
433 :class:`classmethod` with :func:`abc.abstractmethod` instead.
434 * :class:`abc.abstractstaticmethod` has been deprecated, use
435 :class:`staticmethod` with :func:`abc.abstractmethod` instead.
436
437(Contributed by Darren Dale in :issue:`11610`)
438
Meador Ingec5dbb3d2011-09-20 21:48:16 -0500439array
440-----
441
442The :mod:`array` module supports the :c:type:`long long` type using ``q`` and
443``Q`` type codes.
444
445(Contributed by Oren Tirosh and Hirokazu Yamamoto in :issue:`1172711`)
446
447
Nadeem Vawdad7e5c6e2012-02-12 01:34:18 +0200448bz2
449---
450
451The :mod:`bz2` module has been rewritten from scratch. In the process, several
452new features have been added:
453
454* :class:`bz2.BZ2File` can now read from and write to arbitrary file-like
455 objects, by means of its constructor's *fileobj* argument.
456
457 (Contributed by Nadeem Vawda in :issue:`5863`)
458
459* :class:`bz2.BZ2File` and :func:`bz2.decompress` can now decompress
460 multi-stream inputs (such as those produced by the :program:`pbzip2` tool).
461 :class:`bz2.BZ2File` can now also be used to create this type of file, using
462 the ``'a'`` (append) mode.
463
464 (Contributed by Nir Aides in :issue:`1625`)
465
466* :class:`bz2.BZ2File` now implements all of the :class:`io.BufferedIOBase` API,
467 except for the :meth:`detach` and :meth:`truncate` methods.
468
469
Victor Stinner2cded9c2011-07-08 01:45:13 +0200470codecs
471------
472
Antoine Pitrou4f863432012-02-12 02:12:47 +0100473The :mod:`~encodings.mbcs` codec has been rewritten to handle correctly
Georg Brandlff962c52012-02-04 08:55:56 +0100474``replace`` and ``ignore`` error handlers on all Windows versions. The
475:mod:`~encodings.mbcs` codec now supports all error handlers, instead of only
476``replace`` to encode and ``ignore`` to decode.
Victor Stinner3a50e702011-10-18 21:21:00 +0200477
Georg Brandlff962c52012-02-04 08:55:56 +0100478A new Windows-only codec has been added: ``cp65001`` (:issue:`13216`). It is the
479Windows code page 65001 (Windows UTF-8, ``CP_UTF8``). For example, it is used
480by ``sys.stdout`` if the console output code page is set to cp65001 (e.g., using
481``chcp 65001`` command).
Victor Stinner2f3ca9f2011-10-27 01:38:56 +0200482
Georg Brandlff962c52012-02-04 08:55:56 +0100483Multibyte CJK decoders now resynchronize faster. They only ignore the first
Georg Brandl6c0929b2011-07-09 11:43:33 +0200484byte of an invalid byte sequence. For example, ``b'\xff\n'.decode('gb2312',
485'replace')`` now returns a ``\n`` after the replacement character.
Victor Stinner2cded9c2011-07-08 01:45:13 +0200486
Georg Brandl6c0929b2011-07-09 11:43:33 +0200487(:issue:`12016`)
Victor Stinner2cded9c2011-07-08 01:45:13 +0200488
Georg Brandlff962c52012-02-04 08:55:56 +0100489Incremental CJK codec encoders are no longer reset at each call to their
490encode() methods. For example::
Victor Stinner2cded9c2011-07-08 01:45:13 +0200491
492 $ ./python -q
493 >>> import codecs
494 >>> encoder = codecs.getincrementalencoder('hz')('strict')
495 >>> b''.join(encoder.encode(x) for x in '\u52ff\u65bd\u65bc\u4eba\u3002 Bye.')
496 b'~{NpJ)l6HK!#~} Bye.'
497
Georg Brandl6c0929b2011-07-09 11:43:33 +0200498This example gives ``b'~{Np~}~{J)~}~{l6~}~{HK~}~{!#~} Bye.'`` with older Python
Victor Stinner2cded9c2011-07-08 01:45:13 +0200499versions.
500
Georg Brandl6c0929b2011-07-09 11:43:33 +0200501(:issue:`12100`)
Victor Stinner2cded9c2011-07-08 01:45:13 +0200502
Victor Stinner9f4b1e92011-11-10 20:56:30 +0100503The ``unicode_internal`` codec has been deprecated.
504
Éric Araujo84b8ed82011-08-29 21:42:47 +0200505crypt
506-----
507
Victor Stinnerc78fb332011-09-21 03:35:44 +0200508Addition of salt and modular crypt format and the :func:`~crypt.mksalt`
509function to the :mod:`crypt` module.
Éric Araujo84b8ed82011-08-29 21:42:47 +0200510
511(:issue:`10924`)
512
Victor Stinnera7878b72011-07-14 23:07:44 +0200513curses
514------
515
Victor Stinner0fdfceb2011-11-25 22:10:02 +0100516 * If the :mod:`curses` module is linked to the ncursesw library, use Unicode
517 functions when Unicode strings or characters are passed (e.g.
518 :c:func:`waddwstr`), and bytes functions otherwise (e.g. :c:func:`waddstr`).
519 * Use the locale encoding instead of ``utf-8`` to encode Unicode strings.
520 * :class:`curses.window` has a new :attr:`curses.window.encoding` attribute.
Victor Stinnerc78fb332011-09-21 03:35:44 +0200521 * The :class:`curses.window` class has a new :meth:`~curses.window.get_wch`
522 method to get a wide character
523 * The :mod:`curses` module has a new :meth:`~curses.unget_wch` function to
524 push a wide character so the next :meth:`~curses.window.get_wch` will return
525 it
Victor Stinnera7878b72011-07-14 23:07:44 +0200526
Victor Stinnerc78fb332011-09-21 03:35:44 +0200527(Contributed by Iñigo Serna in :issue:`6755`)
Victor Stinnera7878b72011-07-14 23:07:44 +0200528
Victor Stinner024e37a2011-03-31 01:31:06 +0200529faulthandler
530------------
531
532New module: :mod:`faulthandler`.
533
534 * :envvar:`PYTHONFAULTHANDLER`
535 * :option:`-X` ``faulthandler``
536
Victor Stinner811db3b2011-09-21 03:20:03 +0200537ftplib
538------
539
540The :class:`~ftplib.FTP_TLS` class now provides a new
541:func:`~ftplib.FTP_TLS.ccc` function to revert control channel back to
Florent Xicluna6d57d212011-10-23 22:23:57 +0200542plaintext. This can be useful to take advantage of firewalls that know how to
Victor Stinner811db3b2011-09-21 03:20:03 +0200543handle NAT with non-secure FTP without opening fixed ports.
544
545(Contributed by Giampaolo Rodolà in :issue:`12139`)
546
547
Antoine Pitrou5a8bc6f2011-11-17 02:20:48 +0100548imaplib
549-------
550
551The :class:`~imaplib.IMAP4_SSL` constructor now accepts an SSLContext
552parameter to control parameters of the secure channel.
553
554(Contributed by Sijin Joseph in :issue:`8808`)
555
556
Charles-François Natalidc3044c2012-01-09 22:40:02 +0100557io
558--
559
Charles-François Natalid612de12012-01-14 11:51:00 +0100560The :func:`~io.open` function has a new ``'x'`` mode that can be used to
561exclusively create a new file, and raise a :exc:`FileExistsError` if the file
562already exists. It is based on the C11 'x' mode to fopen().
Charles-François Natalidc3044c2012-01-09 22:40:02 +0100563
564(Contributed by David Townshend in :issue:`12760`)
565
566
Nadeem Vawda34599222011-12-09 01:32:46 +0200567lzma
568----
569
570The newly-added :mod:`lzma` module provides data compression and decompression
571using the LZMA algorithm, including support for the ``.xz`` and ``.lzma``
572file formats.
573
574(Contributed by Nadeem Vawda and Per Øyvind Karlsen in :issue:`6715`)
575
576
Victor Stinnerfa0e3d52011-05-09 01:01:09 +0200577math
578----
579
580The :mod:`math` module has a new function:
581
582 * :func:`~math.log2`: return the base-2 logarithm of *x*
583 (Written by Mark Dickinson in :issue:`11888`).
584
585
586nntplib
587-------
588
589The :class:`nntplib.NNTP` class now supports the context manager protocol to
590unconditionally consume :exc:`socket.error` exceptions and to close the NNTP
591connection when done::
592
593 >>> from nntplib import NNTP
Ezio Melotti3c14b4e2011-07-13 11:44:44 +0300594 >>> with NNTP('news.gmane.org') as n:
Victor Stinnerfa0e3d52011-05-09 01:01:09 +0200595 ... n.group('gmane.comp.python.committers')
596 ...
Ezio Melotti04f648c2011-07-26 09:37:46 +0300597 ('211 1755 1 1755 gmane.comp.python.committers', 1755, 1, 1755, 'gmane.comp.python.committers')
Victor Stinnerfa0e3d52011-05-09 01:01:09 +0200598 >>>
599
600(Contributed by Giampaolo Rodolà in :issue:`9795`)
601
602
Giampaolo Rodolàc9c2c8b2011-02-25 14:39:16 +0000603os
604--
605
Charles-François Natalia003af12011-06-01 20:30:52 +0200606* The :mod:`os` module has a new :func:`~os.pipe2` function that makes it
607 possible to create a pipe with :data:`~os.O_CLOEXEC` or
608 :data:`~os.O_NONBLOCK` flags set atomically. This is especially useful to
609 avoid race conditions in multi-threaded programs.
610
Giampaolo Rodolà18e8bcb2011-02-25 20:57:54 +0000611* The :mod:`os` module has a new :func:`~os.sendfile` function which provides
612 an efficent "zero-copy" way for copying data from one file (or socket)
613 descriptor to another. The phrase "zero-copy" refers to the fact that all of
614 the copying of data between the two descriptors is done entirely by the
615 kernel, with no copying of data into userspace buffers. :func:`~os.sendfile`
616 can be used to efficiently copy data from a file on disk to a network socket,
617 e.g. for downloading a file.
Giampaolo Rodolàc9c2c8b2011-02-25 14:39:16 +0000618
Giampaolo Rodolà18e8bcb2011-02-25 20:57:54 +0000619 (Patch submitted by Ross Lagerwall and Giampaolo Rodolà in :issue:`10882`.)
620
621* The :mod:`os` module has two new functions: :func:`~os.getpriority` and
622 :func:`~os.setpriority`. They can be used to get or set process
623 niceness/priority in a fashion similar to :func:`os.nice` but extended to all
624 processes instead of just the current one.
625
626 (Patch submitted by Giampaolo Rodolà in :issue:`10784`.)
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000627
Charles-François Natali7372b062012-02-05 15:15:38 +0100628* The :mod:`os` module has a new :func:`~os.fwalk` function similar to
629 :func:`~os.walk` except that it also yields file descriptors referring to the
630 directories visited. This is especially useful to avoid symlink races.
631
Victor Stinnere5064372011-10-14 00:08:29 +0200632* "at" functions (:issue:`4761`):
633
634 * :func:`~os.faccessat`
635 * :func:`~os.fchmodat`
636 * :func:`~os.fchownat`
637 * :func:`~os.fstatat`
638 * :func:`~os.futimesat`
Victor Stinnere5064372011-10-14 00:08:29 +0200639 * :func:`~os.linkat`
640 * :func:`~os.mkdirat`
641 * :func:`~os.mkfifoat`
642 * :func:`~os.mknodat`
643 * :func:`~os.openat`
644 * :func:`~os.readlinkat`
645 * :func:`~os.renameat`
646 * :func:`~os.symlinkat`
647 * :func:`~os.unlinkat`
648 * :func:`~os.utimensat`
Victor Stinnere5064372011-10-14 00:08:29 +0200649
650* extended attributes (:issue:`12720`):
651
652 * :func:`~os.fgetxattr`
653 * :func:`~os.flistxattr`
654 * :func:`~os.fremovexattr`
655 * :func:`~os.fsetxattr`
656 * :func:`~os.getxattr`
657 * :func:`~os.lgetxattr`
658 * :func:`~os.listxattr`
659 * :func:`~os.llistxattr`
660 * :func:`~os.lremovexattr`
661 * :func:`~os.lsetxattr`
662 * :func:`~os.removexattr`
663 * :func:`~os.setxattr`
664
665* Scheduler functions (:issue:`12655`):
666
667 * :func:`~os.sched_get_priority_max`
668 * :func:`~os.sched_get_priority_min`
669 * :func:`~os.sched_getaffinity`
670 * :func:`~os.sched_getparam`
671 * :func:`~os.sched_getscheduler`
672 * :func:`~os.sched_rr_get_interval`
673 * :func:`~os.sched_setaffinity`
674 * :func:`~os.sched_setparam`
675 * :func:`~os.sched_setscheduler`
676 * :func:`~os.sched_yield`
677
678* Add some extra posix functions to the os module (:issue:`10812`):
679
680 * :func:`~os.fexecve`
681 * :func:`~os.futimens`
Victor Stinnere5064372011-10-14 00:08:29 +0200682 * :func:`~os.futimes`
683 * :func:`~os.lockf`
684 * :func:`~os.lutimes`
Victor Stinnere5064372011-10-14 00:08:29 +0200685 * :func:`~os.posix_fadvise`
686 * :func:`~os.posix_fallocate`
687 * :func:`~os.pread`
688 * :func:`~os.pwrite`
689 * :func:`~os.readv`
690 * :func:`~os.sync`
691 * :func:`~os.truncate`
692 * :func:`~os.waitid`
693 * :func:`~os.writev`
694
695* Other new functions:
696
Charles-François Natali77940902012-02-06 19:54:48 +0100697 * :func:`~os.flistdir` (:issue:`10755`)
Victor Stinnere5064372011-10-14 00:08:29 +0200698 * :func:`~os.getgrouplist` (:issue:`9344`)
699
Giampaolo Rodolà424298a2011-03-03 18:34:06 +0000700
Éric Araujo765e94f2011-06-03 17:26:59 +0200701packaging
702---------
703
704:mod:`distutils` has undergone additions and refactoring under a new name,
705:mod:`packaging`, to allow developers to break backward compatibility.
706:mod:`distutils` is still provided in the standard library, but users are
707encouraged to transition to :mod:`packaging`. For older versions of Python, a
708backport compatible with 2.4+ and 3.1+ will be made available on PyPI under the
709name :mod:`distutils2`.
710
711.. TODO add examples and howto to the packaging docs and link to them
712
713
Victor Stinner383c3fc2011-05-25 01:35:05 +0200714pydoc
715-----
716
Victor Stinner6daa33c2011-05-25 01:41:22 +0200717The Tk GUI and the :func:`~pydoc.serve` function have been removed from the
718:mod:`pydoc` module: ``pydoc -g`` and :func:`~pydoc.serve` have been deprecated
719in Python 3.2.
Victor Stinner383c3fc2011-05-25 01:35:05 +0200720
721
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100722sched
723-----
Victor Stinner754851f2011-04-19 23:58:51 +0200724
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100725* :meth:`~sched.scheduler.run` now accepts a *blocking* parameter which when
726 set to False makes the method execute the scheduled events due to expire
727 soonest (if any) and then return immediately.
728 This is useful in case you want to use the :class:`~sched.scheduler` in
729 non-blocking applications. (Contributed by Giampaolo Rodolà in :issue:`13449`)
Victor Stinner754851f2011-04-19 23:58:51 +0200730
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100731* :class:`~sched.scheduler` class can now be safely used in multi-threaded
732 environments. (Contributed by Josiah Carlson and Giampaolo Rodolà in
733 :issue:`8684`)
734
735* *timefunc* and *delayfunct* parameters of :class:`~sched.scheduler` class
736 constructor are now optional and defaults to :func:`time.time` and
737 :func:`time.sleep` respectively. (Contributed by Chris Clark in
738 :issue:`13245`)
739
740* :meth:`~sched.scheduler.enter` and :meth:`~sched.scheduler.enterabs`
741 *argument* parameter is now optional. (Contributed by Chris Clark in
742 :issue:`13245`)
743
744* :meth:`~sched.scheduler.enter` and :meth:`~sched.scheduler.enterabs`
745 now accept a *kwargs* parameter. (Contributed by Chris Clark in
746 :issue:`13245`)
747
748
749shutil
750------
751
752* The :mod:`shutil` module has these new fuctions:
753
754 * :func:`~shutil.disk_usage`: provides total, used and free disk space
755 statistics. (Contributed by Giampaolo Rodolà in :issue:`12442`)
756 * :func:`~shutil.chown`: allows one to change user and/or group of the given
757 path also specifying the user/group names and not only their numeric
758 ids. (Contributed by Sandro Tosi in :issue:`12191`)
Victor Stinnera9293352011-04-30 15:21:58 +0200759
Victor Stinnerfa0e3d52011-05-09 01:01:09 +0200760
Victor Stinnera9293352011-04-30 15:21:58 +0200761signal
762------
763
Victor Stinnerfa0e3d52011-05-09 01:01:09 +0200764* The :mod:`signal` module has new functions:
Victor Stinnera9293352011-04-30 15:21:58 +0200765
Victor Stinnerb3e72192011-05-08 01:46:11 +0200766 * :func:`~signal.pthread_sigmask`: fetch and/or change the signal mask of the
767 calling thread (Contributed by Jean-Paul Calderone in :issue:`8407`) ;
768 * :func:`~signal.pthread_kill`: send a signal to a thread ;
769 * :func:`~signal.sigpending`: examine pending functions ;
770 * :func:`~signal.sigwait`: wait a signal.
Ross Lagerwallbc808222011-06-25 12:13:40 +0200771 * :func:`~signal.sigwaitinfo`: wait for a signal, returning detailed
772 information about it.
773 * :func:`~signal.sigtimedwait`: like :func:`~signal.sigwaitinfo` but with a
774 timeout.
Victor Stinnera9293352011-04-30 15:21:58 +0200775
Victor Stinnerd49b1f12011-05-08 02:03:15 +0200776* The signal handler writes the signal number as a single byte instead of
777 a nul byte into the wakeup file descriptor. So it is possible to wait more
778 than one signal and know which signals were raised.
779
Victor Stinner388196e2011-05-10 17:13:00 +0200780* :func:`signal.signal` and :func:`signal.siginterrupt` raise an OSError,
781 instead of a RuntimeError: OSError has an errno attribute.
782
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100783smtplib
784-------
785
786The :class:`~smtplib.SMTP_SSL` constructor and the :meth:`~smtplib.SMTP.starttls`
787method now accept an SSLContext parameter to control parameters of the secure
788channel.
789
790(Contributed by Kasun Herath in :issue:`8809`)
791
792
Nick Coghlan96fe56a2011-08-22 11:55:57 +1000793socket
794------
795
Charles-François Natali47413c12011-10-06 19:47:44 +0200796* The :class:`~socket.socket` class now exposes additional methods to process
797 ancillary data when supported by the underlying platform:
Nick Coghlan96fe56a2011-08-22 11:55:57 +1000798
Charles-François Natali47413c12011-10-06 19:47:44 +0200799 * :func:`~socket.socket.sendmsg`
800 * :func:`~socket.socket.recvmsg`
801 * :func:`~socket.socket.recvmsg_into`
Nick Coghlan96fe56a2011-08-22 11:55:57 +1000802
Charles-François Natali47413c12011-10-06 19:47:44 +0200803 (Contributed by David Watson in :issue:`6560`, based on an earlier patch by
804 Heiko Wundram)
805
806* The :class:`~socket.socket` class now supports the PF_CAN protocol family
807 (http://en.wikipedia.org/wiki/Socketcan), on Linux
808 (http://lwn.net/Articles/253425).
809
810 (Contributed by Matthias Fuchs, updated by Tiago Gonçalves in :issue:`10141`)
811
Charles-François Natali10b8cf42011-11-10 19:21:37 +0100812* The :class:`~socket.socket` class now supports the PF_RDS protocol family
813 (http://en.wikipedia.org/wiki/Reliable_Datagram_Sockets and
814 http://oss.oracle.com/projects/rds/).
Victor Stinner754851f2011-04-19 23:58:51 +0200815
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100816
Victor Stinner99c8b162011-05-24 12:05:19 +0200817ssl
818---
819
Antoine Pitrou2c0a9672011-11-17 02:09:13 +0100820* The :mod:`ssl` module has two new random generation functions:
Victor Stinner99c8b162011-05-24 12:05:19 +0200821
822 * :func:`~ssl.RAND_bytes`: generate cryptographically strong
823 pseudo-random bytes.
824 * :func:`~ssl.RAND_pseudo_bytes`: generate pseudo-random bytes.
825
Antoine Pitrou2c0a9672011-11-17 02:09:13 +0100826 (Contributed by Victor Stinner in :issue:`12049`)
827
828* The :mod:`ssl` module now exposes a finer-grained exception hierarchy
829 in order to make it easier to inspect the various kinds of errors.
830
831 (Contributed by Antoine Pitrou in :issue:`11183`)
832
833* :meth:`~ssl.SSLContext.load_cert_chain` now accepts a *password* argument
834 to be used if the private key is encrypted.
835
836 (Contributed by Adam Simpkins in :issue:`12803`)
837
Antoine Pitrou73fc8142011-12-23 20:58:36 +0100838* Diffie-Hellman key exchange, both regular and Elliptic Curve-based, is
839 now supported through the :meth:`~ssl.SSLContext.load_dh_params` and
840 :meth:`~ssl.SSLContext.set_ecdh_curve` methods.
841
842 (Contributed by Antoine Pitrou in :issue:`13626` and :issue:`13627`)
843
Antoine Pitrou2c0a9672011-11-17 02:09:13 +0100844* SSL sockets have a new :meth:`~ssl.SSLSocket.get_channel_binding` method
845 allowing the implementation of certain authentication mechanisms such as
846 SCRAM-SHA-1-PLUS.
847
848 (Contributed by Jacek Konieczny in :issue:`12551`)
849
Antoine Pitrou73fc8142011-12-23 20:58:36 +0100850* You can query the SSL compression algorithm used by an SSL socket, thanks
851 to its new :meth:`~ssl.SSLSocket.compression` method.
852
853 (Contributed by Antoine Pitrou in :issue:`13634`)
854
855
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100856sys
857---
Giampaolo Rodola'210e7ca2011-07-01 13:55:36 +0200858
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100859* The :mod:`sys` module has a new :data:`~sys.thread_info` :term:`struct
860 sequence` holding informations about the thread implementation.
Giampaolo Rodola'210e7ca2011-07-01 13:55:36 +0200861
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100862 (:issue:`11223`)
Giampaolo Rodola'096dcb12011-06-27 11:17:51 +0200863
Antoine Pitrou5a8bc6f2011-11-17 02:20:48 +0100864
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100865time
866----
Antoine Pitrou5a8bc6f2011-11-17 02:20:48 +0100867
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100868The :mod:`time` module has new functions:
869
870* :func:`~time.clock_getres` and :func:`~time.clock_gettime` functions and
871 ``CLOCK_xxx`` constants.
872* :func:`~time.monotonic`: monotonic clock.
873* :func:`~time.wallclock`.
874
875(Contributed by Victor Stinner in :issue:`10278`)
876
Antoine Pitrou5a8bc6f2011-11-17 02:20:48 +0100877
Senthil Kumarande49d642011-10-16 23:54:44 +0800878urllib
879------
880
881The :class:`~urllib.request.Request` class, now accepts a *method* argument
882used by :meth:`~urllib.request.Request.get_method` to determine what HTTP method
Senthil Kumarana41c9422011-10-20 02:37:08 +0800883should be used. For example, this will send a ``'HEAD'`` request::
Senthil Kumarande49d642011-10-16 23:54:44 +0800884
885 >>> urlopen(Request('http://www.python.org', method='HEAD'))
886
887(:issue:`1673007`)
Giampaolo Rodola'096dcb12011-06-27 11:17:51 +0200888
Giampaolo Rodola'be55d992011-11-22 13:33:34 +0100889
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000890Optimizations
891=============
892
893Major performance enhancements have been added:
894
Victor Stinner46606ce2011-11-20 18:27:55 +0100895* Thanks to the :pep:`393`, some operations on Unicode strings has been optimized:
896
897 * the memory footprint is divided by 2 to 4 depending on the text
Victor Stinnera996f1e2011-11-21 13:14:43 +0100898 * encode an ASCII string to UTF-8 doesn't need to encode characters anymore,
899 the UTF-8 representation is shared with the ASCII representation
Victor Stinner6099a032011-12-18 14:22:26 +0100900 * the UTF-8 encoder has been optimized
901 * repeating a single ASCII letter and getting a substring of a ASCII strings
902 is 4 times faster
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000903
904
905Build and C API Changes
906=======================
907
908Changes to Python's build process and to the C API include:
909
Stefan Krah95b1ba62012-02-29 17:27:21 +0100910* New :pep:`3118` related function:
911
912 * :c:func:`PyMemoryView_FromMemory`
913
Victor Stinner46606ce2011-11-20 18:27:55 +0100914* The :pep:`393` added new Unicode types, macros and functions:
915
Victor Stinnera996f1e2011-11-21 13:14:43 +0100916 * High-level API:
917
918 * :c:func:`PyUnicode_CopyCharacters`
919 * :c:func:`PyUnicode_FindChar`
920 * :c:func:`PyUnicode_GetLength`, :c:macro:`PyUnicode_GET_LENGTH`
921 * :c:func:`PyUnicode_New`
922 * :c:func:`PyUnicode_Substring`
923 * :c:func:`PyUnicode_ReadChar`, :c:func:`PyUnicode_WriteChar`
924
925 * Low-level API:
926
927 * :c:type:`Py_UCS1`, :c:type:`Py_UCS2`, :c:type:`Py_UCS4` types
928 * :c:type:`PyASCIIObject` and :c:type:`PyCompactUnicodeObject` structures
929 * :c:macro:`PyUnicode_READY`
930 * :c:func:`PyUnicode_FromKindAndData`
931 * :c:func:`PyUnicode_AsUCS4`, :c:func:`PyUnicode_AsUCS4Copy`
932 * :c:macro:`PyUnicode_DATA`, :c:macro:`PyUnicode_1BYTE_DATA`,
933 :c:macro:`PyUnicode_2BYTE_DATA`, :c:macro:`PyUnicode_4BYTE_DATA`
934 * :c:macro:`PyUnicode_KIND` with :c:type:`PyUnicode_Kind` enum:
935 :c:data:`PyUnicode_WCHAR_KIND`, :c:data:`PyUnicode_1BYTE_KIND`,
936 :c:data:`PyUnicode_2BYTE_KIND`, :c:data:`PyUnicode_4BYTE_KIND`
937 * :c:macro:`PyUnicode_READ`, :c:macro:`PyUnicode_READ_CHAR`, :c:macro:`PyUnicode_WRITE`
938 * :c:macro:`PyUnicode_MAX_CHAR_VALUE`
939
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000940
941
Victor Stinnerd1be8782011-12-09 00:10:41 +0100942Deprecated
943==========
944
Georg Brandl0cd25c92011-04-29 13:45:54 +0200945Unsupported Operating Systems
Victor Stinnerd1be8782011-12-09 00:10:41 +0100946-----------------------------
Victor Stinnerb90db4c2011-04-26 22:48:24 +0200947
Brian Curtin49a40cd2011-05-02 22:30:06 -0500948OS/2 and VMS are no longer supported due to the lack of a maintainer.
949
950Windows 2000 and Windows platforms which set ``COMSPEC`` to ``command.com``
951are no longer supported due to maintenance burden.
Victor Stinnerb90db4c2011-04-26 22:48:24 +0200952
953
Victor Stinner46606ce2011-11-20 18:27:55 +0100954Deprecated Python modules, functions and methods
Victor Stinnerd1be8782011-12-09 00:10:41 +0100955------------------------------------------------
Victor Stinner19bd0692011-11-16 00:18:57 +0100956
957* The :mod:`packaging` module replaces the :mod:`distutils` module
958* The ``unicode_internal`` codec has been deprecated because of the
Sandro Tosicd899122012-01-22 12:16:04 +0100959 :pep:`393`, use UTF-8, UTF-16 (``utf-16-le`` or ``utf-16-be``), or UTF-32
960 (``utf-32-le`` or ``utf-32-be``)
Victor Stinner19bd0692011-11-16 00:18:57 +0100961* :meth:`ftplib.FTP.nlst` and :meth:`ftplib.FTP.dir`: use
Victor Stinner46606ce2011-11-20 18:27:55 +0100962 :meth:`ftplib.FTP.mlsd`
Victor Stinner19bd0692011-11-16 00:18:57 +0100963* :func:`platform.popen`: use the :mod:`subprocess` module. Check especially
964 the :ref:`subprocess-replacements` section.
965* :issue:`13374`: The Windows bytes API has been deprecated in the :mod:`os`
Victor Stinner46606ce2011-11-20 18:27:55 +0100966 module. Use Unicode filenames, instead of bytes filenames, to not depend on
Victor Stinner19bd0692011-11-16 00:18:57 +0100967 the ANSI code page anymore and to support any filename.
Florent Xiclunaa72a98f2012-02-13 11:03:30 +0100968* :issue:`13988`: The :mod:`xml.etree.cElementTree` module is deprecated. The
969 accelerator is used automatically whenever available.
Victor Stinner19bd0692011-11-16 00:18:57 +0100970
971
Victor Stinner46606ce2011-11-20 18:27:55 +0100972Deprecated functions and types of the C API
Victor Stinnerd1be8782011-12-09 00:10:41 +0100973-------------------------------------------
Victor Stinner46606ce2011-11-20 18:27:55 +0100974
975The :c:type:`Py_UNICODE` has been deprecated by the :pep:`393` and will be
976removed in Python 4. All functions using this type are deprecated:
977
Victor Stinner46606ce2011-11-20 18:27:55 +0100978Unicode functions and methods using :c:type:`Py_UNICODE` and
979:c:type:`Py_UNICODE*` types:
980
981 * :c:macro:`PyUnicode_FromUnicode`: use :c:func:`PyUnicode_FromWideChar` or
982 :c:func:`PyUnicode_FromKindAndData`
983 * :c:macro:`PyUnicode_AS_UNICODE`, :c:func:`PyUnicode_AsUnicode`,
984 :c:func:`PyUnicode_AsUnicodeAndSize`: use :c:func:`PyUnicode_AsWideCharString`
985 * :c:macro:`PyUnicode_AS_DATA`: use :c:macro:`PyUnicode_DATA` with
986 :c:macro:`PyUnicode_READ` and :c:macro:`PyUnicode_WRITE`
987 * :c:macro:`PyUnicode_GET_SIZE`, :c:func:`PyUnicode_GetSize`: use
988 :c:macro:`PyUnicode_GET_LENGTH` or :c:func:`PyUnicode_GetLength`
989 * :c:macro:`PyUnicode_GET_DATA_SIZE`: use
990 ``PyUnicode_GET_LENGTH(str) * PyUnicode_KIND(str)`` (only work on ready
991 strings)
Victor Stinnerbf6e5602011-12-12 01:53:47 +0100992 * :c:func:`PyUnicode_AsUnicodeCopy`: use :c:func:`PyUnicode_AsUCS4Copy` or
993 :c:func:`PyUnicode_AsWideCharString`
Victor Stinnerab595942011-12-17 04:59:06 +0100994 * :c:func:`PyUnicode_GetMax`
995
Victor Stinner46606ce2011-11-20 18:27:55 +0100996
Victor Stinnera996f1e2011-11-21 13:14:43 +0100997Functions and macros manipulating Py_UNICODE* strings:
998
999 * :c:macro:`Py_UNICODE_strlen`: use :c:func:`PyUnicode_GetLength` or
1000 :c:macro:`PyUnicode_GET_LENGTH`
1001 * :c:macro:`Py_UNICODE_strcat`: use :c:func:`PyUnicode_CopyCharacters` or
1002 :c:func:`PyUnicode_FromFormat`
1003 * :c:macro:`Py_UNICODE_strcpy`, :c:macro:`Py_UNICODE_strncpy`,
1004 :c:macro:`Py_UNICODE_COPY`: use :c:func:`PyUnicode_CopyCharacters` or
1005 :c:func:`PyUnicode_Substring`
1006 * :c:macro:`Py_UNICODE_strcmp`: use :c:func:`PyUnicode_Compare`
1007 * :c:macro:`Py_UNICODE_strncmp`: use :c:func:`PyUnicode_Tailmatch`
1008 * :c:macro:`Py_UNICODE_strchr`, :c:macro:`Py_UNICODE_strrchr`: use
1009 :c:func:`PyUnicode_FindChar`
Victor Stinner606e19d2012-01-04 03:59:16 +01001010 * :c:macro:`Py_UNICODE_FILL`: use :c:func:`PyUnicode_Fill`
Victor Stinnerab595942011-12-17 04:59:06 +01001011 * :c:macro:`Py_UNICODE_MATCH`
Victor Stinnera996f1e2011-11-21 13:14:43 +01001012
Victor Stinner46606ce2011-11-20 18:27:55 +01001013Encoders:
1014
1015 * :c:func:`PyUnicode_Encode`: use :c:func:`PyUnicode_AsEncodedObject`
1016 * :c:func:`PyUnicode_EncodeUTF7`
Victor Stinnera996f1e2011-11-21 13:14:43 +01001017 * :c:func:`PyUnicode_EncodeUTF8`: use :c:func:`PyUnicode_AsUTF8` or
1018 :c:func:`PyUnicode_AsUTF8String`
Victor Stinner46606ce2011-11-20 18:27:55 +01001019 * :c:func:`PyUnicode_EncodeUTF32`
1020 * :c:func:`PyUnicode_EncodeUTF16`
1021 * :c:func:`PyUnicode_EncodeUnicodeEscape:` use
1022 :c:func:`PyUnicode_AsUnicodeEscapeString`
1023 * :c:func:`PyUnicode_EncodeRawUnicodeEscape:` use
1024 :c:func:`PyUnicode_AsRawUnicodeEscapeString`
1025 * :c:func:`PyUnicode_EncodeLatin1`: use :c:func:`PyUnicode_AsLatin1String`
1026 * :c:func:`PyUnicode_EncodeASCII`: use :c:func:`PyUnicode_AsASCIIString`
1027 * :c:func:`PyUnicode_EncodeCharmap`
1028 * :c:func:`PyUnicode_TranslateCharmap`
1029 * :c:func:`PyUnicode_EncodeMBCS`: use :c:func:`PyUnicode_AsMBCSString` or
1030 :c:func:`PyUnicode_EncodeCodePage` (with ``CP_ACP`` code_page)
1031 * :c:func:`PyUnicode_EncodeDecimal`,
1032 :c:func:`PyUnicode_TransformDecimalToASCII`
1033
1034
Giampaolo Rodolà3108f982011-02-24 20:59:48 +00001035Porting to Python 3.3
1036=====================
1037
1038This section lists previously described changes and other bugfixes
Antoine Pitrou037ffbf2011-10-24 00:25:41 +02001039that may require changes to your code.
1040
1041Porting Python code
1042-------------------
Giampaolo Rodolà3108f982011-02-24 20:59:48 +00001043
Victor Stinner19bd0692011-11-16 00:18:57 +01001044* :issue:`12326`: On Linux, sys.platform doesn't contain the major version
Victor Stinnerff3d9392011-08-20 23:39:26 +02001045 anymore. It is now always 'linux', instead of 'linux2' or 'linux3' depending
1046 on the Linux version used to build Python. Replace sys.platform == 'linux2'
1047 with sys.platform.startswith('linux'), or directly sys.platform == 'linux' if
1048 you don't need to support older Python versions.
Éric Araujoc09fca62011-03-23 02:06:24 +01001049
Antoine Pitrou037ffbf2011-10-24 00:25:41 +02001050Porting C code
1051--------------
1052
Stefan Krah54c32032012-02-29 17:47:21 +01001053* In the course of changes to the buffer API the undocumented
1054 :c:member:`~Py_buffer.smalltable` member of the
1055 :c:type:`Py_buffer` structure has been removed and the
1056 layout of the :c:type:`PyMemoryViewObject` has changed.
1057
1058 All extensions relying on the relevant parts in ``memoryobject.h``
1059 or ``object.h`` must be rebuilt.
1060
Antoine Pitrou037ffbf2011-10-24 00:25:41 +02001061* Due to :ref:`PEP 393 <pep-393>`, the :c:type:`Py_UNICODE` type and all
1062 functions using this type are deprecated (but will stay available for
1063 at least five years). If you were using low-level Unicode APIs to
1064 construct and access unicode objects and you want to benefit of the
1065 memory footprint reduction provided by the PEP 393, you have to convert
1066 your code to the new :doc:`Unicode API <../c-api/unicode>`.
1067
1068 However, if you only have been using high-level functions such as
1069 :c:func:`PyUnicode_Concat()`, :c:func:`PyUnicode_Join` or
1070 :c:func:`PyUnicode_FromFormat()`, your code will automatically take
1071 advantage of the new unicode representations.
1072
Antoine Pitrouc229e6e2012-02-20 19:41:11 +01001073Building C extensions
1074---------------------
1075
1076* The range of possible file names for C extensions has been narrowed.
1077 Very rarely used spellings have been suppressed: under POSIX, files
1078 named ``xxxmodule.so``, ``xxxmodule.abi3.so`` and
1079 ``xxxmodule.cpython-*.so`` are no longer recognized as implementing
1080 the ``xxx`` module. If you had been generating such files, you have
1081 to switch to the other spellings (i.e., remove the ``module`` string
1082 from the file names).
1083
1084 (implemented in :issue:`14040`.)
1085
1086
Antoine Pitrou037ffbf2011-10-24 00:25:41 +02001087Other issues
1088------------
1089
Éric Araujoc09fca62011-03-23 02:06:24 +01001090.. Issue #11591: When :program:`python` was started with :option:`-S`,
1091 ``import site`` will not add site-specific paths to the module search
1092 paths. In previous versions, it did. See changeset for doc changes in
1093 various files. Contributed by Carl Meyer with editions by Éric Araujo.
Éric Araujobe3bd572011-03-26 01:55:15 +01001094
Éric Araujobfc97292011-11-14 18:18:15 +01001095.. Issue #10998: the -Q command-line flag and related artifacts have been
Éric Araujobe3bd572011-03-26 01:55:15 +01001096 removed. Code checking sys.flags.division_warning will need updating.
1097 Contributed by Éric Araujo.