Python Language
Инструмент 2to3
Поиск…
Синтаксис
- $ 2to3 [-options] path / to / file.py
параметры
параметр | Описание |
---|---|
имя_файла / имя_каталога | 2to3 принимает список файлов или каталогов, которые должны быть преобразованы в качестве аргумента. Каталоги рекурсивно пройдены для источников Python. |
вариант | Вариант Описание |
-f FIX, --fix = FIX | Укажите применяемые преобразования; default: все. Список доступных преобразований с помощью --list-fixes |
-j ПРОЦЕССЫ, --processes = ПРОЦЕССЫ | Запуск 2to3 одновременно |
-x NOFIX, --nofix = NOFIX | Исключить преобразование |
-l, --list-fixes | Список доступных преобразований |
-p, --print-function | Измените грамматику так, чтобы print() считался функцией |
-v, --verbose | Более подробный вывод |
--no-дифференциалы | Не выводить разности рефакторинга |
-w | Записывать измененные файлы |
-n, --nobackups | Не создавать резервные копии измененных файлов |
-o OUTPUT_DIR, --output-dir = OUTPUT_DIR | Поместите выходные файлы в этот каталог вместо перезаписывания входных файлов. Требуется флаг -n , поскольку резервные файлы не нужны, если входные файлы не изменены. |
-W, --write-unchanged-files | Запись выходных файлов даже не требуется. Полезно с -o так что полное исходное дерево переводится и копируется. Подразумевает -w . |
--add-суффикс = ADD_SUFFIX | Укажите строку, которая будет добавлена ко всем именам выходных файлов. Требуется -n если не пусто. Пример: --add-suffix='3' будет генерировать файлы .py3 . |
замечания
Инструмент 2to3 представляет собой программу python, которая используется для преобразования кода, написанного в Python 2.x, в код Python 3.x. Инструмент читает исходный код Python 2.x и применяет ряд исправлений, чтобы преобразовать его в действительный код Python 3.x.
Инструмент 2to3 доступен в стандартной библиотеке как lib2to3, который содержит богатый набор исправлений, которые будут обрабатывать практически весь код. Поскольку lib2to3 является общей библиотекой, можно написать свои собственные фиксаторы для 2to3.
Основное использование
Рассмотрим следующий код Python2.x. Сохраните файл как example.py
def greet(name):
print "Hello, {0}!".format(name)
print "What's your name?"
name = raw_input()
greet(name)
В приведенном выше файле имеется несколько несовместимых строк. Метод raw_input()
был заменен на input()
в Python 3.x, и print
больше не является оператором, а функцией. Этот код можно преобразовать в код Python 3.x с помощью инструмента 2to3.
Юникс
$ 2to3 example.py
Windows
> path/to/2to3.py example.py
Выполнение вышеуказанного кода приведет к различиям в исходном исходном файле, как показано ниже.
RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
RefactoringTool: Refactored example.py
--- example.py (original)
+++ example.py (refactored)
@@ -1,5 +1,5 @@
def greet(name):
- print "Hello, {0}!".format(name)
-print "What's your name?"
-name = raw_input()
+ print("Hello, {0}!".format(name))
+print("What's your name?")
+name = input()
greet(name)
RefactoringTool: Files that need to be modified:
RefactoringTool: example.py
Изменения могут быть записаны обратно в исходный файл с использованием флага -w. Создается резервная копия исходного файла с именем example.py.bak
, если не указан флаг -n.
Юникс
$ 2to3 -w example.py
Windows
> path/to/2to3.py -w example.py
Теперь файл example.py
был преобразован из Python 2.x в код Python 3.x.
После завершения example.py
будет содержать следующий действительный код Python3.x:
def greet(name):
print("Hello, {0}!".format(name))
print("What's your name?")
name = input()
greet(name)