| .. _2to3-reference: | 
 |  | 
 | 2to3 - Automated Python 2 to 3 code translation | 
 | =============================================== | 
 |  | 
 | .. sectionauthor:: Benjamin Peterson <benjamin@python.org> | 
 |  | 
 | 2to3 is a Python program that reads Python 2.x source code and applies a series | 
 | of *fixers* to transform it into valid Python 3.x code.  The standard library | 
 | contains a rich set of fixers that will handle almost all code.  2to3 supporting | 
 | library :mod:`lib2to3` is, however, a flexible and generic library, so it is | 
 | possible to write your own fixers for 2to3.  :mod:`lib2to3` could also be | 
 | adapted to custom applications in which Python code needs to be edited | 
 | automatically. | 
 |  | 
 |  | 
 | .. _2to3-using: | 
 |  | 
 | Using 2to3 | 
 | ---------- | 
 |  | 
 | 2to3 will usually be installed with the Python interpreter as a script.  It is | 
 | also located in the :file:`Tools/scripts` directory of the Python root. | 
 |  | 
 | 2to3's basic arguments are a list of files or directories to transform.  The | 
 | directories are recursively traversed for Python sources. | 
 |  | 
 | Here is a sample Python 2.x source file, :file:`example.py`:: | 
 |  | 
 |    def greet(name): | 
 |        print "Hello, {0}!".format(name) | 
 |    print "What's your name?" | 
 |    name = raw_input() | 
 |    greet(name) | 
 |  | 
 | It can be converted to Python 3.x code via 2to3 on the command line: | 
 |  | 
 | .. code-block:: shell-session | 
 |  | 
 |    $ 2to3 example.py | 
 |  | 
 | A diff against the original source file is printed.  2to3 can also write the | 
 | needed modifications right back to the source file.  (A backup of the original | 
 | file is made unless :option:`!-n` is also given.)  Writing the changes back is | 
 | enabled with the :option:`!-w` flag: | 
 |  | 
 | .. code-block:: shell-session | 
 |  | 
 |    $ 2to3 -w example.py | 
 |  | 
 | After transformation, :file:`example.py` looks like this:: | 
 |  | 
 |    def greet(name): | 
 |        print("Hello, {0}!".format(name)) | 
 |    print("What's your name?") | 
 |    name = input() | 
 |    greet(name) | 
 |  | 
 | Comments and exact indentation are preserved throughout the translation process. | 
 |  | 
 | By default, 2to3 runs a set of :ref:`predefined fixers <2to3-fixers>`.  The | 
 | :option:`!-l` flag lists all available fixers.  An explicit set of fixers to run | 
 | can be given with :option:`!-f`.  Likewise the :option:`!-x` explicitly disables a | 
 | fixer.  The following example runs only the ``imports`` and ``has_key`` fixers: | 
 |  | 
 | .. code-block:: shell-session | 
 |  | 
 |    $ 2to3 -f imports -f has_key example.py | 
 |  | 
 | This command runs every fixer except the ``apply`` fixer: | 
 |  | 
 | .. code-block:: shell-session | 
 |  | 
 |    $ 2to3 -x apply example.py | 
 |  | 
 | Some fixers are *explicit*, meaning they aren't run by default and must be | 
 | listed on the command line to be run.  Here, in addition to the default fixers, | 
 | the ``idioms`` fixer is run: | 
 |  | 
 | .. code-block:: shell-session | 
 |  | 
 |    $ 2to3 -f all -f idioms example.py | 
 |  | 
 | Notice how passing ``all`` enables all default fixers. | 
 |  | 
 | Sometimes 2to3 will find a place in your source code that needs to be changed, | 
 | but 2to3 cannot fix automatically.  In this case, 2to3 will print a warning | 
 | beneath the diff for a file.  You should address the warning in order to have | 
 | compliant 3.x code. | 
 |  | 
 | 2to3 can also refactor doctests.  To enable this mode, use the :option:`!-d` | 
 | flag.  Note that *only* doctests will be refactored.  This also doesn't require | 
 | the module to be valid Python.  For example, doctest like examples in a reST | 
 | document could also be refactored with this option. | 
 |  | 
 | The :option:`!-v` option enables output of more information on the translation | 
 | process. | 
 |  | 
 | Since some print statements can be parsed as function calls or statements, 2to3 | 
 | cannot always read files containing the print function.  When 2to3 detects the | 
 | presence of the ``from __future__ import print_function`` compiler directive, it | 
 | modifies its internal grammar to interpret :func:`print` as a function.  This | 
 | change can also be enabled manually with the :option:`!-p` flag.  Use | 
 | :option:`!-p` to run fixers on code that already has had its print statements | 
 | converted. | 
 |  | 
 | The :option:`!-o` or :option:`!--output-dir` option allows specification of an | 
 | alternate directory for processed output files to be written to.  The | 
 | :option:`!-n` flag is required when using this as backup files do not make sense | 
 | when not overwriting the input files. | 
 |  | 
 | .. versionadded:: 3.2.3 | 
 |    The :option:`!-o` option was added. | 
 |  | 
 | The :option:`!-W` or :option:`!--write-unchanged-files` flag tells 2to3 to always | 
 | write output files even if no changes were required to the file.  This is most | 
 | useful with :option:`!-o` so that an entire Python source tree is copied with | 
 | translation from one directory to another. | 
 | This option implies the :option:`!-w` flag as it would not make sense otherwise. | 
 |  | 
 | .. versionadded:: 3.2.3 | 
 |    The :option:`!-W` flag was added. | 
 |  | 
 | The :option:`!--add-suffix` option specifies a string to append to all output | 
 | filenames.  The :option:`!-n` flag is required when specifying this as backups | 
 | are not necessary when writing to different filenames.  Example: | 
 |  | 
 | .. code-block:: shell-session | 
 |  | 
 |    $ 2to3 -n -W --add-suffix=3 example.py | 
 |  | 
 | Will cause a converted file named ``example.py3`` to be written. | 
 |  | 
 | .. versionadded:: 3.2.3 | 
 |    The :option:`!--add-suffix` option was added. | 
 |  | 
 | To translate an entire project from one directory tree to another use: | 
 |  | 
 | .. code-block:: shell-session | 
 |  | 
 |    $ 2to3 --output-dir=python3-version/mycode -W -n python2-version/mycode | 
 |  | 
 |  | 
 | .. _2to3-fixers: | 
 |  | 
 | Fixers | 
 | ------ | 
 |  | 
 | Each step of transforming code is encapsulated in a fixer.  The command ``2to3 | 
 | -l`` lists them.  As :ref:`documented above <2to3-using>`, each can be turned on | 
 | and off individually.  They are described here in more detail. | 
 |  | 
 |  | 
 | .. 2to3fixer:: apply | 
 |  | 
 |    Removes usage of :func:`apply`.  For example ``apply(function, *args, | 
 |    **kwargs)`` is converted to ``function(*args, **kwargs)``. | 
 |  | 
 | .. 2to3fixer:: asserts | 
 |  | 
 |    Replaces deprecated :mod:`unittest` method names with the correct ones. | 
 |  | 
 |    ================================  ========================================== | 
 |    From                              To | 
 |    ================================  ========================================== | 
 |    ``failUnlessEqual(a, b)``         :meth:`assertEqual(a, b) | 
 |                                      <unittest.TestCase.assertEqual>` | 
 |    ``assertEquals(a, b)``            :meth:`assertEqual(a, b) | 
 |                                      <unittest.TestCase.assertEqual>` | 
 |    ``failIfEqual(a, b)``             :meth:`assertNotEqual(a, b) | 
 |                                      <unittest.TestCase.assertNotEqual>` | 
 |    ``assertNotEquals(a, b)``         :meth:`assertNotEqual(a, b) | 
 |                                      <unittest.TestCase.assertNotEqual>` | 
 |    ``failUnless(a)``                 :meth:`assertTrue(a) | 
 |                                      <unittest.TestCase.assertTrue>` | 
 |    ``assert_(a)``                    :meth:`assertTrue(a) | 
 |                                      <unittest.TestCase.assertTrue>` | 
 |    ``failIf(a)``                     :meth:`assertFalse(a) | 
 |                                      <unittest.TestCase.assertFalse>` | 
 |    ``failUnlessRaises(exc, cal)``    :meth:`assertRaises(exc, cal) | 
 |                                      <unittest.TestCase.assertRaises>` | 
 |    ``failUnlessAlmostEqual(a, b)``   :meth:`assertAlmostEqual(a, b) | 
 |                                      <unittest.TestCase.assertAlmostEqual>` | 
 |    ``assertAlmostEquals(a, b)``      :meth:`assertAlmostEqual(a, b) | 
 |                                      <unittest.TestCase.assertAlmostEqual>` | 
 |    ``failIfAlmostEqual(a, b)``       :meth:`assertNotAlmostEqual(a, b) | 
 |                                      <unittest.TestCase.assertNotAlmostEqual>` | 
 |    ``assertNotAlmostEquals(a, b)``   :meth:`assertNotAlmostEqual(a, b) | 
 |                                      <unittest.TestCase.assertNotAlmostEqual>` | 
 |    ================================  ========================================== | 
 |  | 
 | .. 2to3fixer:: basestring | 
 |  | 
 |    Converts :class:`basestring` to :class:`str`. | 
 |  | 
 | .. 2to3fixer:: buffer | 
 |  | 
 |    Converts :class:`buffer` to :class:`memoryview`.  This fixer is optional | 
 |    because the :class:`memoryview` API is similar but not exactly the same as | 
 |    that of :class:`buffer`. | 
 |  | 
 | .. 2to3fixer:: callable | 
 |  | 
 |    Converts ``callable(x)`` to ``isinstance(x, collections.Callable)``, adding | 
 |    an import to :mod:`collections` if needed. Note ``callable(x)`` has returned | 
 |    in Python 3.2, so if you do not intend to support Python 3.1, you can disable | 
 |    this fixer. | 
 |  | 
 | .. 2to3fixer:: dict | 
 |  | 
 |    Fixes dictionary iteration methods.  :meth:`dict.iteritems` is converted to | 
 |    :meth:`dict.items`, :meth:`dict.iterkeys` to :meth:`dict.keys`, and | 
 |    :meth:`dict.itervalues` to :meth:`dict.values`.  Similarly, | 
 |    :meth:`dict.viewitems`, :meth:`dict.viewkeys` and :meth:`dict.viewvalues` are | 
 |    converted respectively to :meth:`dict.items`, :meth:`dict.keys` and | 
 |    :meth:`dict.values`.  It also wraps existing usages of :meth:`dict.items`, | 
 |    :meth:`dict.keys`, and :meth:`dict.values` in a call to :class:`list`. | 
 |  | 
 | .. 2to3fixer:: except | 
 |  | 
 |    Converts ``except X, T`` to ``except X as T``. | 
 |  | 
 | .. 2to3fixer:: exec | 
 |  | 
 |    Converts the ``exec`` statement to the :func:`exec` function. | 
 |  | 
 | .. 2to3fixer:: execfile | 
 |  | 
 |    Removes usage of :func:`execfile`.  The argument to :func:`execfile` is | 
 |    wrapped in calls to :func:`open`, :func:`compile`, and :func:`exec`. | 
 |  | 
 | .. 2to3fixer:: exitfunc | 
 |  | 
 |    Changes assignment of :attr:`sys.exitfunc` to use of the :mod:`atexit` | 
 |    module. | 
 |  | 
 | .. 2to3fixer:: filter | 
 |  | 
 |    Wraps :func:`filter` usage in a :class:`list` call. | 
 |  | 
 | .. 2to3fixer:: funcattrs | 
 |  | 
 |    Fixes function attributes that have been renamed.  For example, | 
 |    ``my_function.func_closure`` is converted to ``my_function.__closure__``. | 
 |  | 
 | .. 2to3fixer:: future | 
 |  | 
 |    Removes ``from __future__ import new_feature`` statements. | 
 |  | 
 | .. 2to3fixer:: getcwdu | 
 |  | 
 |    Renames :func:`os.getcwdu` to :func:`os.getcwd`. | 
 |  | 
 | .. 2to3fixer:: has_key | 
 |  | 
 |    Changes ``dict.has_key(key)`` to ``key in dict``. | 
 |  | 
 | .. 2to3fixer:: idioms | 
 |  | 
 |    This optional fixer performs several transformations that make Python code | 
 |    more idiomatic.  Type comparisons like ``type(x) is SomeClass`` and | 
 |    ``type(x) == SomeClass`` are converted to ``isinstance(x, SomeClass)``. | 
 |    ``while 1`` becomes ``while True``.  This fixer also tries to make use of | 
 |    :func:`sorted` in appropriate places.  For example, this block :: | 
 |  | 
 |        L = list(some_iterable) | 
 |        L.sort() | 
 |  | 
 |    is changed to :: | 
 |  | 
 |       L = sorted(some_iterable) | 
 |  | 
 | .. 2to3fixer:: import | 
 |  | 
 |    Detects sibling imports and converts them to relative imports. | 
 |  | 
 | .. 2to3fixer:: imports | 
 |  | 
 |    Handles module renames in the standard library. | 
 |  | 
 | .. 2to3fixer:: imports2 | 
 |  | 
 |    Handles other modules renames in the standard library.  It is separate from | 
 |    the :2to3fixer:`imports` fixer only because of technical limitations. | 
 |  | 
 | .. 2to3fixer:: input | 
 |  | 
 |    Converts ``input(prompt)`` to ``eval(input(prompt))``. | 
 |  | 
 | .. 2to3fixer:: intern | 
 |  | 
 |    Converts :func:`intern` to :func:`sys.intern`. | 
 |  | 
 | .. 2to3fixer:: isinstance | 
 |  | 
 |    Fixes duplicate types in the second argument of :func:`isinstance`.  For | 
 |    example, ``isinstance(x, (int, int))`` is converted to ``isinstance(x, | 
 |    (int))``. | 
 |  | 
 | .. 2to3fixer:: itertools_imports | 
 |  | 
 |    Removes imports of :func:`itertools.ifilter`, :func:`itertools.izip`, and | 
 |    :func:`itertools.imap`.  Imports of :func:`itertools.ifilterfalse` are also | 
 |    changed to :func:`itertools.filterfalse`. | 
 |  | 
 | .. 2to3fixer:: itertools | 
 |  | 
 |    Changes usage of :func:`itertools.ifilter`, :func:`itertools.izip`, and | 
 |    :func:`itertools.imap` to their built-in equivalents. | 
 |    :func:`itertools.ifilterfalse` is changed to :func:`itertools.filterfalse`. | 
 |  | 
 | .. 2to3fixer:: long | 
 |  | 
 |    Renames :class:`long` to :class:`int`. | 
 |  | 
 | .. 2to3fixer:: map | 
 |  | 
 |    Wraps :func:`map` in a :class:`list` call.  It also changes ``map(None, x)`` | 
 |    to ``list(x)``.  Using ``from future_builtins import map`` disables this | 
 |    fixer. | 
 |  | 
 | .. 2to3fixer:: metaclass | 
 |  | 
 |    Converts the old metaclass syntax (``__metaclass__ = Meta`` in the class | 
 |    body) to the new (``class X(metaclass=Meta)``). | 
 |  | 
 | .. 2to3fixer:: methodattrs | 
 |  | 
 |    Fixes old method attribute names.  For example, ``meth.im_func`` is converted | 
 |    to ``meth.__func__``. | 
 |  | 
 | .. 2to3fixer:: ne | 
 |  | 
 |    Converts the old not-equal syntax, ``<>``, to ``!=``. | 
 |  | 
 | .. 2to3fixer:: next | 
 |  | 
 |    Converts the use of iterator's :meth:`~iterator.next` methods to the | 
 |    :func:`next` function.  It also renames :meth:`next` methods to | 
 |    :meth:`~iterator.__next__`. | 
 |  | 
 | .. 2to3fixer:: nonzero | 
 |  | 
 |    Renames :meth:`__nonzero__` to :meth:`~object.__bool__`. | 
 |  | 
 | .. 2to3fixer:: numliterals | 
 |  | 
 |    Converts octal literals into the new syntax. | 
 |  | 
 | .. 2to3fixer:: operator | 
 |  | 
 |    Converts calls to various functions in the :mod:`operator` module to other, | 
 |    but equivalent, function calls.  When needed, the appropriate ``import`` | 
 |    statements are added, e.g. ``import collections``.  The following mapping | 
 |    are made: | 
 |  | 
 |    ==================================  ========================================== | 
 |    From                                To | 
 |    ==================================  ========================================== | 
 |    ``operator.isCallable(obj)``        ``hasattr(obj, '__call__')`` | 
 |    ``operator.sequenceIncludes(obj)``  ``operator.contains(obj)`` | 
 |    ``operator.isSequenceType(obj)``    ``isinstance(obj, collections.Sequence)`` | 
 |    ``operator.isMappingType(obj)``     ``isinstance(obj, collections.Mapping)`` | 
 |    ``operator.isNumberType(obj)``      ``isinstance(obj, numbers.Number)`` | 
 |    ``operator.repeat(obj, n)``         ``operator.mul(obj, n)`` | 
 |    ``operator.irepeat(obj, n)``        ``operator.imul(obj, n)`` | 
 |    ==================================  ========================================== | 
 |  | 
 | .. 2to3fixer:: paren | 
 |  | 
 |    Add extra parenthesis where they are required in list comprehensions.  For | 
 |    example, ``[x for x in 1, 2]`` becomes ``[x for x in (1, 2)]``. | 
 |  | 
 | .. 2to3fixer:: print | 
 |  | 
 |    Converts the ``print`` statement to the :func:`print` function. | 
 |  | 
 | .. 2to3fixer:: raise | 
 |  | 
 |    Converts ``raise E, V`` to ``raise E(V)``, and ``raise E, V, T`` to ``raise | 
 |    E(V).with_traceback(T)``.  If ``E`` is a tuple, the translation will be | 
 |    incorrect because substituting tuples for exceptions has been removed in 3.0. | 
 |  | 
 | .. 2to3fixer:: raw_input | 
 |  | 
 |    Converts :func:`raw_input` to :func:`input`. | 
 |  | 
 | .. 2to3fixer:: reduce | 
 |  | 
 |    Handles the move of :func:`reduce` to :func:`functools.reduce`. | 
 |  | 
 | .. 2to3fixer:: reload | 
 |  | 
 |    Converts :func:`reload` to :func:`imp.reload`. | 
 |  | 
 | .. 2to3fixer:: renames | 
 |  | 
 |    Changes :data:`sys.maxint` to :data:`sys.maxsize`. | 
 |  | 
 | .. 2to3fixer:: repr | 
 |  | 
 |    Replaces backtick repr with the :func:`repr` function. | 
 |  | 
 | .. 2to3fixer:: set_literal | 
 |  | 
 |    Replaces use of the :class:`set` constructor with set literals.  This fixer | 
 |    is optional. | 
 |  | 
 | .. 2to3fixer:: standarderror | 
 |  | 
 |    Renames :exc:`StandardError` to :exc:`Exception`. | 
 |  | 
 | .. 2to3fixer:: sys_exc | 
 |  | 
 |    Changes the deprecated :data:`sys.exc_value`, :data:`sys.exc_type`, | 
 |    :data:`sys.exc_traceback` to use :func:`sys.exc_info`. | 
 |  | 
 | .. 2to3fixer:: throw | 
 |  | 
 |    Fixes the API change in generator's :meth:`throw` method. | 
 |  | 
 | .. 2to3fixer:: tuple_params | 
 |  | 
 |    Removes implicit tuple parameter unpacking.  This fixer inserts temporary | 
 |    variables. | 
 |  | 
 | .. 2to3fixer:: types | 
 |  | 
 |    Fixes code broken from the removal of some members in the :mod:`types` | 
 |    module. | 
 |  | 
 | .. 2to3fixer:: unicode | 
 |  | 
 |    Renames :class:`unicode` to :class:`str`. | 
 |  | 
 | .. 2to3fixer:: urllib | 
 |  | 
 |    Handles the rename of :mod:`urllib` and :mod:`urllib2` to the :mod:`urllib` | 
 |    package. | 
 |  | 
 | .. 2to3fixer:: ws_comma | 
 |  | 
 |    Removes excess whitespace from comma separated items.  This fixer is | 
 |    optional. | 
 |  | 
 | .. 2to3fixer:: xrange | 
 |  | 
 |    Renames :func:`xrange` to :func:`range` and wraps existing :func:`range` | 
 |    calls with :class:`list`. | 
 |  | 
 | .. 2to3fixer:: xreadlines | 
 |  | 
 |    Changes ``for x in file.xreadlines()`` to ``for x in file``. | 
 |  | 
 | .. 2to3fixer:: zip | 
 |  | 
 |    Wraps :func:`zip` usage in a :class:`list` call.  This is disabled when | 
 |    ``from future_builtins import zip`` appears. | 
 |  | 
 |  | 
 | :mod:`lib2to3` - 2to3's library | 
 | ------------------------------- | 
 |  | 
 | .. module:: lib2to3 | 
 |    :synopsis: the 2to3 library | 
 |  | 
 | .. moduleauthor:: Guido van Rossum | 
 | .. moduleauthor:: Collin Winter | 
 | .. moduleauthor:: Benjamin Peterson <benjamin@python.org> | 
 |  | 
 | **Source code:** :source:`Lib/lib2to3/` | 
 |  | 
 | -------------- | 
 |  | 
 | .. note:: | 
 |  | 
 |    The :mod:`lib2to3` API should be considered unstable and may change | 
 |    drastically in the future. | 
 |  | 
 | .. XXX What is the public interface anyway? |