Содержание страницы
2to3 – автоматическое преобразование кода Python 2 в 3¶2to3 - Automated Python 2 to 3 code translation
2to3 – это программа на Python, которая читает исходный код Python 2.x и применяет ряд преобразователей для преобразования его в корректный код Python 3.x. Стандартная библиотека содержит обширный набор преобразователей, которые справляются почти с любым кодом. Однако библиотека поддержки 2to3 lib2to3 – это гибкая и универсальная библиотека, поэтому можно писать собственные преобразователи для 2to3. lib2to3 также можно адаптировать для заказных приложений, в которых требуется автоматически редактировать код Python.
Использование 2to3¶Using 2to3
2to3 обычно устанавливается вместе с интерпретатором Python как скрипт. Он также находится в каталоге Tools/scripts корневого каталога Python.
Основные аргументы 2to3 – это список файлов или каталогов для преобразования. Каталоги обходятся рекурсивно в поисках исходников Python.
Вот пример исходного файла Python 2.x, example.py:
def greet(name):
print "Hello, {0}!".format(name)
print "What's your name?"
name = raw_input()
greet(name)
Его можно преобразовать в код Python 3.x с помощью 2to3 в командной строке:
$ 2to3 example.py
Выводится diff относительно исходного файла. 2to3 также может записывать необходимые изменения обратно в исходный файл. (Разумеется, создается резервная копия оригинала, если только не указан -n.) Запись изменений обратно включается флагом -w:
$ 2to3 -w example.py
После преобразования example.py выглядит так:
def greet(name):
print("Hello, {0}!".format(name))
print("What's your name?")
name = input()
greet(name)
Комментарии и точные отступы сохраняются на протяжении всего процесса преобразования.
По умолчанию 2to3 запускает набор предопределенных фиксеров. Флаг -l выводит список всех доступных фиксеров. Явный набор фиксеров для запуска можно задать с помощью -f. Аналогично, -x явно отключает фиксер. В следующем примере запускаются только фиксеры imports и has_key:
$ 2to3 -f imports -f has_key example.py
Эта команда запускает все фиксеры, кроме фиксера apply:
$ 2to3 -x apply example.py
Некоторые фиксеры являются явными, то есть они не запускаются по умолчанию, и их необходимо указать в командной строке для запуска. Здесь, помимо фиксеров по умолчанию, запускается фиксер idioms:
$ 2to3 -f all -f idioms example.py
Обратите внимание, что передача all включает все фиксеры по умолчанию.
Иногда 2to3 находит в исходном коде место, которое нужно изменить, но не может исправить автоматически. В этом случае 2to3 выводит предупреждение под diff для файла. Следует обработать это предупреждение, чтобы получить корректный код 3.x.
2to3 также может рефакторить doctest'ы. Для включения этого режима используйте флаг -d. Обратите внимание, что только doctest'ы будут подвергнуты рефакторингу. При этом модуль не обязан быть корректным Python. Например, примеры в стиле doctest в reST-документе также можно рефакторить с помощью этой опции.
Опция -v включает вывод дополнительной информации о процессе перевода.
Когда передается флаг -p, 2to3 обрабатывает print как функцию, а не как инструкцию. Это полезно, когда используется from __future__ import print_function. Если этот параметр не задан, фиксер print будет заключать вызовы print в дополнительные скобки, так как он не может различить между инструкцией print со скобками (например, print ("a" + "b" + "c")) и настоящим вызовом функции.
lib2to3 – библиотека 2to3¶lib2to3 - 2to3’s library
Предупреждение
API lib2to3 следует считать нестабильным и в будущем оно может кардинально измениться.