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