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