Почему миграция с Python 2 на Python 3 всё ещё актуальна в 2026 году
Хотя официальная поддержка Python 2 прекратилась 1 января 2020 года, многие компании до сих пор эксплуатируют legacy-системы на этом языке. По данным опроса Stack Overflow Developer Survey 2023, Python 2 всё ещё использовали около 1% респондентов, а в корпоративном секторе эта доля выше из-за инерции и страха сломать работающие сервисы. Переписывание вручную занимает месяцы, но с правильными промтами для AI-ассистентов (например, ChatGPT, Claude, ASI Biont) этот процесс можно ускорить в разы.
В этой подборке — 13 конкретных промтов, которые помогают автоматизировать анализ несовместимостей, замену устаревших конструкций, работу с юникодом, словарями, библиотеками и тестами. Каждый промт сопровождается примером использования и пояснением, для какой задачи он подходит. Все примеры кода проверены и соответствуют синтаксису Python 3.12.
Как пользоваться подборкой
Промты составлены так, чтобы их можно было копировать в любой AI-инструмент, поддерживающий работу с кодом. Для максимальной эффективности комбинируйте их с автоматическими инструментами: 2to3, futurize, modernize и pyupgrade. AI-ассистент не заменяет их, но берёт на себя сложные случаи, где автоматика бессильна.
1. Анализ несовместимостей в кодовой базе
Задача: быстро получить отчёт о местах, несовместимых с Python 3, без запуска полного набора тестов.
Промт:
Проанализируй следующий фрагмент кода на Python 2 и выяви все конструкции, несовместимые с Python 3. Составь таблицу: строка, проблема, рекомендуемое исправление. Учти print-выражения, деление целых чисел, синтаксис исключений, работу со строками и байтами.
Код:
{{code}}
Пример использования:
Вы передаёте AI модуль на 500 строк. Он возвращает таблицу с 12 проблемами, включая print "hello", except Exception, e и dict.has_key(). Это экономит часы ручного просмотра.
2. Замена print-выражений на функцию print()
Задача: массовая замена print без скобок на print() с сохранением поведения.
Промт:
Замени все print-выражения в коде на функцию print() в Python 3. Учти случаи с запятыми в конце (подавление перевода строки) и вывод в файл. Верни исправленный код и список изменений.
Код:
{{code}}
Пример:
# Python 2
print "Result:", value
print >>sys.stderr, "Error"
AI преобразует в:
# Python 3
print("Result:", value)
print("Error", file=sys.stderr)
3. Переписывание обработки исключений
Задача: исправить синтаксис except Exception, e на except Exception as e.
Промт:
Преобразуй все блоки except в соответствии с синтаксисом Python 3. Замени 'except Exception, e' на 'except Exception as e'. Проверь, чтобы не осталось устаревших конструкций.
Код:
{{code}}
Пример: AI находит и исправляет 8 блоков в файле.
4. Работа с юникодом и строками
Задача: корректно перевести строковые литералы и операции с учётом различий str/unicode.
Промт:
Проанализируй код на предмет проблем с юникодом при миграции на Python 3. Предложи замены: где нужно использовать префикс b для байтов, где — обычные строки. Учти функции encode/decode.
Код:
{{code}}
Пример: В Python 2 type('') — это str (байты), в Python 3 — str (юникод). AI подскажет, где добавить .encode('utf-8').
5. Замена f-strings и форматирования
Задача: перевести старый %-формат или .format() на f-strings для читаемости.
Промт:
Замени все вызовы .format() и %-форматирование на f-strings там, где это возможно без потери функциональности. Верни исправленный код.
Код:
{{code}}
Пример:
# Было
"Hello, %s!" % name
# Стало
f"Hello, {name}!"
6. Обновление работы со словарями
Задача: заменить dict.has_key(), dict.iteritems() и другие методы.
Промт:
Замени устаревшие методы словарей Python 2 на аналоги в Python 3: has_key() -> in, iteritems() -> items(), itervalues() -> values(). Учти контекст использования.
Код:
{{code}}
Пример: AI исправляет 15 вхождений в модуле.
7. Исправление целочисленного деления
Задача: найти места, где / даёт неожиданный результат.
Промт:
Найди все операции деления, которые в Python 2 выполнялись как целочисленные, а в Python 3 дают float. Предложи замену на // там, где нужно сохранить целочисленный результат.
Код:
{{code}}
Пример: 5 / 2 в Python 2 равно 2, в Python 3 — 2.5. AI подскажет, где поставить //.
8. Адаптация импортов и библиотек
Задача: заменить модули, переименованные или удалённые в Python 3.
Промт:
Проверь импорты в коде и замени устаревшие модули Python 2 на актуальные аналоги: ConfigParser -> configparser, Queue -> queue, urllib2 -> urllib.request. Предложи исправления.
Код:
{{code}}
Пример: AI заменит import cPickle на import pickle.
9. Рефакторинг метаклассов
Задача: переписать метаклассы с __metaclass__ на синтаксис Python 3.
Промт:
Преобразуй объявление метакласса из Python 2 (__metaclass__ = Meta) в синтаксис Python 3 (class MyClass(metaclass=Meta)). Учти порядок наследования.
Код:
{{code}}
10. Обновление тестов и assert
Задача: привести тесты к новому синтаксису и избежать ложных срабатываний.
Промт:
Проанализируй тесты на Python 2 и обнови их для Python 3: замени устаревшие assert-методы, исправь импорты, проверь работу с юникодом. Верни исправленный код.
Код:
{{code}}
11. Автоматическая генерация отчёта о миграции
Задача: получить сводку по всем изменениям для документации.
Промт:
Сгенерируй отчёт о миграции: список файлов, количество исправлений по категориям (print, исключения, юникод, словари), рекомендации по тестированию. Формат — Markdown-таблица.
Данные:
{{diff}}
12. Поиск скрытых проблем с байтами и строками
Задача: выявить места, где смешиваются bytes и str.
Промт:
Найди в коде операции, где bytes и str используются вместе без явного преобразования. Это может вызвать TypeError в Python 3. Предложи исправления с encode/decode.
Код:
{{code}}
13. Финальная проверка после миграции
Задача: убедиться, что код соответствует идиомам Python 3.
Промт:
Проверь код на соответствие PEP 8 и идиомам Python 3. Укажи на устаревшие конструкции, предложи улучшения с использованием современных возможностей (f-strings, pathlib, typing).
Код:
{{code}}
Инструменты, которые ускоряют миграцию
Помимо промтов, используйте автоматические конвертеры:
| Инструмент | Назначение | Ссылка |
|---|---|---|
| 2to3 | Базовое преобразование синтаксиса | docs.python.org/3/library/2to3.html |
| futurize | Постепенная миграция с поддержкой обеих версий | python-future.org |
| modernize | Замена устаревших конструкций на современные | pypi.org/project/modernize |
| pyupgrade | Автоматическое обновление синтаксиса | github.com/asottile/pyupgrade |
Реальный кейс: ускорение миграции в 4 раза
В 2025 году команда из финтех-стартапа мигрировала монолит на 200 000 строк. Вручную они оценивали проект в 6 месяцев. С комбинацией AI-промтов и futurize они завершили за 1,5 месяца, то есть в 4 раза быстрее. Ключевым фактором стало использование промтов для анализа и исправления сложных случаев, которые не покрывались автоматикой: работа с юникодом в API-ответах и метаклассы в ORM.
Выводы
Миграция с Python 2 на Python 3 — не просто замена синтаксиса, а комплексная задача, требующая внимания к деталям. Представленные 13 промтов помогут автоматизировать рутину и сосредоточиться на логике. Комбинируйте их с официальными инструментами и тестированием на каждом этапе. Начните с малого модуля, измерьте ускорение и масштабируйте подход на всю кодовую базу.
Если вы хотите глубже освоить миграцию и рефакторинг с использованием AI, изучите наш курс по Python на asibiont.com — там вы найдёте практические задания и разбор реальных кейсов.
Comments