Home | History | Annotate | Download | only in library
      1 .. _2to3-reference:
      2 
      3 2to3 - Automated Python 2 to 3 code translation
      4 ===============================================
      5 
      6 .. sectionauthor:: Benjamin Peterson <benjamin (a] python.org>
      7 
      8 2to3 is a Python program that reads Python 2.x source code and applies a series
      9 of *fixers* to transform it into valid Python 3.x code.  The standard library
     10 contains a rich set of fixers that will handle almost all code.  2to3 supporting
     11 library :mod:`lib2to3` is, however, a flexible and generic library, so it is
     12 possible to write your own fixers for 2to3.  :mod:`lib2to3` could also be
     13 adapted to custom applications in which Python code needs to be edited
     14 automatically.
     15 
     16 
     17 .. _2to3-using:
     18 
     19 Using 2to3
     20 ----------
     21 
     22 2to3 will usually be installed with the Python interpreter as a script.  It is
     23 also located in the :file:`Tools/scripts` directory of the Python root.
     24 
     25 2to3's basic arguments are a list of files or directories to transform.  The
     26 directories are recursively traversed for Python sources.
     27 
     28 Here 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 
     36 It 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 
     42 A diff against the original source file is printed.  2to3 can also write the
     43 needed modifications right back to the source file.  (A backup of the original
     44 file is made unless :option:`!-n` is also given.)  Writing the changes back is
     45 enabled with the :option:`!-w` flag:
     46 
     47 .. code-block:: shell-session
     48 
     49    $ 2to3 -w example.py
     50 
     51 After 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 
     59 Comments and exact indentation are preserved throughout the translation process.
     60 
     61 By 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
     63 can be given with :option:`!-f`.  Likewise the :option:`!-x` explicitly disables a
     64 fixer.  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 
     70 This command runs every fixer except the ``apply`` fixer:
     71 
     72 .. code-block:: shell-session
     73 
     74    $ 2to3 -x apply example.py
     75 
     76 Some fixers are *explicit*, meaning they aren't run by default and must be
     77 listed on the command line to be run.  Here, in addition to the default fixers,
     78 the ``idioms`` fixer is run:
     79 
     80 .. code-block:: shell-session
     81 
     82    $ 2to3 -f all -f idioms example.py
     83 
     84 Notice how passing ``all`` enables all default fixers.
     85 
     86 Sometimes 2to3 will find a place in your source code that needs to be changed,
     87 but 2to3 cannot fix automatically.  In this case, 2to3 will print a warning
     88 beneath the diff for a file.  You should address the warning in order to have
     89 compliant 3.x code.
     90 
     91 2to3 can also refactor doctests.  To enable this mode, use the :option:`!-d`
     92 flag.  Note that *only* doctests will be refactored.  This also doesn't require
     93 the module to be valid Python.  For example, doctest like examples in a reST
     94 document could also be refactored with this option.
     95 
     96 The :option:`!-v` option enables output of more information on the translation
     97 process.
     98 
     99 Since some print statements can be parsed as function calls or statements, 2to3
    100 cannot always read files containing the print function.  When 2to3 detects the
    101 presence of the ``from __future__ import print_function`` compiler directive, it
    102 modifies its internal grammar to interpret :func:`print` as a function.  This
    103 change 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
    105 converted.
    106 
    107 The :option:`!-o` or :option:`!--output-dir` option allows specification of an
    108 alternate 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
    110 when not overwriting the input files.
    111 
    112 .. versionadded:: 3.2.3
    113    The :option:`!-o` option was added.
    114 
    115 The :option:`!-W` or :option:`!--write-unchanged-files` flag tells 2to3 to always
    116 write output files even if no changes were required to the file.  This is most
    117 useful with :option:`!-o` so that an entire Python source tree is copied with
    118 translation from one directory to another.
    119 This 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 
    124 The :option:`!--add-suffix` option specifies a string to append to all output
    125 filenames.  The :option:`!-n` flag is required when specifying this as backups
    126 are 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 
    132 Will 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 
    137 To 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 
    146 Fixers
    147 ------
    148 
    149 Each 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
    151 and 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 (a] 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