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