blob: dbff57bb44181bd87882e55182c041f1d6c2411e [file] [log] [blame]
Andrew Hsieh9a7616f2013-05-21 20:32:42 +08001.. _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. :mod:`lib2to3` could also be
13adapted to custom applications in which Python code needs to be edited
14automatically.
15
16
17.. _2to3-using:
18
19Using 2to3
20----------
21
222to3 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 recursively traversed for Python sources.
27
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
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 $ 2to3 -w example.py
46
47After 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
55Comments and exact indentation are preserved throughout the translation process.
56
57By 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::
61
62 $ 2to3 -f imports -f has_key example.py
63
64This command runs every fixer except the ``apply`` fixer::
65
66 $ 2to3 -x apply example.py
67
68Some fixers are *explicit*, meaning they aren't run by default and must be
69listed on the command line to be run. Here, in addition to the default fixers,
70the ``idioms`` fixer is run::
71
72 $ 2to3 -f all -f idioms example.py
73
74Notice how passing ``all`` enables all default fixers.
75
76Sometimes 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.
80
812to3 can also refactor doctests. To enable this mode, use the :option:`-d`
82flag. 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.
85
86The :option:`-v` option enables output of more information on the translation
87process.
88
89Since some print statements can be parsed as function calls or statements, 2to3
90cannot always read files containing the print function. When 2to3 detects the
91presence of the ``from __future__ import print_function`` compiler directive, it
92modifies its internal grammar to interpret :func:`print` as a function. This
93change 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
95converted.
96
97The :option:`-o` or :option:`--output-dir` option allows specification of an
98alternate 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
100when not overwriting the input files.
101
102.. versionadded:: 2.7.3
103 The :option:`-o` option was added.
104
105The :option:`-W` or :option:`--write-unchanged-files` flag tells 2to3 to always
106write output files even if no changes were required to the file. This is most
107useful with :option:`-o` so that an entire Python source tree is copied with
108translation from one directory to another.
109This 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
114The :option:`--add-suffix` option specifies a string to append to all output
115filenames. The :option:`-n` flag is required when specifying this as backups
116are not necessary when writing to different filenames. Example::
117
118 $ 2to3 -n -W --add-suffix=3 example.py
119
120Will 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
125To 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
130.. _2to3-fixers:
131
132Fixers
133------
134
135Each step of transforming code is encapsulated in a fixer. The command ``2to3
136-l`` lists them. As :ref:`documented above <2to3-using>`, each can be turned on
137and 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
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.
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
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`.
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
185.. 2to3fixer:: exitfunc
186
187 Changes assignment of :attr:`sys.exitfunc` to use of the :mod:`atexit`
188 module.
189
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
213 This optional fixer performs several transformations that make Python code
214 more idiomatic. Type comparisons like ``type(x) is SomeClass`` and
215 ``type(x) == SomeClass`` are converted to ``isinstance(x, SomeClass)``.
216 ``while 1`` becomes ``while True``. This fixer also tries to make use of
217 :func:`sorted` in appropriate places. For example, this block ::
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
267 Renames :class:`long` to :class:`int`.
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
293 :meth:`~object.__next__`.
294
295.. 2to3fixer:: nonzero
296
297 Renames :meth:`~object.__nonzero__` to :meth:`~object.__bool__`.
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
312.. 2to3fixer:: raise
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
316 incorrect because substituting tuples for exceptions has been removed in Python 3.
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?