blob: 7ab34dac1cfbe1d619328d2e31d02ed892be43f5 [file] [log] [blame]
Benjamin Peterson40202212008-07-24 02:45:37 +00001.. _2to3-reference:
2
32to3 - Automated Python 2 to 3 code translation
4===============================================
5
Benjamin Peterson51a37032009-01-11 19:48:15 +00006.. sectionauthor:: Benjamin Peterson <benjamin@python.org>
Benjamin Peterson40202212008-07-24 02:45:37 +00007
Benjamin Petersoneb55fd82008-09-03 00:21:32 +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 Peterson15ad6c02008-09-04 23:31:27 +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 Peterson40202212008-07-24 02:45:37 +000015
16
Benjamin Petersone0820e22009-02-07 23:01:19 +000017.. _2to3-using:
18
Benjamin Peterson40202212008-07-24 02:45:37 +000019Using 2to3
20----------
21
Benjamin Peterson15ad6c02008-09-04 23:31:27 +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 Peterson40202212008-07-24 02:45:37 +000027
28Here is a sample Python 2.x source file, :file:`example.py`::
29
30 def greet(name):
Georg Brandl340739e2008-07-24 07:09:21 +000031 print "Hello, {0}!".format(name)
Benjamin Peterson40202212008-07-24 02:45:37 +000032 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 Peterson15ad6c02008-09-04 23:31:27 +000040A diff against the original source file is printed. 2to3 can also write the
41needed modifications right back to the source file. (Of course, a backup of the
Benjamin Petersonf3d0ce12008-10-19 19:39:16 +000042original is also be made unless :option:`-n` is also given.) Writing the
43changes back is enabled with the :option:`-w` flag::
Benjamin Peterson40202212008-07-24 02:45:37 +000044
45 $ 2to3 -w example.py
46
Benjamin Petersonad2a9e72008-09-06 03:00:00 +000047After transformation, :file:`example.py` looks like this::
Benjamin Peterson40202212008-07-24 02:45:37 +000048
49 def greet(name):
Benjamin Peterson3ac2f242008-07-25 21:59:53 +000050 print("Hello, {0}!".format(name))
Benjamin Peterson40202212008-07-24 02:45:37 +000051 print("What's your name?")
52 name = input()
53 greet(name)
54
Benjamin Petersoncd29e9d2008-10-22 21:05:30 +000055Comments and exact indentation are preserved throughout the translation process.
Benjamin Peterson40202212008-07-24 02:45:37 +000056
Benjamin Petersone0820e22009-02-07 23:01:19 +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 Peterson40202212008-07-24 02:45:37 +000061
62 $ 2to3 -f imports -f has_key example.py
63
Benjamin Peterson0ecbcca2008-10-13 21:51:40 +000064This command runs every fixer except the ``apply`` fixer::
65
66 $ 2to3 -x apply example.py
67
Benjamin Peterson92be5392008-10-22 20:57:43 +000068Some fixers are *explicit*, meaning they aren't run by default and must be
Benjamin Peterson15ad6c02008-09-04 23:31:27 +000069listed on the command line to be run. Here, in addition to the default fixers,
70the ``idioms`` fixer is run::
Benjamin Peterson40202212008-07-24 02:45:37 +000071
72 $ 2to3 -f all -f idioms example.py
73
Benjamin Peterson15ad6c02008-09-04 23:31:27 +000074Notice how passing ``all`` enables all default fixers.
Benjamin Peterson40202212008-07-24 02:45:37 +000075
Benjamin Peterson92be5392008-10-22 20:57:43 +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 Peterson15ad6c02008-09-04 23:31:27 +000080
812to3 can also refactor doctests. To enable this mode, use the :option:`-d`
Benjamin Petersonb51f81d2008-09-28 01:53:29 +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 Peterson15ad6c02008-09-04 23:31:27 +000085
Benjamin Peterson0ecbcca2008-10-13 21:51:40 +000086The :option:`-v` option enables output of more information on the translation
87process.
Benjamin Peterson15ad6c02008-09-04 23:31:27 +000088
Benjamin Petersone0820e22009-02-07 23:01:19 +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
102Each step of tranforming code is encapsulated in a fixer. The command ``2to3
103-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
Benjamin Petersonb8e17f72009-02-08 15:14:57 +0000149 Wraps :func:`filter` usage in a :class:`list` call.
Benjamin Petersone0820e22009-02-07 23:01:19 +0000150
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
170 This optional fixer preforms several transformations that make Python code
171 more idiomatic. Type comparisions like ``type(x) is SomeClass`` and
172 ``type(x) == SomeClass`` are converted to ``isinstance(x, SomeClass)``.
173 ``while 1`` becomes ``while True``. This fixer also tries to make use of
174 :func:`sorted` in appropiate places. For example, this block ::
175
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
Benjamin Petersonb8e17f72009-02-08 15:14:57 +0000193 Handles other modules renames in the standard library. It is separate from
194 the :2to3fixer:`imports` fixer only because of technical limitations.
Benjamin Petersone0820e22009-02-07 23:01:19 +0000195
196.. 2to3fixer:: input
197
198 Converts ``input(prompt)`` to ``eval(input(prompt))``
199
200.. 2to3fixer:: intern
201
Benjamin Petersonb8e17f72009-02-08 15:14:57 +0000202 Converts :func:`intern` to :func:`sys.intern`.
Benjamin Petersone0820e22009-02-07 23:01:19 +0000203
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
219 :func:`itertools.imap` to their builtin equivalents.
220 :func:`itertools.ifilterfalse` is changed to :func:`itertools.filterfalse`.
221
222.. 2to3fixer:: long
223
Benjamin Petersonb8e17f72009-02-08 15:14:57 +0000224 Strips the ``L`` prefix on long literals and renames :class:`long` to
225 :class:`int`.
Benjamin Petersone0820e22009-02-07 23:01:19 +0000226
227.. 2to3fixer:: map
228
Benjamin Petersonb8e17f72009-02-08 15:14:57 +0000229 Wraps :func:`map` in a :class:`list` call. It also changes ``map(None, x)``
Benjamin Petersone0820e22009-02-07 23:01:19 +0000230 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
249 Converts the use of iterator's :meth:`next` methods to the :func:`next`
250 function. It also renames :meth:`next` methods to :meth:`~object.__next__`.
251
252.. 2to3fixer:: nonzero
253
254 Renames :meth:`~object.__nonzero__` to :meth:`~object.__bool__`.
255
Benjamin Petersonc5e68b12009-02-08 14:38:13 +0000256.. 2to3fixer:: numliterals
257
258 Converts octal literals into the new syntax.
259
Benjamin Petersone0820e22009-02-07 23:01:19 +0000260.. 2to3fixer:: paren
261
262 Add extra parenthesis where they are required in list comprehensions. For
Benjamin Petersonb8e17f72009-02-08 15:14:57 +0000263 example, ``[x for x in 1, 2]`` becomes ``[x for x in (1, 2)]``.
Benjamin Petersone0820e22009-02-07 23:01:19 +0000264
265.. 2to3fixer:: print
266
267 Converts the :keyword:`print` statement to the :func:`print` function.
268
269.. 2to3fixer:: raises
270
Benjamin Petersonb8e17f72009-02-08 15:14:57 +0000271 Converts ``raise E, V`` to ``raise E(V)``, and ``raise E, V, T`` to ``raise
Benjamin Petersone0820e22009-02-07 23:01:19 +0000272 E(V).with_traceback(T)``. If ``E`` is a tuple, the translation will be
273 incorrect because substituting tuples for exceptions has been removed in 3.0.
274
275.. 2to3fixer:: raw_input
276
277 Converts :func:`raw_input` to :func:`input`.
278
279.. 2to3fixer:: reduce
280
281 Handles the move of :func:`reduce` to :func:`functools.reduce`.
282
283.. 2to3fixer:: renames
284
285 Changes :data:`sys.maxint` to :data:`sys.maxsize`.
286
287.. 2to3fixer:: repr
288
289 Replaces backtick repr with the :func:`repr` function.
290
291.. 2to3fixer:: set_literal
292
293 Replaces use of the :class:`set` constructor with set literals. This fixer
294 is optional.
295
296.. 2to3fixer:: standard_error
297
298 Renames :exc:`StandardError` to :exc:`Exception`.
299
300.. 2to3fixer:: sys_exc
301
302 Changes the deprecated :data:`sys.exc_value`, :data:`sys.exc_type`,
303 :data:`sys.exc_traceback` to use :func:`sys.exc_info`.
304
305.. 2to3fixer:: throw
306
Benjamin Petersonb8e17f72009-02-08 15:14:57 +0000307 Fixes the API change in generator's :meth:`throw` method.
Benjamin Petersone0820e22009-02-07 23:01:19 +0000308
309.. 2to3fixer:: tuple_params
310
311 Removes implicit tuple parameter unpacking. This fixer inserts temporary
312 variables.
313
314.. 2to3fixer:: types
315
316 Fixes code broken from the removal of some members in the :mod:`types`
317 module.
318
319.. 2to3fixer:: unicode
320
321 Renames :class:`unicode` to :class:`str`.
322
323.. 2to3fixer:: urllib
324
325 Handles the rename of :mod:`urllib` and :mod:`urllib2` to the :mod:`urllib`
326 package.
327
328.. 2to3fixer:: ws_comma
329
330 Removes excess whitespace from comma separated items. This fixer is
331 optional.
332
333.. 2to3fixer:: xrange
334
335 Renames :func:`xrange` to :func:`range` and wraps existing :func:`range`
336 calls with :class:`list`.
337
338.. 2to3fixer:: xreadlines
339
Benjamin Petersonb8e17f72009-02-08 15:14:57 +0000340 Changes ``for x in file.xreadlines()`` to ``for x in file``.
Benjamin Petersone0820e22009-02-07 23:01:19 +0000341
342.. 2to3fixer:: zip
343
344 Wraps :func:`zip` usage in a :class:`list` call. This is disabled when
345 ``from future_builtins import zip`` appears.
Benjamin Peterson40202212008-07-24 02:45:37 +0000346
347
Benjamin Peterson40202212008-07-24 02:45:37 +0000348:mod:`lib2to3` - 2to3's library
349-------------------------------
350
351.. module:: lib2to3
352 :synopsis: the 2to3 library
353.. moduleauthor:: Guido van Rossum
354.. moduleauthor:: Collin Winter
355
Benjamin Peterson7f8f6602008-09-27 16:23:55 +0000356
357.. warning::
358
359 The :mod:`lib2to3` API should be considered unstable and may change
360 drastically in the future.
361
Benjamin Peterson40202212008-07-24 02:45:37 +0000362.. XXX What is the public interface anyway?