Рубрики
Без рубрики

Преобразование Python 2 Code в Python 3

Узнайте, как преобразовать код Python 2 в код Python 3, чтобы вы могли использовать потрясающие существующие проекты Python 2 с более современным Python 3.

Автор оригинала: Robin Andrews.

Настолько великий код, написанный в Python 2 Пока прошел время, и в эти дни вам действительно нужно использовать Python 3 практически во всех ситуациях. Многие люди даже не имеют установки Python 2, они могли бы использовать, если они хотели, поэтому становится важно, чтобы иметь возможность сохранить всю эту доброту Python и сделать его работать с нашей нынешней версией Python. (На момент написания Python 3.8 – последняя основная версия.)

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

Обновление: поскольку написание этой статьи я принял более простой способ конвертировать файлы из Python 2 в Python 3. Откройте командную строку в папке, содержащей файл, который вы хотите преобразовать, и введите python -m lib2to3 my_file.py -w
(Замена my_file.py
с вашим именем файла) и эй Presto! У вас будет версию вашего файла Python 3, а также резервное копирование оригинала, если вам это нужно.

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

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

Есть несколько вещей, которые вы можете сделать, чтобы конвертировать небольшие файлы самостоятельно, просто узная некоторые из ключевых различий между Python 2 и Python 3. Некоторые из которых обычно встречаются некоторые из «gotchs», перечисленные ниже:

Ключевые различия между Python 2 и Python 3

  • Печать "Здравствуйте, мир!" становится Печать (Hello World »)

Печать теперь функция, а как таковая требует скобок.

  • RAW_INPUT () сейчас только Вход()

Все эти надоедные экземпляры RAW_INPUT () потребуется редактирование.

  • Для я в xrange (10) становится Для меня в пределах (10)

xrange был способ более эффективно делать петли с помощью ИТЕРИТЕЛЬНО Отказ Диапазон Объект в Python 3 – это ИТЕРИТЕЛЬНО по умолчанию.

Вскоре это может стать утомительным, чтобы эти изменения вручную, так что вы можете сделать? Одним из решений является использование онлайн-преобразователя, который может быть удостоен для преобразования небольших файлов. Один такой конвертер, который я использовал https://www.pythonconverter.com/

Если этот инструмент, который не соответствует вашим потребностям, например, если вы хотите преобразовать несколько файлов сразу, к счастью, Python 3 поставляется с инструментом для Python 2 в преобразования Python 3 для автоматически!

Он расположен вместе с вами Python. Например, в моей системе это в

C: \ Program Files (x86) \ python38-32 \ Tools \ Scripts \ 2To3.py

Если по какой-либо причине у вас нет утилиты, вы можете запустить PIP Установите 2To3 из командной строки, чтобы получить ее.

Один из способов вы можете легко узнать, где находится установка Python (в Windows), открывая PowerShell и выполнять следующее:

где.exe Python.

На мою систему это дает C: \ Файлы программы (x86) \ python38-32 \ python.exe

На Mac/Linux эквивалентная команда – Какой питон Отказ

NB Убедитесь, что вы резервируете какие-либо важные файлы, прежде чем пытаться 2-3.пи

Вы можете использовать этот инструмент из командных строк, таких как:

Создайте файл называемый example.py:

# 2to3 example.py
name = raw_input("What is your name? ")
for i in xrange(10):
    print name

Теперь из командной строки в той же папке запустите это:

«C: \ Program Files (x86) \ python38-32 \ Tools \ Scripts \ 2To3.py” example.py -w -n

замена пути к 2-3.пи с тем, что в вашей системе. Возможно, вам нужно немного копать, чтобы найти это 2-3.пи Отказ Используйте путь, который я предоставил вместе с где.exe Python Как показано выше, чтобы помочь найти файл. Как только вы нашли его, вы можете использовать Shift + Щелкните правой кнопкой мыши Чтобы получить контекстное меню с помощью «Скопировать путь» в качестве опции. Это один подход в любом случае. Рано или поздно вам нужно будет иметь возможность сделать этот вид вещей, поэтому, если это немного сложно, теперь ваш шанс узнать о таком виде глубоких файловых систем …)

… и Ta da!, Новая папка создана с следующим файлом внутри

# 2to3 example.py
name = input("What is your name? ")
for i in range(10):
    print(name)

Довольно аккуратно да?

Несколько подробностей о том, что произошло там:

  • Флаг -w был использован для включения обратной записи, который применяет изменения в файл. Без этого вы получаете просто «пробег теста».
  • -n отключает резервные копии. Вы можете пожелать этому.

Вы также можете поставить 2-3.пи В вашем системном пути, если вы хотите использовать его много.

Сценарий для преобразования всех файлов Python 2 в папку в Python 3

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

import os


def makepython3():
    """
    Transforms all python 2 files in the current folder into python 3 files and places them in new folder.
    Original files are not affected.
    """
    files = os.listdir('.')

    current_folder = '.'
    destination_folder= 'py3'

    if not os.path.exists(ex3folder):
        os.mkdir(ex3folder)

    for f in files:
        os.system('cp {} {}'.format(current_folder + os.sep + f, destination_folder+ os.sep + f))
        if f.endswith('.py'):
            os.system(r'"C:\Program Files (x86)\Python38-32\Tools\scripts\2to3.py" -w -n --no-diffs {}'.format(
                destination_folder+ os.sep + f))

    print('All done!')


if __name__ == '__main__':
    makepython3()

Несколько баллов об этом коде:

  • Вам нужно найти путь к 2-3.пи Как обсуждалось выше и заменить OS.System (R '«C: \ Program Files (x86) \ python38-32 \ tools \ screpts \ 2to3.py" .. с правильным путем для вашей системы
  • Он копирует все файлы в новую папку и преобразует файлы Python
  • Вы можете назвать папку назначения, что вы хотите
  • Он должен работать с перекрестной платформой, поскольку мы осторожны, чтобы использовать OS.SEP и т. д., а не полагаться на жесткое кодирование путей

Это, возможно, кажется, что много Faff, чтобы получить старый код, но я думаю, что стоит усилий, узнав, как сделать эти преобразования, поскольку там столько великого кода Python 2. Мне было бы любопытно услышать любой наследный код, который вы нашли, что вы преобразуете в Python 3 – почему не дайте мне знать в комментариях?

Счастливые вычисления.