blob: 7ab34dac1cfbe1d619328d2e31d02ed892be43f5 [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
41needed modifications right back to the source file. (Of course, a backup of the
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +000042original is also be made unless :option:`-n` is also given.) Writing the
43changes back is enabled 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
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
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
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
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
219 :func:`itertools.imap` to their builtin equivalents.
220 :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
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
256.. 2to3fixer:: numliterals
257
258 Converts octal literals into the new syntax.
259
260.. 2to3fixer:: paren
261
262 Add extra parenthesis where they are required in list comprehensions. For
263 example, ``[x for x in 1, 2]`` becomes ``[x for x in (1, 2)]``.
264
265.. 2to3fixer:: print
266
267 Converts the :keyword:`print` statement to the :func:`print` function.
268
269.. 2to3fixer:: raises
270
271 Converts ``raise E, V`` to ``raise E(V)``, and ``raise E, V, T`` to ``raise
272 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
307 Fixes the API change in generator's :meth:`throw` method.
308
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
340 Changes ``for x in file.xreadlines()`` to ``for x in file``.
341
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 Petersond6313712008-07-31 16:23:04 +0000346
347
348: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 Petersone9bbc8b2008-09-28 02:06:32 +0000356
357.. warning::
358
359 The :mod:`lib2to3` API should be considered unstable and may change
360 drastically in the future.
361
Benjamin Petersond6313712008-07-31 16:23:04 +0000362.. XXX What is the public interface anyway?