• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:: 2.7.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:: 2.7.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:: 2.7.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:: callable
203
204   Converts ``callable(x)`` to ``isinstance(x, collections.Callable)``, adding
205   an import to :mod:`collections` if needed. Note ``callable(x)`` has returned
206   in Python 3.2, so if you do not intend to support Python 3.1, you can disable
207   this fixer.
208
209.. 2to3fixer:: dict
210
211   Fixes dictionary iteration methods.  :meth:`dict.iteritems` is converted to
212   :meth:`dict.items`, :meth:`dict.iterkeys` to :meth:`dict.keys`, and
213   :meth:`dict.itervalues` to :meth:`dict.values`.  Similarly,
214   :meth:`dict.viewitems`, :meth:`dict.viewkeys` and :meth:`dict.viewvalues` are
215   converted respectively to :meth:`dict.items`, :meth:`dict.keys` and
216   :meth:`dict.values`.  It also wraps existing usages of :meth:`dict.items`,
217   :meth:`dict.keys`, and :meth:`dict.values` in a call to :class:`list`.
218
219.. 2to3fixer:: except
220
221   Converts ``except X, T`` to ``except X as T``.
222
223.. 2to3fixer:: exec
224
225   Converts the :keyword:`exec` statement to the :func:`exec` function.
226
227.. 2to3fixer:: execfile
228
229   Removes usage of :func:`execfile`.  The argument to :func:`execfile` is
230   wrapped in calls to :func:`open`, :func:`compile`, and :func:`exec`.
231
232.. 2to3fixer:: exitfunc
233
234   Changes assignment of :attr:`sys.exitfunc` to use of the :mod:`atexit`
235   module.
236
237.. 2to3fixer:: filter
238
239   Wraps :func:`filter` usage in a :class:`list` call.
240
241.. 2to3fixer:: funcattrs
242
243   Fixes function attributes that have been renamed.  For example,
244   ``my_function.func_closure`` is converted to ``my_function.__closure__``.
245
246.. 2to3fixer:: future
247
248   Removes ``from __future__ import new_feature`` statements.
249
250.. 2to3fixer:: getcwdu
251
252   Renames :func:`os.getcwdu` to :func:`os.getcwd`.
253
254.. 2to3fixer:: has_key
255
256   Changes ``dict.has_key(key)`` to ``key in dict``.
257
258.. 2to3fixer:: idioms
259
260   This optional fixer performs several transformations that make Python code
261   more idiomatic.  Type comparisons like ``type(x) is SomeClass`` and
262   ``type(x) == SomeClass`` are converted to ``isinstance(x, SomeClass)``.
263   ``while 1`` becomes ``while True``.  This fixer also tries to make use of
264   :func:`sorted` in appropriate places.  For example, this block ::
265
266       L = list(some_iterable)
267       L.sort()
268
269   is changed to ::
270
271      L = sorted(some_iterable)
272
273.. 2to3fixer:: import
274
275   Detects sibling imports and converts them to relative imports.
276
277.. 2to3fixer:: imports
278
279   Handles module renames in the standard library.
280
281.. 2to3fixer:: imports2
282
283   Handles other modules renames in the standard library.  It is separate from
284   the :2to3fixer:`imports` fixer only because of technical limitations.
285
286.. 2to3fixer:: input
287
288   Converts ``input(prompt)`` to ``eval(input(prompt))``.
289
290.. 2to3fixer:: intern
291
292   Converts :func:`intern` to :func:`sys.intern`.
293
294.. 2to3fixer:: isinstance
295
296   Fixes duplicate types in the second argument of :func:`isinstance`.  For
297   example, ``isinstance(x, (int, int))`` is converted to ``isinstance(x,
298   (int))``.
299
300.. 2to3fixer:: itertools_imports
301
302   Removes imports of :func:`itertools.ifilter`, :func:`itertools.izip`, and
303   :func:`itertools.imap`.  Imports of :func:`itertools.ifilterfalse` are also
304   changed to :func:`itertools.filterfalse`.
305
306.. 2to3fixer:: itertools
307
308   Changes usage of :func:`itertools.ifilter`, :func:`itertools.izip`, and
309   :func:`itertools.imap` to their built-in equivalents.
310   :func:`itertools.ifilterfalse` is changed to :func:`itertools.filterfalse`.
311
312.. 2to3fixer:: long
313
314   Renames :class:`long` to :class:`int`.
315
316.. 2to3fixer:: map
317
318   Wraps :func:`map` in a :class:`list` call.  It also changes ``map(None, x)``
319   to ``list(x)``.  Using ``from future_builtins import map`` disables this
320   fixer.
321
322.. 2to3fixer:: metaclass
323
324   Converts the old metaclass syntax (``__metaclass__ = Meta`` in the class
325   body) to the new (``class X(metaclass=Meta)``).
326
327.. 2to3fixer:: methodattrs
328
329   Fixes old method attribute names.  For example, ``meth.im_func`` is converted
330   to ``meth.__func__``.
331
332.. 2to3fixer:: ne
333
334   Converts the old not-equal syntax, ``<>``, to ``!=``.
335
336.. 2to3fixer:: next
337
338   Converts the use of iterator's :meth:`~iterator.next` methods to the
339   :func:`next` function.  It also renames :meth:`~iterator.next` methods to
340   :meth:`~iterator.__next__`.
341
342.. 2to3fixer:: nonzero
343
344   Renames :meth:`__nonzero__` to :meth:`~object.__bool__`.
345
346.. 2to3fixer:: numliterals
347
348   Converts octal literals into the new syntax.
349
350.. 2to3fixer:: paren
351
352   Add extra parenthesis where they are required in list comprehensions.  For
353   example, ``[x for x in 1, 2]`` becomes ``[x for x in (1, 2)]``.
354
355.. 2to3fixer:: print
356
357   Converts the :keyword:`print` statement to the :func:`print` function.
358
359.. 2to3fixer:: raise
360
361   Converts ``raise E, V`` to ``raise E(V)``, and ``raise E, V, T`` to ``raise
362   E(V).with_traceback(T)``.  If ``E`` is a tuple, the translation will be
363   incorrect because substituting tuples for exceptions has been removed in Python 3.
364
365.. 2to3fixer:: raw_input
366
367   Converts :func:`raw_input` to :func:`input`.
368
369.. 2to3fixer:: reduce
370
371   Handles the move of :func:`reduce` to :func:`functools.reduce`.
372
373.. 2to3fixer:: renames
374
375   Changes :data:`sys.maxint` to :data:`sys.maxsize`.
376
377.. 2to3fixer:: repr
378
379   Replaces backtick repr with the :func:`repr` function.
380
381.. 2to3fixer:: set_literal
382
383   Replaces use of the :class:`set` constructor with set literals.  This fixer
384   is optional.
385
386.. 2to3fixer:: standarderror
387
388   Renames :exc:`StandardError` to :exc:`Exception`.
389
390.. 2to3fixer:: sys_exc
391
392   Changes the deprecated :data:`sys.exc_value`, :data:`sys.exc_type`,
393   :data:`sys.exc_traceback` to use :func:`sys.exc_info`.
394
395.. 2to3fixer:: throw
396
397   Fixes the API change in generator's :meth:`throw` method.
398
399.. 2to3fixer:: tuple_params
400
401   Removes implicit tuple parameter unpacking.  This fixer inserts temporary
402   variables.
403
404.. 2to3fixer:: types
405
406   Fixes code broken from the removal of some members in the :mod:`types`
407   module.
408
409.. 2to3fixer:: unicode
410
411   Renames :class:`unicode` to :class:`str`.
412
413.. 2to3fixer:: urllib
414
415   Handles the rename of :mod:`urllib` and :mod:`urllib2` to the :mod:`urllib`
416   package.
417
418.. 2to3fixer:: ws_comma
419
420   Removes excess whitespace from comma separated items.  This fixer is
421   optional.
422
423.. 2to3fixer:: xrange
424
425   Renames :func:`xrange` to :func:`range` and wraps existing :func:`range`
426   calls with :class:`list`.
427
428.. 2to3fixer:: xreadlines
429
430   Changes ``for x in file.xreadlines()`` to ``for x in file``.
431
432.. 2to3fixer:: zip
433
434   Wraps :func:`zip` usage in a :class:`list` call.  This is disabled when
435   ``from future_builtins import zip`` appears.
436
437
438:mod:`lib2to3` - 2to3's library
439-------------------------------
440
441.. module:: lib2to3
442   :synopsis: the 2to3 library
443.. moduleauthor:: Guido van Rossum
444.. moduleauthor:: Collin Winter
445.. moduleauthor:: Benjamin Peterson <benjamin@python.org>
446
447
448.. note::
449
450   The :mod:`lib2to3` API should be considered unstable and may change
451   drastically in the future.
452
453.. XXX What is the public interface anyway?
454