1.. _2to3-reference:
2
32to3 - Automated Python 2 to 3 code translation
4===============================================
5
6.. sectionauthor:: Benjamin Peterson <benjamin@python.org>
7
82to3 is a Python program that reads Python 2.x source code and applies a series
9of *fixers* to transform it into valid Python 3.x code.  The standard library
10contains a rich set of fixers that will handle almost all code.  2to3 supporting
11library :mod:`lib2to3` is, however, a flexible and generic library, so it is
12possible to write your own fixers for 2to3.  :mod:`lib2to3` could also be
13adapted to custom applications in which Python code needs to be edited
14automatically.
15
16
17.. _2to3-using:
18
19Using 2to3
20----------
21
222to3 will usually be installed with the Python interpreter as a script.  It is
23also located in the :file:`Tools/scripts` directory of the Python root.
24
252to3's basic arguments are a list of files or directories to transform.  The
26directories are recursively traversed for Python sources.
27
28Here is a sample Python 2.x source file, :file:`example.py`::
29
30   def greet(name):
31       print "Hello, {0}!".format(name)
32   print "What's your name?"
33   name = raw_input()
34   greet(name)
35
36It can be converted to Python 3.x code via 2to3 on the command line:
37
38.. code-block:: shell-session
39
40   $ 2to3 example.py
41
42A diff against the original source file is printed.  2to3 can also write the
43needed modifications right back to the source file.  (A backup of the original
44file is made unless :option:`!-n` is also given.)  Writing the changes back is
45enabled with the :option:`!-w` flag:
46
47.. code-block:: shell-session
48
49   $ 2to3 -w example.py
50
51After transformation, :file:`example.py` looks like this::
52
53   def greet(name):
54       print("Hello, {0}!".format(name))
55   print("What's your name?")
56   name = input()
57   greet(name)
58
59Comments and exact indentation are preserved throughout the translation process.
60
61By default, 2to3 runs a set of :ref:`predefined fixers <2to3-fixers>`.  The
62:option:`!-l` flag lists all available fixers.  An explicit set of fixers to run
63can be given with :option:`!-f`.  Likewise the :option:`!-x` explicitly disables a
64fixer.  The following example runs only the ``imports`` and ``has_key`` fixers:
65
66.. code-block:: shell-session
67
68   $ 2to3 -f imports -f has_key example.py
69
70This command runs every fixer except the ``apply`` fixer:
71
72.. code-block:: shell-session
73
74   $ 2to3 -x apply example.py
75
76Some fixers are *explicit*, meaning they aren't run by default and must be
77listed on the command line to be run.  Here, in addition to the default fixers,
78the ``idioms`` fixer is run:
79
80.. code-block:: shell-session
81
82   $ 2to3 -f all -f idioms example.py
83
84Notice how passing ``all`` enables all default fixers.
85
86Sometimes 2to3 will find a place in your source code that needs to be changed,
87but 2to3 cannot fix automatically.  In this case, 2to3 will print a warning
88beneath the diff for a file.  You should address the warning in order to have
89compliant 3.x code.
90
912to3 can also refactor doctests.  To enable this mode, use the :option:`!-d`
92flag.  Note that *only* doctests will be refactored.  This also doesn't require
93the module to be valid Python.  For example, doctest like examples in a reST
94document could also be refactored with this option.
95
96The :option:`!-v` option enables output of more information on the translation
97process.
98
99Since some print statements can be parsed as function calls or statements, 2to3
100cannot always read files containing the print function.  When 2to3 detects the
101presence of the ``from __future__ import print_function`` compiler directive, it
102modifies its internal grammar to interpret :func:`print` as a function.  This
103change can also be enabled manually with the :option:`!-p` flag.  Use
104:option:`!-p` to run fixers on code that already has had its print statements
105converted.
106
107The :option:`!-o` or :option:`!--output-dir` option allows specification of an
108alternate directory for processed output files to be written to.  The
109:option:`!-n` flag is required when using this as backup files do not make sense
110when not overwriting the input files.
111
112.. versionadded:: 3.2.3
113   The :option:`!-o` option was added.
114
115The :option:`!-W` or :option:`!--write-unchanged-files` flag tells 2to3 to always
116write output files even if no changes were required to the file.  This is most
117useful with :option:`!-o` so that an entire Python source tree is copied with
118translation from one directory to another.
119This option implies the :option:`!-w` flag as it would not make sense otherwise.
120
121.. versionadded:: 3.2.3
122   The :option:`!-W` flag was added.
123
124The :option:`!--add-suffix` option specifies a string to append to all output
125filenames.  The :option:`!-n` flag is required when specifying this as backups
126are not necessary when writing to different filenames.  Example:
127
128.. code-block:: shell-session
129
130   $ 2to3 -n -W --add-suffix=3 example.py
131
132Will cause a converted file named ``example.py3`` to be written.
133
134.. versionadded:: 3.2.3
135   The :option:`!--add-suffix` option was added.
136
137To translate an entire project from one directory tree to another use:
138
139.. code-block:: shell-session
140
141   $ 2to3 --output-dir=python3-version/mycode -W -n python2-version/mycode
142
143
144.. _2to3-fixers:
145
146Fixers
147------
148
149Each step of transforming code is encapsulated in a fixer.  The command ``2to3
150-l`` lists them.  As :ref:`documented above <2to3-using>`, each can be turned on
151and off individually.  They are described here in more detail.
152
153
154.. 2to3fixer:: apply
155
156   Removes usage of :func:`apply`.  For example ``apply(function, *args,
157   **kwargs)`` is converted to ``function(*args, **kwargs)``.
158
159.. 2to3fixer:: asserts
160
161   Replaces deprecated :mod:`unittest` method names with the correct ones.
162
163   ================================  ==========================================
164   From                              To
165   ================================  ==========================================
166   ``failUnlessEqual(a, b)``         :meth:`assertEqual(a, b)
167                                     <unittest.TestCase.assertEqual>`
168   ``assertEquals(a, b)``            :meth:`assertEqual(a, b)
169                                     <unittest.TestCase.assertEqual>`
170   ``failIfEqual(a, b)``             :meth:`assertNotEqual(a, b)
171                                     <unittest.TestCase.assertNotEqual>`
172   ``assertNotEquals(a, b)``         :meth:`assertNotEqual(a, b)
173                                     <unittest.TestCase.assertNotEqual>`
174   ``failUnless(a)``                 :meth:`assertTrue(a)
175                                     <unittest.TestCase.assertTrue>`
176   ``assert_(a)``                    :meth:`assertTrue(a)
177                                     <unittest.TestCase.assertTrue>`
178   ``failIf(a)``                     :meth:`assertFalse(a)
179                                     <unittest.TestCase.assertFalse>`
180   ``failUnlessRaises(exc, cal)``    :meth:`assertRaises(exc, cal)
181                                     <unittest.TestCase.assertRaises>`
182   ``failUnlessAlmostEqual(a, b)``   :meth:`assertAlmostEqual(a, b)
183                                     <unittest.TestCase.assertAlmostEqual>`
184   ``assertAlmostEquals(a, b)``      :meth:`assertAlmostEqual(a, b)
185                                     <unittest.TestCase.assertAlmostEqual>`
186   ``failIfAlmostEqual(a, b)``       :meth:`assertNotAlmostEqual(a, b)
187                                     <unittest.TestCase.assertNotAlmostEqual>`
188   ``assertNotAlmostEquals(a, b)``   :meth:`assertNotAlmostEqual(a, b)
189                                     <unittest.TestCase.assertNotAlmostEqual>`
190   ================================  ==========================================
191
192.. 2to3fixer:: basestring
193
194   Converts :class:`basestring` to :class:`str`.
195
196.. 2to3fixer:: buffer
197
198   Converts :class:`buffer` to :class:`memoryview`.  This fixer is optional
199   because the :class:`memoryview` API is similar but not exactly the same as
200   that of :class:`buffer`.
201
202.. 2to3fixer:: dict
203
204   Fixes dictionary iteration methods.  :meth:`dict.iteritems` is converted to
205   :meth:`dict.items`, :meth:`dict.iterkeys` to :meth:`dict.keys`, and
206   :meth:`dict.itervalues` to :meth:`dict.values`.  Similarly,
207   :meth:`dict.viewitems`, :meth:`dict.viewkeys` and :meth:`dict.viewvalues` are
208   converted respectively to :meth:`dict.items`, :meth:`dict.keys` and
209   :meth:`dict.values`.  It also wraps existing usages of :meth:`dict.items`,
210   :meth:`dict.keys`, and :meth:`dict.values` in a call to :class:`list`.
211
212.. 2to3fixer:: except
213
214   Converts ``except X, T`` to ``except X as T``.
215
216.. 2to3fixer:: exec
217
218   Converts the ``exec`` statement to the :func:`exec` function.
219
220.. 2to3fixer:: execfile
221
222   Removes usage of :func:`execfile`.  The argument to :func:`execfile` is
223   wrapped in calls to :func:`open`, :func:`compile`, and :func:`exec`.
224
225.. 2to3fixer:: exitfunc
226
227   Changes assignment of :attr:`sys.exitfunc` to use of the :mod:`atexit`
228   module.
229
230.. 2to3fixer:: filter
231
232   Wraps :func:`filter` usage in a :class:`list` call.
233
234.. 2to3fixer:: funcattrs
235
236   Fixes function attributes that have been renamed.  For example,
237   ``my_function.func_closure`` is converted to ``my_function.__closure__``.
238
239.. 2to3fixer:: future
240
241   Removes ``from __future__ import new_feature`` statements.
242
243.. 2to3fixer:: getcwdu
244
245   Renames :func:`os.getcwdu` to :func:`os.getcwd`.
246
247.. 2to3fixer:: has_key
248
249   Changes ``dict.has_key(key)`` to ``key in dict``.
250
251.. 2to3fixer:: idioms
252
253   This optional fixer performs several transformations that make Python code
254   more idiomatic.  Type comparisons like ``type(x) is SomeClass`` and
255   ``type(x) == SomeClass`` are converted to ``isinstance(x, SomeClass)``.
256   ``while 1`` becomes ``while True``.  This fixer also tries to make use of
257   :func:`sorted` in appropriate places.  For example, this block ::
258
259       L = list(some_iterable)
260       L.sort()
261
262   is changed to ::
263
264      L = sorted(some_iterable)
265
266.. 2to3fixer:: import
267
268   Detects sibling imports and converts them to relative imports.
269
270.. 2to3fixer:: imports
271
272   Handles module renames in the standard library.
273
274.. 2to3fixer:: imports2
275
276   Handles other modules renames in the standard library.  It is separate from
277   the :2to3fixer:`imports` fixer only because of technical limitations.
278
279.. 2to3fixer:: input
280
281   Converts ``input(prompt)`` to ``eval(input(prompt))``.
282
283.. 2to3fixer:: intern
284
285   Converts :func:`intern` to :func:`sys.intern`.
286
287.. 2to3fixer:: isinstance
288
289   Fixes duplicate types in the second argument of :func:`isinstance`.  For
290   example, ``isinstance(x, (int, int))`` is converted to ``isinstance(x,
291   int)`` and ``isinstance(x, (int, float, int))`` is converted to
292   ``isinstance(x, (int, float))``.
293
294.. 2to3fixer:: itertools_imports
295
296   Removes imports of :func:`itertools.ifilter`, :func:`itertools.izip`, and
297   :func:`itertools.imap`.  Imports of :func:`itertools.ifilterfalse` are also
298   changed to :func:`itertools.filterfalse`.
299
300.. 2to3fixer:: itertools
301
302   Changes usage of :func:`itertools.ifilter`, :func:`itertools.izip`, and
303   :func:`itertools.imap` to their built-in equivalents.
304   :func:`itertools.ifilterfalse` is changed to :func:`itertools.filterfalse`.
305
306.. 2to3fixer:: long
307
308   Renames :class:`long` to :class:`int`.
309
310.. 2to3fixer:: map
311
312   Wraps :func:`map` in a :class:`list` call.  It also changes ``map(None, x)``
313   to ``list(x)``.  Using ``from future_builtins import map`` disables this
314   fixer.
315
316.. 2to3fixer:: metaclass
317
318   Converts the old metaclass syntax (``__metaclass__ = Meta`` in the class
319   body) to the new (``class X(metaclass=Meta)``).
320
321.. 2to3fixer:: methodattrs
322
323   Fixes old method attribute names.  For example, ``meth.im_func`` is converted
324   to ``meth.__func__``.
325
326.. 2to3fixer:: ne
327
328   Converts the old not-equal syntax, ``<>``, to ``!=``.
329
330.. 2to3fixer:: next
331
332   Converts the use of iterator's :meth:`~iterator.next` methods to the
333   :func:`next` function.  It also renames :meth:`next` methods to
334   :meth:`~iterator.__next__`.
335
336.. 2to3fixer:: nonzero
337
338   Renames :meth:`__nonzero__` to :meth:`~object.__bool__`.
339
340.. 2to3fixer:: numliterals
341
342   Converts octal literals into the new syntax.
343
344.. 2to3fixer:: operator
345
346   Converts calls to various functions in the :mod:`operator` module to other,
347   but equivalent, function calls.  When needed, the appropriate ``import``
348   statements are added, e.g. ``import collections.abc``.  The following mapping
349   are made:
350
351   ==================================  =============================================
352   From                                To
353   ==================================  =============================================
354   ``operator.isCallable(obj)``        ``callable(obj)``
355   ``operator.sequenceIncludes(obj)``  ``operator.contains(obj)``
356   ``operator.isSequenceType(obj)``    ``isinstance(obj, collections.abc.Sequence)``
357   ``operator.isMappingType(obj)``     ``isinstance(obj, collections.abc.Mapping)``
358   ``operator.isNumberType(obj)``      ``isinstance(obj, numbers.Number)``
359   ``operator.repeat(obj, n)``         ``operator.mul(obj, n)``
360   ``operator.irepeat(obj, n)``        ``operator.imul(obj, n)``
361   ==================================  =============================================
362
363.. 2to3fixer:: paren
364
365   Add extra parenthesis where they are required in list comprehensions.  For
366   example, ``[x for x in 1, 2]`` becomes ``[x for x in (1, 2)]``.
367
368.. 2to3fixer:: print
369
370   Converts the ``print`` statement to the :func:`print` function.
371
372.. 2to3fixer:: raise
373
374   Converts ``raise E, V`` to ``raise E(V)``, and ``raise E, V, T`` to ``raise
375   E(V).with_traceback(T)``.  If ``E`` is a tuple, the translation will be
376   incorrect because substituting tuples for exceptions has been removed in 3.0.
377
378.. 2to3fixer:: raw_input
379
380   Converts :func:`raw_input` to :func:`input`.
381
382.. 2to3fixer:: reduce
383
384   Handles the move of :func:`reduce` to :func:`functools.reduce`.
385
386.. 2to3fixer:: reload
387
388   Converts :func:`reload` to :func:`importlib.reload`.
389
390.. 2to3fixer:: renames
391
392   Changes :data:`sys.maxint` to :data:`sys.maxsize`.
393
394.. 2to3fixer:: repr
395
396   Replaces backtick repr with the :func:`repr` function.
397
398.. 2to3fixer:: set_literal
399
400   Replaces use of the :class:`set` constructor with set literals.  This fixer
401   is optional.
402
403.. 2to3fixer:: standarderror
404
405   Renames :exc:`StandardError` to :exc:`Exception`.
406
407.. 2to3fixer:: sys_exc
408
409   Changes the deprecated :data:`sys.exc_value`, :data:`sys.exc_type`,
410   :data:`sys.exc_traceback` to use :func:`sys.exc_info`.
411
412.. 2to3fixer:: throw
413
414   Fixes the API change in generator's :meth:`throw` method.
415
416.. 2to3fixer:: tuple_params
417
418   Removes implicit tuple parameter unpacking.  This fixer inserts temporary
419   variables.
420
421.. 2to3fixer:: types
422
423   Fixes code broken from the removal of some members in the :mod:`types`
424   module.
425
426.. 2to3fixer:: unicode
427
428   Renames :class:`unicode` to :class:`str`.
429
430.. 2to3fixer:: urllib
431
432   Handles the rename of :mod:`urllib` and :mod:`urllib2` to the :mod:`urllib`
433   package.
434
435.. 2to3fixer:: ws_comma
436
437   Removes excess whitespace from comma separated items.  This fixer is
438   optional.
439
440.. 2to3fixer:: xrange
441
442   Renames :func:`xrange` to :func:`range` and wraps existing :func:`range`
443   calls with :class:`list`.
444
445.. 2to3fixer:: xreadlines
446
447   Changes ``for x in file.xreadlines()`` to ``for x in file``.
448
449.. 2to3fixer:: zip
450
451   Wraps :func:`zip` usage in a :class:`list` call.  This is disabled when
452   ``from future_builtins import zip`` appears.
453
454
455:mod:`lib2to3` - 2to3's library
456-------------------------------
457
458.. module:: lib2to3
459   :synopsis: The 2to3 library
460
461.. moduleauthor:: Guido van Rossum
462.. moduleauthor:: Collin Winter
463.. moduleauthor:: Benjamin Peterson <benjamin@python.org>
464
465**Source code:** :source:`Lib/lib2to3/`
466
467--------------
468
469.. note::
470
471   The :mod:`lib2to3` API should be considered unstable and may change
472   drastically in the future.
473
474.. XXX What is the public interface anyway?
475