blob: 29ab06671ed257aa41951acd2b706f8c0d9f38ae [file] [log] [blame]
Benjamin Petersond6313712008-07-31 16:23:04 +00001.. _2to3-reference:
2
32to3 - Automated Python 2 to 3 code translation
4===============================================
5
Benjamin Peterson058e31e2009-01-16 03:54:08 +00006.. sectionauthor:: Benjamin Peterson <benjamin@python.org>
Benjamin Petersond6313712008-07-31 16:23:04 +00007
Benjamin Peterson8951b612008-09-03 02:27:16 +000082to3 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
Benjamin Petersonae5360b2008-09-08 23:05:23 +000010contains 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. :mod:`lib2to3` could also be
13adapted to custom applications in which Python code needs to be edited
14automatically.
Benjamin Petersond6313712008-07-31 16:23:04 +000015
16
Benjamin Petersonf91df042009-02-13 02:50:59 +000017.. _2to3-using:
18
Benjamin Petersond6313712008-07-31 16:23:04 +000019Using 2to3
20----------
21
Benjamin Petersonae5360b2008-09-08 23:05:23 +0000222to3 will usually be installed with the Python interpreter as a script. It is
23also located in the :file:`Tools/scripts` directory of the Python root.
24
252to3's basic arguments are a list of files or directories to transform. The
26directories are to recursively traversed for Python sources.
Benjamin Petersond6313712008-07-31 16:23:04 +000027
28Here 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
36It can be converted to Python 3.x code via 2to3 on the command line::
37
38 $ 2to3 example.py
39
Benjamin Petersonae5360b2008-09-08 23:05:23 +000040A diff against the original source file is printed. 2to3 can also write the
Benjamin Petersonad3d5c22009-02-26 03:38:59 +000041needed 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::
Benjamin Petersond6313712008-07-31 16:23:04 +000044
45 $ 2to3 -w example.py
46
Benjamin Petersonae5360b2008-09-08 23:05:23 +000047After transformation, :file:`example.py` looks like this::
Benjamin Petersond6313712008-07-31 16:23:04 +000048
49 def greet(name):
50 print("Hello, {0}!".format(name))
51 print("What's your name?")
52 name = input()
53 greet(name)
54
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +000055Comments and exact indentation are preserved throughout the translation process.
Benjamin Petersond6313712008-07-31 16:23:04 +000056
Benjamin Petersonf91df042009-02-13 02:50:59 +000057By 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
59can be given with :option:`-f`. Likewise the :option:`-x` explicitly disables a
60fixer. The following example runs only the ``imports`` and ``has_key`` fixers::
Benjamin Petersond6313712008-07-31 16:23:04 +000061
62 $ 2to3 -f imports -f has_key example.py
63
Benjamin Peterson206e3072008-10-19 14:07:49 +000064This command runs every fixer except the ``apply`` fixer::
65
66 $ 2to3 -x apply example.py
67
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +000068Some fixers are *explicit*, meaning they aren't run by default and must be
Benjamin Petersonae5360b2008-09-08 23:05:23 +000069listed on the command line to be run. Here, in addition to the default fixers,
70the ``idioms`` fixer is run::
Benjamin Petersond6313712008-07-31 16:23:04 +000071
72 $ 2to3 -f all -f idioms example.py
73
Benjamin Petersonae5360b2008-09-08 23:05:23 +000074Notice how passing ``all`` enables all default fixers.
Benjamin Petersond6313712008-07-31 16:23:04 +000075
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +000076Sometimes 2to3 will find a place in your source code that needs to be changed,
77but 2to3 cannot fix automatically. In this case, 2to3 will print a warning
78beneath the diff for a file. You should address the warning in order to have
79compliant 3.x code.
Benjamin Petersonae5360b2008-09-08 23:05:23 +000080
812to3 can also refactor doctests. To enable this mode, use the :option:`-d`
Benjamin Petersone9bbc8b2008-09-28 02:06:32 +000082flag. Note that *only* doctests will be refactored. This also doesn't require
83the module to be valid Python. For example, doctest like examples in a reST
84document could also be refactored with this option.
Benjamin Petersonae5360b2008-09-08 23:05:23 +000085
Benjamin Peterson206e3072008-10-19 14:07:49 +000086The :option:`-v` option enables output of more information on the translation
87process.
Benjamin Petersonae5360b2008-09-08 23:05:23 +000088
Benjamin Petersonf91df042009-02-13 02:50:59 +000089When the :option:`-p` is passed, the :2to3fixer:`print` fixer ``print`` as a
90function instead of a statement. This is useful when ``from __future__ import
91print_function`` is being used. If this option is not given, the print fixer
92will surround print calls in an extra set of parentheses because it cannot
93differentiate between the print statement with parentheses (such as ``print
94("a" + "b" + "c")``) and a true function call.
95
96
97.. _2to3-fixers:
98
99Fixers
100------
101
Georg Brandlae2dbe22009-03-13 19:04:40 +0000102Each step of transforming code is encapsulated in a fixer. The command ``2to3
Benjamin Petersonf91df042009-02-13 02:50:59 +0000103-l`` lists them. As :ref:`documented above <2to3-using>`, each can be turned on
104and off individually. They are described here in more detail.
105
106
107.. 2to3fixer:: apply
108
109 Removes usage of :func:`apply`. For example ``apply(function, *args,
110 **kwargs)`` is converted to ``function(*args, **kwargs)``.
111
112.. 2to3fixer:: basestring
113
114 Converts :class:`basestring` to :class:`str`.
115
116.. 2to3fixer:: buffer
117
118 Converts :class:`buffer` to :class:`memoryview`. This fixer is optional
119 because the :class:`memoryview` API is similar but not exactly the same as
120 that of :class:`buffer`.
121
122.. 2to3fixer:: callable
123
124 Converts ``callable(x)`` to ``hasattr(x, "__call_")``.
125
126.. 2to3fixer:: dict
127
128 Fixes dictionary iteration methods. :meth:`dict.iteritems` is converted to
129 :meth:`dict.items`, :meth:`dict.iterkeys` to :meth:`dict.keys`, and
130 :meth:`dict.itervalues` to :meth:`dict.values`. It also wraps existing
131 usages of :meth:`dict.items`, :meth:`dict.keys`, and :meth:`dict.values` in a
132 call to :class:`list`.
133
134.. 2to3fixer:: except
135
136 Converts ``except X, T`` to ``except X as T``.
137
138.. 2to3fixer:: exec
139
140 Converts the :keyword:`exec` statement to the :func:`exec` function.
141
142.. 2to3fixer:: execfile
143
144 Removes usage of :func:`execfile`. The argument to :func:`execfile` is
145 wrapped in calls to :func:`open`, :func:`compile`, and :func:`exec`.
146
147.. 2to3fixer:: filter
148
149 Wraps :func:`filter` usage in a :class:`list` call.
150
151.. 2to3fixer:: funcattrs
152
153 Fixes function attributes that have been renamed. For example,
154 ``my_function.func_closure`` is converted to ``my_function.__closure__``.
155
156.. 2to3fixer:: future
157
158 Removes ``from __future__ import new_feature`` statements.
159
160.. 2to3fixer:: getcwdu
161
162 Renames :func:`os.getcwdu` to :func:`os.getcwd`.
163
164.. 2to3fixer:: has_key
165
166 Changes ``dict.has_key(key)`` to ``key in dict``.
167
168.. 2to3fixer:: idioms
169
Georg Brandlae2dbe22009-03-13 19:04:40 +0000170 This optional fixer performs several transformations that make Python code
171 more idiomatic. Type comparisons like ``type(x) is SomeClass`` and
Benjamin Petersonf91df042009-02-13 02:50:59 +0000172 ``type(x) == SomeClass`` are converted to ``isinstance(x, SomeClass)``.
173 ``while 1`` becomes ``while True``. This fixer also tries to make use of
Georg Brandlae2dbe22009-03-13 19:04:40 +0000174 :func:`sorted` in appropriate places. For example, this block ::
Benjamin Petersonf91df042009-02-13 02:50:59 +0000175
176 L = list(some_iterable)
177 L.sort()
178
179 is changed to ::
180
181 L = sorted(some_iterable)
182
183.. 2to3fixer:: import
184
185 Detects sibling imports and converts them to relative imports.
186
187.. 2to3fixer:: imports
188
189 Handles module renames in the standard library.
190
191.. 2to3fixer:: imports2
192
193 Handles other modules renames in the standard library. It is separate from
194 the :2to3fixer:`imports` fixer only because of technical limitations.
195
196.. 2to3fixer:: input
197
198 Converts ``input(prompt)`` to ``eval(input(prompt))``
199
200.. 2to3fixer:: intern
201
202 Converts :func:`intern` to :func:`sys.intern`.
203
204.. 2to3fixer:: isinstance
205
206 Fixes duplicate types in the second argument of :func:`isinstance`. For
207 example, ``isinstance(x, (int, int))`` is converted to ``isinstance(x,
208 (int))``.
209
210.. 2to3fixer:: itertools_imports
211
212 Removes imports of :func:`itertools.ifilter`, :func:`itertools.izip`, and
213 :func:`itertools.imap`. Imports of :func:`itertools.ifilterfalse` are also
214 changed to :func:`itertools.filterfalse`.
215
216.. 2to3fixer:: itertools
217
218 Changes usage of :func:`itertools.ifilter`, :func:`itertools.izip`, and
Georg Brandl22b34312009-07-26 14:54:51 +0000219 :func:`itertools.imap` to their built-in equivalents.
Benjamin Petersonf91df042009-02-13 02:50:59 +0000220 :func:`itertools.ifilterfalse` is changed to :func:`itertools.filterfalse`.
221
222.. 2to3fixer:: long
223
224 Strips the ``L`` prefix on long literals and renames :class:`long` to
225 :class:`int`.
226
227.. 2to3fixer:: map
228
229 Wraps :func:`map` in a :class:`list` call. It also changes ``map(None, x)``
230 to ``list(x)``. Using ``from future_builtins import map`` disables this
231 fixer.
232
233.. 2to3fixer:: metaclass
234
235 Converts the old metaclass syntax (``__metaclass__ = Meta`` in the class
236 body) to the new (``class X(metaclass=Meta)``).
237
238.. 2to3fixer:: methodattrs
239
240 Fixes old method attribute names. For example, ``meth.im_func`` is converted
241 to ``meth.__func__``.
242
243.. 2to3fixer:: ne
244
245 Converts the old not-equal syntax, ``<>``, to ``!=``.
246
247.. 2to3fixer:: next
248
Georg Brandl502d9a52009-07-26 15:02:41 +0000249 Converts the use of iterator's :meth:`~iterator.next` methods to the
250 :func:`next` function. It also renames :meth:`next` methods to
251 :meth:`~object.__next__`.
Benjamin Petersonf91df042009-02-13 02:50:59 +0000252
253.. 2to3fixer:: nonzero
254
255 Renames :meth:`~object.__nonzero__` to :meth:`~object.__bool__`.
256
257.. 2to3fixer:: numliterals
258
259 Converts octal literals into the new syntax.
260
261.. 2to3fixer:: paren
262
263 Add extra parenthesis where they are required in list comprehensions. For
264 example, ``[x for x in 1, 2]`` becomes ``[x for x in (1, 2)]``.
265
266.. 2to3fixer:: print
267
268 Converts the :keyword:`print` statement to the :func:`print` function.
269
270.. 2to3fixer:: raises
271
272 Converts ``raise E, V`` to ``raise E(V)``, and ``raise E, V, T`` to ``raise
273 E(V).with_traceback(T)``. If ``E`` is a tuple, the translation will be
274 incorrect because substituting tuples for exceptions has been removed in 3.0.
275
276.. 2to3fixer:: raw_input
277
278 Converts :func:`raw_input` to :func:`input`.
279
280.. 2to3fixer:: reduce
281
282 Handles the move of :func:`reduce` to :func:`functools.reduce`.
283
284.. 2to3fixer:: renames
285
286 Changes :data:`sys.maxint` to :data:`sys.maxsize`.
287
288.. 2to3fixer:: repr
289
290 Replaces backtick repr with the :func:`repr` function.
291
292.. 2to3fixer:: set_literal
293
294 Replaces use of the :class:`set` constructor with set literals. This fixer
295 is optional.
296
297.. 2to3fixer:: standard_error
298
299 Renames :exc:`StandardError` to :exc:`Exception`.
300
301.. 2to3fixer:: sys_exc
302
303 Changes the deprecated :data:`sys.exc_value`, :data:`sys.exc_type`,
304 :data:`sys.exc_traceback` to use :func:`sys.exc_info`.
305
306.. 2to3fixer:: throw
307
308 Fixes the API change in generator's :meth:`throw` method.
309
310.. 2to3fixer:: tuple_params
311
312 Removes implicit tuple parameter unpacking. This fixer inserts temporary
313 variables.
314
315.. 2to3fixer:: types
316
317 Fixes code broken from the removal of some members in the :mod:`types`
318 module.
319
320.. 2to3fixer:: unicode
321
322 Renames :class:`unicode` to :class:`str`.
323
324.. 2to3fixer:: urllib
325
326 Handles the rename of :mod:`urllib` and :mod:`urllib2` to the :mod:`urllib`
327 package.
328
329.. 2to3fixer:: ws_comma
330
331 Removes excess whitespace from comma separated items. This fixer is
332 optional.
333
334.. 2to3fixer:: xrange
335
336 Renames :func:`xrange` to :func:`range` and wraps existing :func:`range`
337 calls with :class:`list`.
338
339.. 2to3fixer:: xreadlines
340
341 Changes ``for x in file.xreadlines()`` to ``for x in file``.
342
343.. 2to3fixer:: zip
344
345 Wraps :func:`zip` usage in a :class:`list` call. This is disabled when
346 ``from future_builtins import zip`` appears.
Benjamin Petersond6313712008-07-31 16:23:04 +0000347
348
349:mod:`lib2to3` - 2to3's library
350-------------------------------
351
352.. module:: lib2to3
353 :synopsis: the 2to3 library
354.. moduleauthor:: Guido van Rossum
355.. moduleauthor:: Collin Winter
Benjamin Peterson25c95f12009-05-08 20:42:26 +0000356.. moduleauthor:: Benjamin Peterson <benjamin@python.org>
Benjamin Petersond6313712008-07-31 16:23:04 +0000357
Benjamin Petersone9bbc8b2008-09-28 02:06:32 +0000358
Georg Brandle720c0a2009-04-27 16:20:50 +0000359.. note::
Benjamin Petersone9bbc8b2008-09-28 02:06:32 +0000360
361 The :mod:`lib2to3` API should be considered unstable and may change
362 drastically in the future.
363
Benjamin Petersond6313712008-07-31 16:23:04 +0000364.. XXX What is the public interface anyway?