Я написал небольшой текстовый редактор на основе Qt для кода Python, который я встроил в свое приложение. Теперь я собираюсь перейти на Python 3 и хочу помочь пользователям моего приложения в конвертации их кода. Я знаю, что 2to3 может сделать большую часть преобразования для файлов. Однако мне нужно преобразование «на лету», не касаясь файлов на диске. Я имею в виду что-то вроде:

py3_code_str = convert2to3(py2_code_str)

Кто-нибудь знает, как этого можно достичь с помощью 2to3 или lib2to3?

3
Maciek D. 16 Дек 2015 в 11:49

3 ответа

Лучший ответ

К сожалению, lib2to3 не имеет стабильного интерфейса, поэтому он может сильно измениться.

Однако, если вас это не волнует, возможно (с небольшими изменениями) можно использовать from lib2to3.refactor import RefactoringTool и продолжить с его методом refactor_string.

2
plaes 16 Дек 2015 в 09:01

Это действительно не то, для чего 2to3.

Вы должны писать свой код таким образом, чтобы он был совместим с Python 2 и 3. шесть библиотек может помочь с этим.

0
Daniel Roseman 16 Дек 2015 в 09:00

Что сработало для меня благодаря ответу:

from lib2to3.refactor import RefactoringTool, get_fixers_from_package
refactoring_tool = RefactoringTool(fixer_names=get_fixers_from_package('lib2to3.fixes'))
node3 = refactoring_tool.refactor_string(text2, 'script')
text3 = str(node3)
1
Community 23 Май 2017 в 10:27