blob: f1f79d67823668b0052c66aa4180b0cc88452aa5 [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
105
Antoine Pitrou037ffbf2011-10-24 00:25:41 +0200106.. _pep-393:
107
Ezio Melotti48a2f8f2011-09-29 00:18:19 +0300108PEP 393: Flexible String Representation
109=======================================
110
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200111The Unicode string type is changed to support multiple internal
112representations, depending on the character with the largest Unicode ordinal
113(1, 2, or 4 bytes) in the represented string. This allows a space-efficient
114representation in common cases, but gives access to full UCS-4 on all
115systems. For compatibility with existing APIs, several representations may
116exist in parallel; over time, this compatibility should be phased out.
Ezio Melotti397546a2011-09-29 08:34:36 +0300117
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200118On the Python side, there should be no downside to this change.
Ezio Melotti397546a2011-09-29 08:34:36 +0300119
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200120On the C API side, PEP 393 is fully backward compatible. The legacy API
121should remain available at least five years. Applications using the legacy
122API will not fully benefit of the memory reduction, or - worse - may use
123a bit more memory, because Python may have to maintain two versions of each
124string (in the legacy format and in the new efficient storage).
125
Antoine Pitrou0599b5b2011-11-29 22:45:07 +0100126Functionality
127-------------
128
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200129Changes introduced by :pep:`393` are the following:
Ezio Melotti48a2f8f2011-09-29 00:18:19 +0300130
Ezio Melotti397546a2011-09-29 08:34:36 +0300131* Python now always supports the full range of Unicode codepoints, including
132 non-BMP ones (i.e. from ``U+0000`` to ``U+10FFFF``). The distinction between
133 narrow and wide builds no longer exists and Python now behaves like a wide
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200134 build, even under Windows.
Ezio Melotti397546a2011-09-29 08:34:36 +0300135
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200136* With the death of narrow builds, the problems specific to narrow builds have
137 also been fixed, for example:
Ezio Melotti397546a2011-09-29 08:34:36 +0300138
139 * :func:`len` now always returns 1 for non-BMP characters,
140 so ``len('\U0010FFFF') == 1``;
141
142 * surrogate pairs are not recombined in string literals,
143 so ``'\uDBFF\uDFFF' != '\U0010FFFF'``;
144
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200145 * indexing or slicing non-BMP characters returns the expected value,
Ezio Melotti397546a2011-09-29 08:34:36 +0300146 so ``'\U0010FFFF'[0]`` now returns ``'\U0010FFFF'`` and not ``'\uDBFF'``;
147
Antoine Pitroud136aec2011-11-17 01:48:06 +0100148 * all other functions in the standard library now correctly handle
Antoine Pitroufd9b4162011-10-24 00:14:43 +0200149 non-BMP codepoints.
Ezio Melotti397546a2011-09-29 08:34:36 +0300150
Ezio Melotti48a2f8f2011-09-29 00:18:19 +0300151* The value of :data:`sys.maxunicode` is now always ``1114111`` (``0x10FFFF``
152 in hexadecimal). The :c:func:`PyUnicode_GetMax` function still returns
153 either ``0xFFFF`` or ``0x10FFFF`` for backward compatibility, and it should
154 not be used with the new Unicode API (see :issue:`13054`).
155
Ezio Melotti397546a2011-09-29 08:34:36 +0300156* The :file:`./configure` flag ``--with-wide-unicode`` has been removed.
Victor Stinner7d637ab2011-09-29 02:56:16 +0200157
Antoine Pitrou0599b5b2011-11-29 22:45:07 +0100158Performance and resource usage
159------------------------------
160
161The storage of Unicode strings now depends on the highest codepoint in the string:
162
163* pure ASCII and Latin1 strings (``U+0000-U+00FF``) use 1 byte per codepoint;
164
165* BMP strings (``U+0000-U+FFFF``) use 2 bytes per codepoint;
166
167* non-BMP strings (``U+10000-U+10FFFF``) use 4 bytes per codepoint.
168
169The net effect is that for most applications, memory usage of string storage
170should decrease significantly - especially compared to former wide unicode
171builds - as, in many cases, strings will be pure ASCII even in international
172contexts (because many strings store non-human language data, such as XML
173fragments, HTTP headers, JSON-encoded data, etc.). We also hope that it
174will, for the same reasons, increase CPU cache efficiency on non-trivial
175applications.
176
177.. The memory usage of Python 3.3 is two to three times smaller than Python 3.2,
178 and a little bit better than Python 2.7, on a `Django benchmark
179 <http://mail.python.org/pipermail/python-dev/2011-September/113714.html>`_.
180 XXX The result should be moved in the PEP and a link to the PEP should
181 be added here.
182
Éric Araujob07b97f2011-10-05 01:03:34 +0200183
Victor Stinnera1bf2982011-10-12 20:35:02 +0200184PEP 3151: Reworking the OS and IO exception hierarchy
185=====================================================
186
187:pep:`3151` - Reworking the OS and IO exception hierarchy
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200188 PEP written and implemented by Antoine Pitrou.
Victor Stinnera1bf2982011-10-12 20:35:02 +0200189
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200190The hierarchy of exceptions raised by operating system errors is now both
191simplified and finer-grained.
Victor Stinnera1bf2982011-10-12 20:35:02 +0200192
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200193You don't have to worry anymore about choosing the appropriate exception
194type between :exc:`OSError`, :exc:`IOError`, :exc:`EnvironmentError`,
195:exc:`WindowsError`, :exc:`mmap.error`, :exc:`socket.error` or
196:exc:`select.error`. All these exception types are now only one:
197:exc:`OSError`. The other names are kept as aliases for compatibility
198reasons.
Victor Stinnera1bf2982011-10-12 20:35:02 +0200199
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200200Also, it is now easier to catch a specific error condition. Instead of
201inspecting the ``errno`` attribute (or ``args[0]``) for a particular
202constant from the :mod:`errno` module, you can catch the adequate
203:exc:`OSError` subclass. The available subclasses are the following:
Victor Stinnera1bf2982011-10-12 20:35:02 +0200204
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200205* :exc:`BlockingIOError`
206* :exc:`ChildProcessError`
207* :exc:`ConnectionError`
208* :exc:`FileExistsError`
209* :exc:`FileNotFoundError`
210* :exc:`InterruptedError`
211* :exc:`IsADirectoryError`
212* :exc:`NotADirectoryError`
213* :exc:`PermissionError`
214* :exc:`ProcessLookupError`
215* :exc:`TimeoutError`
Victor Stinnera1bf2982011-10-12 20:35:02 +0200216
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200217And the :exc:`ConnectionError` itself has finer-grained subclasses:
Victor Stinnera1bf2982011-10-12 20:35:02 +0200218
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200219* :exc:`BrokenPipeError`
220* :exc:`ConnectionAbortedError`
221* :exc:`ConnectionRefusedError`
222* :exc:`ConnectionResetError`
Victor Stinnera1bf2982011-10-12 20:35:02 +0200223
224Thanks to the new exceptions, common usages of the :mod:`errno` can now be
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200225avoided. For example, the following code written for Python 3.2::
Victor Stinnera1bf2982011-10-12 20:35:02 +0200226
227 from errno import ENOENT, EACCES, EPERM
228
229 try:
230 with open("document.txt") as f:
231 content = f.read()
232 except IOError as err:
233 if err.errno == ENOENT:
234 print("document.txt file is missing")
235 elif err.errno in (EACCES, EPERM):
236 print("You are not allowed to read document.txt")
237 else:
238 raise
239
Antoine Pitrou01fd26c2011-10-24 00:07:02 +0200240can now be written without the :mod:`errno` import and without manual
241inspection of exception attributes::
Victor Stinnera1bf2982011-10-12 20:35:02 +0200242
243 try:
244 with open("document.txt") as f:
245 content = f.read()
246 except FileNotFoundError:
247 print("document.txt file is missing")
248 except PermissionError:
249 print("You are not allowed to read document.txt")
250
251
Nick Coghlan1f7ce622012-01-13 21:43:40 +1000252PEP 380: Syntax for Delegating to a Subgenerator
253================================================
254
Nick Coghlanab7bf212012-02-26 17:49:52 +1000255:pep:`380` - Syntax for Delegating to a Subgenerator
256 PEP written by Greg Ewing.
257
Nick Coghlan1f7ce622012-01-13 21:43:40 +1000258PEP 380 adds the ``yield from`` expression, allowing a generator to delegate
259part of its operations to another generator. This allows a section of code
260containing 'yield' to be factored out and placed in another generator.
261Additionally, the subgenerator is allowed to return with a value, and the
262value is made available to the delegating generator.
263While designed primarily for use in delegating to a subgenerator, the ``yield
264from`` expression actually allows delegation to arbitrary subiterators.
265
266(Implementation by Greg Ewing, integrated into 3.3 by Renaud Blanch, Ryan
267Kelly and Nick Coghlan, documentation by Zbigniew Jędrzejewski-Szmek and
268Nick Coghlan)
269
270
Nick Coghlanab7bf212012-02-26 17:49:52 +1000271PEP 409: Suppressing exception context
272======================================
273
274:pep:`409` - Suppressing exception context
275 PEP written by Ethan Furman, implemented by Ethan Furman and Nick Coghlan.
276
277PEP 409 introduces new syntax that allows the display of the chained
278exception context to be disabled. This allows cleaner error messages in
279applications that convert between exception types::
280
281 >>> class D:
282 ... def __init__(self, extra):
283 ... self._extra_attributes = extra
284 ... def __getattr__(self, attr):
285 ... try:
286 ... return self._extra_attributes[attr]
287 ... except KeyError:
288 ... raise AttributeError(attr) from None
289 ...
290 >>> D({}).x
291 Traceback (most recent call last):
292 File "<stdin>", line 1, in <module>
293 File "<stdin>", line 8, in __getattr__
294 AttributeError: x
295
296Without the ``from None`` suffix to suppress the cause, the original
297exception would be displayed by default::
298
299 >>> class C:
300 ... def __init__(self, extra):
301 ... self._extra_attributes = extra
302 ... def __getattr__(self, attr):
303 ... try:
304 ... return self._extra_attributes[attr]
305 ... except KeyError:
306 ... raise AttributeError(attr)
307 ...
308 >>> C({}).x
309 Traceback (most recent call last):
310 File "<stdin>", line 6, in __getattr__
311 KeyError: 'x'
312
313 During handling of the above exception, another exception occurred:
314
315 Traceback (most recent call last):
316 File "<stdin>", line 1, in <module>
317 File "<stdin>", line 8, in __getattr__
318 AttributeError: x
319
320No debugging capability is lost, as the original exception context remains
321available if needed (for example, if an intervening library has incorrectly
322suppressed valuable underlying details)::
323
324 >>> try:
325 ... D({}).x
326 ... except AttributeError as exc:
327 ... print(repr(exc.__context__))
328 ...
329 KeyError('x',)
330
331
Antoine Pitrou6bbd76b2011-11-25 19:10:05 +0100332PEP 3155: Qualified name for classes and functions
333==================================================
334
335:pep:`3155` - Qualified name for classes and functions
336 PEP written and implemented by Antoine Pitrou.
337
338Functions and class objects have a new ``__qualname__`` attribute representing
339the "path" from the module top-level to their definition. For global functions
340and classes, this is the same as ``__name__``. For other functions and classes,
341it provides better information about where they were actually defined, and
342how they might be accessible from the global scope.
343
344Example with (non-bound) methods::
Nick Coghlan2dfe6b02012-01-14 14:19:49 +1000345
Antoine Pitrou6bbd76b2011-11-25 19:10:05 +0100346 >>> class C:
347 ... def meth(self):
348 ... pass
349 >>> C.meth.__name__
350 'meth'
351 >>> C.meth.__qualname__
352 'C.meth'
353
354Example with nested classes::
355
356 >>> class C:
357 ... class D:
358 ... def meth(self):
359 ... pass
360 ...
361 >>> C.D.__name__
362 'D'
363 >>> C.D.__qualname__
364 'C.D'
365 >>> C.D.meth.__name__
366 'meth'
367 >>> C.D.meth.__qualname__
368 'C.D.meth'
369
370Example with nested functions::
371
372 >>> def outer():
373 ... def inner():
374 ... pass
375 ... return inner
376 ...
377 >>> outer().__name__
378 'inner'
379 >>> outer().__qualname__
380 'outer.<locals>.inner'
381
Antoine Pitroue7ede062011-11-25 19:11:26 +0100382The string representation of those objects is also changed to include the
Antoine Pitrou6bbd76b2011-11-25 19:10:05 +0100383new, more precise information::
384
385 >>> str(C.D)
386 "<class '__main__.C.D'>"
387 >>> str(C.D.meth)
388 '<function C.D.meth at 0x7f46b9fe31e0>'
389
390
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000391Other Language Changes
392======================
393
394Some smaller changes made to the core Python language are:
395
Antoine Pitrou7b578b32011-11-29 22:47:11 +0100396* Added support for Unicode name aliases and named sequences.
397 Both :func:`unicodedata.lookup()` and ``'\N{...}'`` now resolve name aliases,
398 and :func:`unicodedata.lookup()` resolves named sequences too.
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000399
Antoine Pitrou7b578b32011-11-29 22:47:11 +0100400 (Contributed by Ezio Melotti in :issue:`12753`)
Ezio Melotti931b8aa2011-10-21 21:57:36 +0300401
Antoine Pitrou7b578b32011-11-29 22:47:11 +0100402* Equality comparisons on :func:`range` objects now return a result reflecting
403 the equality of the underlying sequences generated by those range objects.
Ezio Melotti931b8aa2011-10-21 21:57:36 +0300404
Sandro Tosicd899122012-01-22 12:16:04 +0100405 (:issue:`13201`)
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000406
Antoine Pitrou7b578b32011-11-29 22:47:11 +0100407* The ``count()``, ``find()``, ``rfind()``, ``index()`` and ``rindex()``
408 methods of :class:`bytes` and :class:`bytearray` objects now accept an
409 integer between 0 and 255 as their first argument.
Mark Dickinson36645682011-10-23 19:53:01 +0100410
Antoine Pitrou7b578b32011-11-29 22:47:11 +0100411 (:issue:`12170`)
Mark Dickinson36645682011-10-23 19:53:01 +0100412
Antoine Pitrou7b578b32011-11-29 22:47:11 +0100413* Memoryview objects are now hashable when the underlying object is hashable.
Mark Dickinson36645682011-10-23 19:53:01 +0100414
Antoine Pitrou7b578b32011-11-29 22:47:11 +0100415 (Contributed by Antoine Pitrou in :issue:`13411`)
Petri Lehtinen61ea8a02011-11-24 22:00:46 +0200416
417
Victor Stinner46606ce2011-11-20 18:27:55 +0100418New and Improved Modules
419========================
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000420
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100421abc
422---
423
424Improved support for abstract base classes containing descriptors composed with
425abstract methods. The recommended approach to declaring abstract descriptors is
426now to provide :attr:`__isabstractmethod__` as a dynamically updated
427property. The built-in descriptors have been updated accordingly.
428
429 * :class:`abc.abstractproperty` has been deprecated, use :class:`property`
430 with :func:`abc.abstractmethod` instead.
431 * :class:`abc.abstractclassmethod` has been deprecated, use
432 :class:`classmethod` with :func:`abc.abstractmethod` instead.
433 * :class:`abc.abstractstaticmethod` has been deprecated, use
434 :class:`staticmethod` with :func:`abc.abstractmethod` instead.
435
436(Contributed by Darren Dale in :issue:`11610`)
437
Meador Ingec5dbb3d2011-09-20 21:48:16 -0500438array
439-----
440
441The :mod:`array` module supports the :c:type:`long long` type using ``q`` and
442``Q`` type codes.
443
444(Contributed by Oren Tirosh and Hirokazu Yamamoto in :issue:`1172711`)
445
446
Nadeem Vawdad7e5c6e2012-02-12 01:34:18 +0200447bz2
448---
449
450The :mod:`bz2` module has been rewritten from scratch. In the process, several
451new features have been added:
452
453* :class:`bz2.BZ2File` can now read from and write to arbitrary file-like
454 objects, by means of its constructor's *fileobj* argument.
455
456 (Contributed by Nadeem Vawda in :issue:`5863`)
457
458* :class:`bz2.BZ2File` and :func:`bz2.decompress` can now decompress
459 multi-stream inputs (such as those produced by the :program:`pbzip2` tool).
460 :class:`bz2.BZ2File` can now also be used to create this type of file, using
461 the ``'a'`` (append) mode.
462
463 (Contributed by Nir Aides in :issue:`1625`)
464
465* :class:`bz2.BZ2File` now implements all of the :class:`io.BufferedIOBase` API,
466 except for the :meth:`detach` and :meth:`truncate` methods.
467
468
Victor Stinner2cded9c2011-07-08 01:45:13 +0200469codecs
470------
471
Antoine Pitrou4f863432012-02-12 02:12:47 +0100472The :mod:`~encodings.mbcs` codec has been rewritten to handle correctly
Georg Brandlff962c52012-02-04 08:55:56 +0100473``replace`` and ``ignore`` error handlers on all Windows versions. The
474:mod:`~encodings.mbcs` codec now supports all error handlers, instead of only
475``replace`` to encode and ``ignore`` to decode.
Victor Stinner3a50e702011-10-18 21:21:00 +0200476
Georg Brandlff962c52012-02-04 08:55:56 +0100477A new Windows-only codec has been added: ``cp65001`` (:issue:`13216`). It is the
478Windows code page 65001 (Windows UTF-8, ``CP_UTF8``). For example, it is used
479by ``sys.stdout`` if the console output code page is set to cp65001 (e.g., using
480``chcp 65001`` command).
Victor Stinner2f3ca9f2011-10-27 01:38:56 +0200481
Georg Brandlff962c52012-02-04 08:55:56 +0100482Multibyte CJK decoders now resynchronize faster. They only ignore the first
Georg Brandl6c0929b2011-07-09 11:43:33 +0200483byte of an invalid byte sequence. For example, ``b'\xff\n'.decode('gb2312',
484'replace')`` now returns a ``\n`` after the replacement character.
Victor Stinner2cded9c2011-07-08 01:45:13 +0200485
Georg Brandl6c0929b2011-07-09 11:43:33 +0200486(:issue:`12016`)
Victor Stinner2cded9c2011-07-08 01:45:13 +0200487
Georg Brandlff962c52012-02-04 08:55:56 +0100488Incremental CJK codec encoders are no longer reset at each call to their
489encode() methods. For example::
Victor Stinner2cded9c2011-07-08 01:45:13 +0200490
491 $ ./python -q
492 >>> import codecs
493 >>> encoder = codecs.getincrementalencoder('hz')('strict')
494 >>> b''.join(encoder.encode(x) for x in '\u52ff\u65bd\u65bc\u4eba\u3002 Bye.')
495 b'~{NpJ)l6HK!#~} Bye.'
496
Georg Brandl6c0929b2011-07-09 11:43:33 +0200497This example gives ``b'~{Np~}~{J)~}~{l6~}~{HK~}~{!#~} Bye.'`` with older Python
Victor Stinner2cded9c2011-07-08 01:45:13 +0200498versions.
499
Georg Brandl6c0929b2011-07-09 11:43:33 +0200500(:issue:`12100`)
Victor Stinner2cded9c2011-07-08 01:45:13 +0200501
Victor Stinner9f4b1e92011-11-10 20:56:30 +0100502The ``unicode_internal`` codec has been deprecated.
503
Éric Araujo84b8ed82011-08-29 21:42:47 +0200504crypt
505-----
506
Victor Stinnerc78fb332011-09-21 03:35:44 +0200507Addition of salt and modular crypt format and the :func:`~crypt.mksalt`
508function to the :mod:`crypt` module.
Éric Araujo84b8ed82011-08-29 21:42:47 +0200509
510(:issue:`10924`)
511
Victor Stinnera7878b72011-07-14 23:07:44 +0200512curses
513------
514
Victor Stinner0fdfceb2011-11-25 22:10:02 +0100515 * If the :mod:`curses` module is linked to the ncursesw library, use Unicode
516 functions when Unicode strings or characters are passed (e.g.
517 :c:func:`waddwstr`), and bytes functions otherwise (e.g. :c:func:`waddstr`).
518 * Use the locale encoding instead of ``utf-8`` to encode Unicode strings.
519 * :class:`curses.window` has a new :attr:`curses.window.encoding` attribute.
Victor Stinnerc78fb332011-09-21 03:35:44 +0200520 * The :class:`curses.window` class has a new :meth:`~curses.window.get_wch`
521 method to get a wide character
522 * The :mod:`curses` module has a new :meth:`~curses.unget_wch` function to
523 push a wide character so the next :meth:`~curses.window.get_wch` will return
524 it
Victor Stinnera7878b72011-07-14 23:07:44 +0200525
Victor Stinnerc78fb332011-09-21 03:35:44 +0200526(Contributed by Iñigo Serna in :issue:`6755`)
Victor Stinnera7878b72011-07-14 23:07:44 +0200527
Victor Stinner024e37a2011-03-31 01:31:06 +0200528faulthandler
529------------
530
531New module: :mod:`faulthandler`.
532
533 * :envvar:`PYTHONFAULTHANDLER`
534 * :option:`-X` ``faulthandler``
535
Victor Stinner811db3b2011-09-21 03:20:03 +0200536ftplib
537------
538
539The :class:`~ftplib.FTP_TLS` class now provides a new
540:func:`~ftplib.FTP_TLS.ccc` function to revert control channel back to
Florent Xicluna6d57d212011-10-23 22:23:57 +0200541plaintext. This can be useful to take advantage of firewalls that know how to
Victor Stinner811db3b2011-09-21 03:20:03 +0200542handle NAT with non-secure FTP without opening fixed ports.
543
544(Contributed by Giampaolo Rodolà in :issue:`12139`)
545
546
Antoine Pitrou5a8bc6f2011-11-17 02:20:48 +0100547imaplib
548-------
549
550The :class:`~imaplib.IMAP4_SSL` constructor now accepts an SSLContext
551parameter to control parameters of the secure channel.
552
553(Contributed by Sijin Joseph in :issue:`8808`)
554
555
Charles-François Natalidc3044c2012-01-09 22:40:02 +0100556io
557--
558
Charles-François Natalid612de12012-01-14 11:51:00 +0100559The :func:`~io.open` function has a new ``'x'`` mode that can be used to
560exclusively create a new file, and raise a :exc:`FileExistsError` if the file
561already exists. It is based on the C11 'x' mode to fopen().
Charles-François Natalidc3044c2012-01-09 22:40:02 +0100562
563(Contributed by David Townshend in :issue:`12760`)
564
565
Nadeem Vawda34599222011-12-09 01:32:46 +0200566lzma
567----
568
569The newly-added :mod:`lzma` module provides data compression and decompression
570using the LZMA algorithm, including support for the ``.xz`` and ``.lzma``
571file formats.
572
573(Contributed by Nadeem Vawda and Per Øyvind Karlsen in :issue:`6715`)
574
575
Victor Stinnerfa0e3d52011-05-09 01:01:09 +0200576math
577----
578
579The :mod:`math` module has a new function:
580
581 * :func:`~math.log2`: return the base-2 logarithm of *x*
582 (Written by Mark Dickinson in :issue:`11888`).
583
584
585nntplib
586-------
587
588The :class:`nntplib.NNTP` class now supports the context manager protocol to
589unconditionally consume :exc:`socket.error` exceptions and to close the NNTP
590connection when done::
591
592 >>> from nntplib import NNTP
Ezio Melotti3c14b4e2011-07-13 11:44:44 +0300593 >>> with NNTP('news.gmane.org') as n:
Victor Stinnerfa0e3d52011-05-09 01:01:09 +0200594 ... n.group('gmane.comp.python.committers')
595 ...
Ezio Melotti04f648c2011-07-26 09:37:46 +0300596 ('211 1755 1 1755 gmane.comp.python.committers', 1755, 1, 1755, 'gmane.comp.python.committers')
Victor Stinnerfa0e3d52011-05-09 01:01:09 +0200597 >>>
598
599(Contributed by Giampaolo Rodolà in :issue:`9795`)
600
601
Giampaolo Rodolàc9c2c8b2011-02-25 14:39:16 +0000602os
603--
604
Charles-François Natalia003af12011-06-01 20:30:52 +0200605* The :mod:`os` module has a new :func:`~os.pipe2` function that makes it
606 possible to create a pipe with :data:`~os.O_CLOEXEC` or
607 :data:`~os.O_NONBLOCK` flags set atomically. This is especially useful to
608 avoid race conditions in multi-threaded programs.
609
Giampaolo Rodolà18e8bcb2011-02-25 20:57:54 +0000610* The :mod:`os` module has a new :func:`~os.sendfile` function which provides
611 an efficent "zero-copy" way for copying data from one file (or socket)
612 descriptor to another. The phrase "zero-copy" refers to the fact that all of
613 the copying of data between the two descriptors is done entirely by the
614 kernel, with no copying of data into userspace buffers. :func:`~os.sendfile`
615 can be used to efficiently copy data from a file on disk to a network socket,
616 e.g. for downloading a file.
Giampaolo Rodolàc9c2c8b2011-02-25 14:39:16 +0000617
Giampaolo Rodolà18e8bcb2011-02-25 20:57:54 +0000618 (Patch submitted by Ross Lagerwall and Giampaolo Rodolà in :issue:`10882`.)
619
620* The :mod:`os` module has two new functions: :func:`~os.getpriority` and
621 :func:`~os.setpriority`. They can be used to get or set process
622 niceness/priority in a fashion similar to :func:`os.nice` but extended to all
623 processes instead of just the current one.
624
625 (Patch submitted by Giampaolo Rodolà in :issue:`10784`.)
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000626
Charles-François Natali7372b062012-02-05 15:15:38 +0100627* The :mod:`os` module has a new :func:`~os.fwalk` function similar to
628 :func:`~os.walk` except that it also yields file descriptors referring to the
629 directories visited. This is especially useful to avoid symlink races.
630
Victor Stinnere5064372011-10-14 00:08:29 +0200631* "at" functions (:issue:`4761`):
632
633 * :func:`~os.faccessat`
634 * :func:`~os.fchmodat`
635 * :func:`~os.fchownat`
636 * :func:`~os.fstatat`
637 * :func:`~os.futimesat`
Victor Stinnere5064372011-10-14 00:08:29 +0200638 * :func:`~os.linkat`
639 * :func:`~os.mkdirat`
640 * :func:`~os.mkfifoat`
641 * :func:`~os.mknodat`
642 * :func:`~os.openat`
643 * :func:`~os.readlinkat`
644 * :func:`~os.renameat`
645 * :func:`~os.symlinkat`
646 * :func:`~os.unlinkat`
647 * :func:`~os.utimensat`
Victor Stinnere5064372011-10-14 00:08:29 +0200648
649* extended attributes (:issue:`12720`):
650
651 * :func:`~os.fgetxattr`
652 * :func:`~os.flistxattr`
653 * :func:`~os.fremovexattr`
654 * :func:`~os.fsetxattr`
655 * :func:`~os.getxattr`
656 * :func:`~os.lgetxattr`
657 * :func:`~os.listxattr`
658 * :func:`~os.llistxattr`
659 * :func:`~os.lremovexattr`
660 * :func:`~os.lsetxattr`
661 * :func:`~os.removexattr`
662 * :func:`~os.setxattr`
663
664* Scheduler functions (:issue:`12655`):
665
666 * :func:`~os.sched_get_priority_max`
667 * :func:`~os.sched_get_priority_min`
668 * :func:`~os.sched_getaffinity`
669 * :func:`~os.sched_getparam`
670 * :func:`~os.sched_getscheduler`
671 * :func:`~os.sched_rr_get_interval`
672 * :func:`~os.sched_setaffinity`
673 * :func:`~os.sched_setparam`
674 * :func:`~os.sched_setscheduler`
675 * :func:`~os.sched_yield`
676
677* Add some extra posix functions to the os module (:issue:`10812`):
678
679 * :func:`~os.fexecve`
680 * :func:`~os.futimens`
Victor Stinnere5064372011-10-14 00:08:29 +0200681 * :func:`~os.futimes`
682 * :func:`~os.lockf`
683 * :func:`~os.lutimes`
Victor Stinnere5064372011-10-14 00:08:29 +0200684 * :func:`~os.posix_fadvise`
685 * :func:`~os.posix_fallocate`
686 * :func:`~os.pread`
687 * :func:`~os.pwrite`
688 * :func:`~os.readv`
689 * :func:`~os.sync`
690 * :func:`~os.truncate`
691 * :func:`~os.waitid`
692 * :func:`~os.writev`
693
694* Other new functions:
695
Charles-François Natali77940902012-02-06 19:54:48 +0100696 * :func:`~os.flistdir` (:issue:`10755`)
Victor Stinnere5064372011-10-14 00:08:29 +0200697 * :func:`~os.getgrouplist` (:issue:`9344`)
698
Giampaolo Rodolà424298a2011-03-03 18:34:06 +0000699
Éric Araujo765e94f2011-06-03 17:26:59 +0200700packaging
701---------
702
703:mod:`distutils` has undergone additions and refactoring under a new name,
704:mod:`packaging`, to allow developers to break backward compatibility.
705:mod:`distutils` is still provided in the standard library, but users are
706encouraged to transition to :mod:`packaging`. For older versions of Python, a
707backport compatible with 2.4+ and 3.1+ will be made available on PyPI under the
708name :mod:`distutils2`.
709
710.. TODO add examples and howto to the packaging docs and link to them
711
712
Victor Stinner383c3fc2011-05-25 01:35:05 +0200713pydoc
714-----
715
Victor Stinner6daa33c2011-05-25 01:41:22 +0200716The Tk GUI and the :func:`~pydoc.serve` function have been removed from the
717:mod:`pydoc` module: ``pydoc -g`` and :func:`~pydoc.serve` have been deprecated
718in Python 3.2.
Victor Stinner383c3fc2011-05-25 01:35:05 +0200719
720
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100721sched
722-----
Victor Stinner754851f2011-04-19 23:58:51 +0200723
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100724* :meth:`~sched.scheduler.run` now accepts a *blocking* parameter which when
725 set to False makes the method execute the scheduled events due to expire
726 soonest (if any) and then return immediately.
727 This is useful in case you want to use the :class:`~sched.scheduler` in
728 non-blocking applications. (Contributed by Giampaolo Rodolà in :issue:`13449`)
Victor Stinner754851f2011-04-19 23:58:51 +0200729
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100730* :class:`~sched.scheduler` class can now be safely used in multi-threaded
731 environments. (Contributed by Josiah Carlson and Giampaolo Rodolà in
732 :issue:`8684`)
733
734* *timefunc* and *delayfunct* parameters of :class:`~sched.scheduler` class
735 constructor are now optional and defaults to :func:`time.time` and
736 :func:`time.sleep` respectively. (Contributed by Chris Clark in
737 :issue:`13245`)
738
739* :meth:`~sched.scheduler.enter` and :meth:`~sched.scheduler.enterabs`
740 *argument* parameter is now optional. (Contributed by Chris Clark in
741 :issue:`13245`)
742
743* :meth:`~sched.scheduler.enter` and :meth:`~sched.scheduler.enterabs`
744 now accept a *kwargs* parameter. (Contributed by Chris Clark in
745 :issue:`13245`)
746
747
748shutil
749------
750
751* The :mod:`shutil` module has these new fuctions:
752
753 * :func:`~shutil.disk_usage`: provides total, used and free disk space
754 statistics. (Contributed by Giampaolo Rodolà in :issue:`12442`)
755 * :func:`~shutil.chown`: allows one to change user and/or group of the given
756 path also specifying the user/group names and not only their numeric
757 ids. (Contributed by Sandro Tosi in :issue:`12191`)
Victor Stinnera9293352011-04-30 15:21:58 +0200758
Victor Stinnerfa0e3d52011-05-09 01:01:09 +0200759
Victor Stinnera9293352011-04-30 15:21:58 +0200760signal
761------
762
Victor Stinnerfa0e3d52011-05-09 01:01:09 +0200763* The :mod:`signal` module has new functions:
Victor Stinnera9293352011-04-30 15:21:58 +0200764
Victor Stinnerb3e72192011-05-08 01:46:11 +0200765 * :func:`~signal.pthread_sigmask`: fetch and/or change the signal mask of the
766 calling thread (Contributed by Jean-Paul Calderone in :issue:`8407`) ;
767 * :func:`~signal.pthread_kill`: send a signal to a thread ;
768 * :func:`~signal.sigpending`: examine pending functions ;
769 * :func:`~signal.sigwait`: wait a signal.
Ross Lagerwallbc808222011-06-25 12:13:40 +0200770 * :func:`~signal.sigwaitinfo`: wait for a signal, returning detailed
771 information about it.
772 * :func:`~signal.sigtimedwait`: like :func:`~signal.sigwaitinfo` but with a
773 timeout.
Victor Stinnera9293352011-04-30 15:21:58 +0200774
Victor Stinnerd49b1f12011-05-08 02:03:15 +0200775* The signal handler writes the signal number as a single byte instead of
776 a nul byte into the wakeup file descriptor. So it is possible to wait more
777 than one signal and know which signals were raised.
778
Victor Stinner388196e2011-05-10 17:13:00 +0200779* :func:`signal.signal` and :func:`signal.siginterrupt` raise an OSError,
780 instead of a RuntimeError: OSError has an errno attribute.
781
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100782smtplib
783-------
784
785The :class:`~smtplib.SMTP_SSL` constructor and the :meth:`~smtplib.SMTP.starttls`
786method now accept an SSLContext parameter to control parameters of the secure
787channel.
788
789(Contributed by Kasun Herath in :issue:`8809`)
790
791
Nick Coghlan96fe56a2011-08-22 11:55:57 +1000792socket
793------
794
Charles-François Natali47413c12011-10-06 19:47:44 +0200795* The :class:`~socket.socket` class now exposes additional methods to process
796 ancillary data when supported by the underlying platform:
Nick Coghlan96fe56a2011-08-22 11:55:57 +1000797
Charles-François Natali47413c12011-10-06 19:47:44 +0200798 * :func:`~socket.socket.sendmsg`
799 * :func:`~socket.socket.recvmsg`
800 * :func:`~socket.socket.recvmsg_into`
Nick Coghlan96fe56a2011-08-22 11:55:57 +1000801
Charles-François Natali47413c12011-10-06 19:47:44 +0200802 (Contributed by David Watson in :issue:`6560`, based on an earlier patch by
803 Heiko Wundram)
804
805* The :class:`~socket.socket` class now supports the PF_CAN protocol family
806 (http://en.wikipedia.org/wiki/Socketcan), on Linux
807 (http://lwn.net/Articles/253425).
808
809 (Contributed by Matthias Fuchs, updated by Tiago Gonçalves in :issue:`10141`)
810
Charles-François Natali10b8cf42011-11-10 19:21:37 +0100811* The :class:`~socket.socket` class now supports the PF_RDS protocol family
812 (http://en.wikipedia.org/wiki/Reliable_Datagram_Sockets and
813 http://oss.oracle.com/projects/rds/).
Victor Stinner754851f2011-04-19 23:58:51 +0200814
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100815
Victor Stinner99c8b162011-05-24 12:05:19 +0200816ssl
817---
818
Antoine Pitrou2c0a9672011-11-17 02:09:13 +0100819* The :mod:`ssl` module has two new random generation functions:
Victor Stinner99c8b162011-05-24 12:05:19 +0200820
821 * :func:`~ssl.RAND_bytes`: generate cryptographically strong
822 pseudo-random bytes.
823 * :func:`~ssl.RAND_pseudo_bytes`: generate pseudo-random bytes.
824
Antoine Pitrou2c0a9672011-11-17 02:09:13 +0100825 (Contributed by Victor Stinner in :issue:`12049`)
826
827* The :mod:`ssl` module now exposes a finer-grained exception hierarchy
828 in order to make it easier to inspect the various kinds of errors.
829
830 (Contributed by Antoine Pitrou in :issue:`11183`)
831
832* :meth:`~ssl.SSLContext.load_cert_chain` now accepts a *password* argument
833 to be used if the private key is encrypted.
834
835 (Contributed by Adam Simpkins in :issue:`12803`)
836
Antoine Pitrou73fc8142011-12-23 20:58:36 +0100837* Diffie-Hellman key exchange, both regular and Elliptic Curve-based, is
838 now supported through the :meth:`~ssl.SSLContext.load_dh_params` and
839 :meth:`~ssl.SSLContext.set_ecdh_curve` methods.
840
841 (Contributed by Antoine Pitrou in :issue:`13626` and :issue:`13627`)
842
Antoine Pitrou2c0a9672011-11-17 02:09:13 +0100843* SSL sockets have a new :meth:`~ssl.SSLSocket.get_channel_binding` method
844 allowing the implementation of certain authentication mechanisms such as
845 SCRAM-SHA-1-PLUS.
846
847 (Contributed by Jacek Konieczny in :issue:`12551`)
848
Antoine Pitrou73fc8142011-12-23 20:58:36 +0100849* You can query the SSL compression algorithm used by an SSL socket, thanks
850 to its new :meth:`~ssl.SSLSocket.compression` method.
851
852 (Contributed by Antoine Pitrou in :issue:`13634`)
853
854
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100855sys
856---
Giampaolo Rodola'210e7ca2011-07-01 13:55:36 +0200857
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100858* The :mod:`sys` module has a new :data:`~sys.thread_info` :term:`struct
859 sequence` holding informations about the thread implementation.
Giampaolo Rodola'210e7ca2011-07-01 13:55:36 +0200860
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100861 (:issue:`11223`)
Giampaolo Rodola'096dcb12011-06-27 11:17:51 +0200862
Antoine Pitrou5a8bc6f2011-11-17 02:20:48 +0100863
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100864time
865----
Antoine Pitrou5a8bc6f2011-11-17 02:20:48 +0100866
Victor Stinnerf4c54ff2012-02-08 01:48:34 +0100867The :mod:`time` module has new functions:
868
869* :func:`~time.clock_getres` and :func:`~time.clock_gettime` functions and
870 ``CLOCK_xxx`` constants.
871* :func:`~time.monotonic`: monotonic clock.
872* :func:`~time.wallclock`.
873
874(Contributed by Victor Stinner in :issue:`10278`)
875
Antoine Pitrou5a8bc6f2011-11-17 02:20:48 +0100876
Senthil Kumarande49d642011-10-16 23:54:44 +0800877urllib
878------
879
880The :class:`~urllib.request.Request` class, now accepts a *method* argument
881used by :meth:`~urllib.request.Request.get_method` to determine what HTTP method
Senthil Kumarana41c9422011-10-20 02:37:08 +0800882should be used. For example, this will send a ``'HEAD'`` request::
Senthil Kumarande49d642011-10-16 23:54:44 +0800883
884 >>> urlopen(Request('http://www.python.org', method='HEAD'))
885
886(:issue:`1673007`)
Giampaolo Rodola'096dcb12011-06-27 11:17:51 +0200887
Giampaolo Rodola'be55d992011-11-22 13:33:34 +0100888
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000889Optimizations
890=============
891
892Major performance enhancements have been added:
893
Victor Stinner46606ce2011-11-20 18:27:55 +0100894* Thanks to the :pep:`393`, some operations on Unicode strings has been optimized:
895
896 * the memory footprint is divided by 2 to 4 depending on the text
Victor Stinnera996f1e2011-11-21 13:14:43 +0100897 * encode an ASCII string to UTF-8 doesn't need to encode characters anymore,
898 the UTF-8 representation is shared with the ASCII representation
Victor Stinner6099a032011-12-18 14:22:26 +0100899 * the UTF-8 encoder has been optimized
900 * repeating a single ASCII letter and getting a substring of a ASCII strings
901 is 4 times faster
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000902
903
904Build and C API Changes
905=======================
906
907Changes to Python's build process and to the C API include:
908
Stefan Krah95b1ba62012-02-29 17:27:21 +0100909* New :pep:`3118` related function:
910
911 * :c:func:`PyMemoryView_FromMemory`
912
Victor Stinner46606ce2011-11-20 18:27:55 +0100913* The :pep:`393` added new Unicode types, macros and functions:
914
Victor Stinnera996f1e2011-11-21 13:14:43 +0100915 * High-level API:
916
917 * :c:func:`PyUnicode_CopyCharacters`
918 * :c:func:`PyUnicode_FindChar`
919 * :c:func:`PyUnicode_GetLength`, :c:macro:`PyUnicode_GET_LENGTH`
920 * :c:func:`PyUnicode_New`
921 * :c:func:`PyUnicode_Substring`
922 * :c:func:`PyUnicode_ReadChar`, :c:func:`PyUnicode_WriteChar`
923
924 * Low-level API:
925
926 * :c:type:`Py_UCS1`, :c:type:`Py_UCS2`, :c:type:`Py_UCS4` types
927 * :c:type:`PyASCIIObject` and :c:type:`PyCompactUnicodeObject` structures
928 * :c:macro:`PyUnicode_READY`
929 * :c:func:`PyUnicode_FromKindAndData`
930 * :c:func:`PyUnicode_AsUCS4`, :c:func:`PyUnicode_AsUCS4Copy`
931 * :c:macro:`PyUnicode_DATA`, :c:macro:`PyUnicode_1BYTE_DATA`,
932 :c:macro:`PyUnicode_2BYTE_DATA`, :c:macro:`PyUnicode_4BYTE_DATA`
933 * :c:macro:`PyUnicode_KIND` with :c:type:`PyUnicode_Kind` enum:
934 :c:data:`PyUnicode_WCHAR_KIND`, :c:data:`PyUnicode_1BYTE_KIND`,
935 :c:data:`PyUnicode_2BYTE_KIND`, :c:data:`PyUnicode_4BYTE_KIND`
936 * :c:macro:`PyUnicode_READ`, :c:macro:`PyUnicode_READ_CHAR`, :c:macro:`PyUnicode_WRITE`
937 * :c:macro:`PyUnicode_MAX_CHAR_VALUE`
938
Giampaolo Rodolà3108f982011-02-24 20:59:48 +0000939
940
Victor Stinnerd1be8782011-12-09 00:10:41 +0100941Deprecated
942==========
943
Georg Brandl0cd25c92011-04-29 13:45:54 +0200944Unsupported Operating Systems
Victor Stinnerd1be8782011-12-09 00:10:41 +0100945-----------------------------
Victor Stinnerb90db4c2011-04-26 22:48:24 +0200946
Brian Curtin49a40cd2011-05-02 22:30:06 -0500947OS/2 and VMS are no longer supported due to the lack of a maintainer.
948
949Windows 2000 and Windows platforms which set ``COMSPEC`` to ``command.com``
950are no longer supported due to maintenance burden.
Victor Stinnerb90db4c2011-04-26 22:48:24 +0200951
952
Victor Stinner46606ce2011-11-20 18:27:55 +0100953Deprecated Python modules, functions and methods
Victor Stinnerd1be8782011-12-09 00:10:41 +0100954------------------------------------------------
Victor Stinner19bd0692011-11-16 00:18:57 +0100955
956* The :mod:`packaging` module replaces the :mod:`distutils` module
957* The ``unicode_internal`` codec has been deprecated because of the
Sandro Tosicd899122012-01-22 12:16:04 +0100958 :pep:`393`, use UTF-8, UTF-16 (``utf-16-le`` or ``utf-16-be``), or UTF-32
959 (``utf-32-le`` or ``utf-32-be``)
Victor Stinner19bd0692011-11-16 00:18:57 +0100960* :meth:`ftplib.FTP.nlst` and :meth:`ftplib.FTP.dir`: use
Victor Stinner46606ce2011-11-20 18:27:55 +0100961 :meth:`ftplib.FTP.mlsd`
Victor Stinner19bd0692011-11-16 00:18:57 +0100962* :func:`platform.popen`: use the :mod:`subprocess` module. Check especially
963 the :ref:`subprocess-replacements` section.
964* :issue:`13374`: The Windows bytes API has been deprecated in the :mod:`os`
Victor Stinner46606ce2011-11-20 18:27:55 +0100965 module. Use Unicode filenames, instead of bytes filenames, to not depend on
Victor Stinner19bd0692011-11-16 00:18:57 +0100966 the ANSI code page anymore and to support any filename.
Florent Xiclunaa72a98f2012-02-13 11:03:30 +0100967* :issue:`13988`: The :mod:`xml.etree.cElementTree` module is deprecated. The
968 accelerator is used automatically whenever available.
Victor Stinner19bd0692011-11-16 00:18:57 +0100969
970
Victor Stinner46606ce2011-11-20 18:27:55 +0100971Deprecated functions and types of the C API
Victor Stinnerd1be8782011-12-09 00:10:41 +0100972-------------------------------------------
Victor Stinner46606ce2011-11-20 18:27:55 +0100973
974The :c:type:`Py_UNICODE` has been deprecated by the :pep:`393` and will be
975removed in Python 4. All functions using this type are deprecated:
976
Victor Stinner46606ce2011-11-20 18:27:55 +0100977Unicode functions and methods using :c:type:`Py_UNICODE` and
978:c:type:`Py_UNICODE*` types:
979
980 * :c:macro:`PyUnicode_FromUnicode`: use :c:func:`PyUnicode_FromWideChar` or
981 :c:func:`PyUnicode_FromKindAndData`
982 * :c:macro:`PyUnicode_AS_UNICODE`, :c:func:`PyUnicode_AsUnicode`,
983 :c:func:`PyUnicode_AsUnicodeAndSize`: use :c:func:`PyUnicode_AsWideCharString`
984 * :c:macro:`PyUnicode_AS_DATA`: use :c:macro:`PyUnicode_DATA` with
985 :c:macro:`PyUnicode_READ` and :c:macro:`PyUnicode_WRITE`
986 * :c:macro:`PyUnicode_GET_SIZE`, :c:func:`PyUnicode_GetSize`: use
987 :c:macro:`PyUnicode_GET_LENGTH` or :c:func:`PyUnicode_GetLength`
988 * :c:macro:`PyUnicode_GET_DATA_SIZE`: use
989 ``PyUnicode_GET_LENGTH(str) * PyUnicode_KIND(str)`` (only work on ready
990 strings)
Victor Stinnerbf6e5602011-12-12 01:53:47 +0100991 * :c:func:`PyUnicode_AsUnicodeCopy`: use :c:func:`PyUnicode_AsUCS4Copy` or
992 :c:func:`PyUnicode_AsWideCharString`
Victor Stinnerab595942011-12-17 04:59:06 +0100993 * :c:func:`PyUnicode_GetMax`
994
Victor Stinner46606ce2011-11-20 18:27:55 +0100995
Victor Stinnera996f1e2011-11-21 13:14:43 +0100996Functions and macros manipulating Py_UNICODE* strings:
997
998 * :c:macro:`Py_UNICODE_strlen`: use :c:func:`PyUnicode_GetLength` or
999 :c:macro:`PyUnicode_GET_LENGTH`
1000 * :c:macro:`Py_UNICODE_strcat`: use :c:func:`PyUnicode_CopyCharacters` or
1001 :c:func:`PyUnicode_FromFormat`
1002 * :c:macro:`Py_UNICODE_strcpy`, :c:macro:`Py_UNICODE_strncpy`,
1003 :c:macro:`Py_UNICODE_COPY`: use :c:func:`PyUnicode_CopyCharacters` or
1004 :c:func:`PyUnicode_Substring`
1005 * :c:macro:`Py_UNICODE_strcmp`: use :c:func:`PyUnicode_Compare`
1006 * :c:macro:`Py_UNICODE_strncmp`: use :c:func:`PyUnicode_Tailmatch`
1007 * :c:macro:`Py_UNICODE_strchr`, :c:macro:`Py_UNICODE_strrchr`: use
1008 :c:func:`PyUnicode_FindChar`
Victor Stinner606e19d2012-01-04 03:59:16 +01001009 * :c:macro:`Py_UNICODE_FILL`: use :c:func:`PyUnicode_Fill`
Victor Stinnerab595942011-12-17 04:59:06 +01001010 * :c:macro:`Py_UNICODE_MATCH`
Victor Stinnera996f1e2011-11-21 13:14:43 +01001011
Victor Stinner46606ce2011-11-20 18:27:55 +01001012Encoders:
1013
1014 * :c:func:`PyUnicode_Encode`: use :c:func:`PyUnicode_AsEncodedObject`
1015 * :c:func:`PyUnicode_EncodeUTF7`
Victor Stinnera996f1e2011-11-21 13:14:43 +01001016 * :c:func:`PyUnicode_EncodeUTF8`: use :c:func:`PyUnicode_AsUTF8` or
1017 :c:func:`PyUnicode_AsUTF8String`
Victor Stinner46606ce2011-11-20 18:27:55 +01001018 * :c:func:`PyUnicode_EncodeUTF32`
1019 * :c:func:`PyUnicode_EncodeUTF16`
1020 * :c:func:`PyUnicode_EncodeUnicodeEscape:` use
1021 :c:func:`PyUnicode_AsUnicodeEscapeString`
1022 * :c:func:`PyUnicode_EncodeRawUnicodeEscape:` use
1023 :c:func:`PyUnicode_AsRawUnicodeEscapeString`
1024 * :c:func:`PyUnicode_EncodeLatin1`: use :c:func:`PyUnicode_AsLatin1String`
1025 * :c:func:`PyUnicode_EncodeASCII`: use :c:func:`PyUnicode_AsASCIIString`
1026 * :c:func:`PyUnicode_EncodeCharmap`
1027 * :c:func:`PyUnicode_TranslateCharmap`
1028 * :c:func:`PyUnicode_EncodeMBCS`: use :c:func:`PyUnicode_AsMBCSString` or
1029 :c:func:`PyUnicode_EncodeCodePage` (with ``CP_ACP`` code_page)
1030 * :c:func:`PyUnicode_EncodeDecimal`,
1031 :c:func:`PyUnicode_TransformDecimalToASCII`
1032
1033
Giampaolo Rodolà3108f982011-02-24 20:59:48 +00001034Porting to Python 3.3
1035=====================
1036
1037This section lists previously described changes and other bugfixes
Antoine Pitrou037ffbf2011-10-24 00:25:41 +02001038that may require changes to your code.
1039
1040Porting Python code
1041-------------------
Giampaolo Rodolà3108f982011-02-24 20:59:48 +00001042
Victor Stinner19bd0692011-11-16 00:18:57 +01001043* :issue:`12326`: On Linux, sys.platform doesn't contain the major version
Victor Stinnerff3d9392011-08-20 23:39:26 +02001044 anymore. It is now always 'linux', instead of 'linux2' or 'linux3' depending
1045 on the Linux version used to build Python. Replace sys.platform == 'linux2'
1046 with sys.platform.startswith('linux'), or directly sys.platform == 'linux' if
1047 you don't need to support older Python versions.
Éric Araujoc09fca62011-03-23 02:06:24 +01001048
Antoine Pitrou037ffbf2011-10-24 00:25:41 +02001049Porting C code
1050--------------
1051
1052* Due to :ref:`PEP 393 <pep-393>`, the :c:type:`Py_UNICODE` type and all
1053 functions using this type are deprecated (but will stay available for
1054 at least five years). If you were using low-level Unicode APIs to
1055 construct and access unicode objects and you want to benefit of the
1056 memory footprint reduction provided by the PEP 393, you have to convert
1057 your code to the new :doc:`Unicode API <../c-api/unicode>`.
1058
1059 However, if you only have been using high-level functions such as
1060 :c:func:`PyUnicode_Concat()`, :c:func:`PyUnicode_Join` or
1061 :c:func:`PyUnicode_FromFormat()`, your code will automatically take
1062 advantage of the new unicode representations.
1063
Antoine Pitrouc229e6e2012-02-20 19:41:11 +01001064Building C extensions
1065---------------------
1066
1067* The range of possible file names for C extensions has been narrowed.
1068 Very rarely used spellings have been suppressed: under POSIX, files
1069 named ``xxxmodule.so``, ``xxxmodule.abi3.so`` and
1070 ``xxxmodule.cpython-*.so`` are no longer recognized as implementing
1071 the ``xxx`` module. If you had been generating such files, you have
1072 to switch to the other spellings (i.e., remove the ``module`` string
1073 from the file names).
1074
1075 (implemented in :issue:`14040`.)
1076
1077
Antoine Pitrou037ffbf2011-10-24 00:25:41 +02001078Other issues
1079------------
1080
Éric Araujoc09fca62011-03-23 02:06:24 +01001081.. Issue #11591: When :program:`python` was started with :option:`-S`,
1082 ``import site`` will not add site-specific paths to the module search
1083 paths. In previous versions, it did. See changeset for doc changes in
1084 various files. Contributed by Carl Meyer with editions by Éric Araujo.
Éric Araujobe3bd572011-03-26 01:55:15 +01001085
Éric Araujobfc97292011-11-14 18:18:15 +01001086.. Issue #10998: the -Q command-line flag and related artifacts have been
Éric Araujobe3bd572011-03-26 01:55:15 +01001087 removed. Code checking sys.flags.division_warning will need updating.
1088 Contributed by Éric Araujo.