Поиск по сайту:

Как мы можем обновить большую кодовую базу Python 2 до Python 3?


Введение

Изначально Python назывался Python версии 2, также известной как Legacy Edition. Последней редакцией Python2 была Python2.7, которая вышла из эксплуатации в 2020 году. В качестве замены был представлен Python 3.x с множеством улучшений и исправлений ошибок по сравнению с версиями Python 2.x. Более старая версия Legacy Python была программным обеспечением LTS, что означает, что она имела длительную поддержку. Однако версии Python 3.x являются обратно несовместимыми выпусками, поэтому очень важно обновить кодовые базы Python 2 до Python 3, чтобы в полной мере насладиться простотой и поддержкой Python 3. Можно назвать основные причины обновления до Python 3 для разработчиков. а) Производительность разработчика (поскольку он динамически типизирован и очень прост в изучении и написании кода) и б) Повышение производительности, что включает более высокую производительность в большинстве задач.

Методы, используемые для обновления до Python3

  • Переписывание кодовой базы в Python 3

  • Использование процесса портирования

Способ 1: переписать всю кодовую базу

Этот способ обновления кодовой базы полезен только в том случае, если программное обеспечение создается в небольшом масштабе. Это связано с тем, что любой, кто обновляет кодовую базу, должен иметь общее представление о том, как работает вся кодовая база. Переписывание кода на Python 3 может помочь в реализации функций и простоты использования Python 3, что позволит сократить код и сделать его более эффективным. Кроме того, если база кода переносится каким-либо другим методом, могут возникнуть проблемы с реализацией функций Python 3.x до тех пор, пока вся база кода не будет перенесена. Переписывание кодовой базы решает эту проблему, а также дает нам возможность обновить любой кодовый блок, который мы давно хотели сделать.

Однако этот метод работает только в том случае, если база кода имеет меньший масштабируемый размер.

Способ 2: использование процесса портирования

С другой стороны, мы можем использовать процесс портирования Python, официально описанный в документации. На высоком уровне это портирование представляет собой трехэтапный процесс:

  • Автоматическое преобразование

  • Ручные изменения

  • Проверка и исправление во время выполнения

Однако обязательным условием для всего этого является первая установка Python 3 вместе с соответствующими пакетами и библиотеками. Давайте посмотрим процесс для Windows.

Скачать и установить —

Это установит программное обеспечение Python. После этого процесс портирования можно начать с помощью официальных модулей или программного обеспечения для переноса с Python 2 на Python 3, например 2to3 и других. Это приведет к переносу кода на Python 3, хотя необходимо принять во внимание следующие проблемы:

Обновите файл Setup.py, чтобы обозначить совместимость Python3.

Классификаторы в установочном файле необходимо обновить, чтобы они содержали язык программирования :: Python :: 3. Это позволит существовать в среде кодирования только Python 3 или определенным его версиям (также доступны определенные классификаторы версий), что предотвращает ненужный возврат к коду Python 2. Это значительно поможет поддерживать целостность кода и позволит всей кодовой базе существовать только в Python 3.

Используйте сценарии модернизации или будущего.

Поскольку Python 3 не имеет обратной совместимости, все скрипты в кодовой базе должны быть обновлены до стандартов Python 3. Здесь мы можем использовать скрипты вроде Modernize или Futurize в начале каждого такого модуля, который необходимо обновить. Не все функции Python будут использоваться в модуле, однако некоторые базовые функции необходимо модернизировать, чтобы обеспечить бесперебойную работу любого модуля. Следовательно, официальная документация Python рекомендует добавить следующий код, в любом случае на всякий случай:

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function 

Это гарантирует, что наш текущий код не будет регрессировать и перестанет работать под Python 3 из-за некоторых базовых зависимостей. Однако еще лучшим подходом будет использование проекта Pylink, где его флаг --py3k помогает указать на ситуации, когда наш код отклоняется от совместимости с Python 3. Это предотвращает отдельный запуск сценариев Modernize или Futurize в начале каждого блока, тем самым сокращая код и уменьшая количество ошибок, хотя следует отметить, что Pylint поддерживает только Python 3.4 или выше.

Используйте обнаружение функций при импорте, чтобы обеспечить совместимость версий

Могут быть случаи, когда в кодовой базе Python 2 есть модули, которые не работают в Python 3. Используя обнаружение функций, мы можем узнать, будет ли наш предыдущий проект вообще поддерживать версии Python 3. Более безопасный подход — использовать обнаружение функций вместо определения версии, чтобы проверить правильную версию, которую нам нужно использовать, что предотвратит дальнейшие проблемы в будущем.

try:
   from importlib import abc
except ImportError:
   from importlib2 import abc 

Проверка при сравнении двоичных и текстовых данных

В Python 3 нельзя откровенно смешивать текстовые и двоичные типы данных, так как это приведет к ошибкам. Но эту проверку нельзя автоматизировать с использованием какой-либо другой библиотеки Python, поэтому лучше запускать собственные блоки кода для сравнения строковых и двоичных данных, причина в том, что 3 байта Python ведут себя по-разному. как старый str в Legacy Python.

Хорошее тестовое покрытие

Очень важно иметь хорошее тестовое покрытие, чтобы предотвратить ошибки, и сократить время, необходимое для обновления кода, внося изменения только там, где это необходимо. В таких случаях очень помогают такие инструменты, как Coverage.py, определяя разницу между тем, что было выполнено, и какой была ошибка, чтобы определить неисправность в точном месте.

Заключение

Здесь мы рассмотрели некоторые методы миграции большой кодовой базы программного обеспечения с Python 2 на Python 3, а также некоторые ограничения, на которые следует обратить внимание, и некоторые полезные методологии, которые можно использовать. Однако процесс может в некоторой степени различаться в зависимости от рассматриваемой кодовой базы, а также библиотек и модулей, используемых в проекте. Эти общие шаги в целом хорошо работают для преобразования большинства кодовых баз в Python 3 и модернизации кода Python.

Статьи по данной тематике: