Советы по обновлению до python 3.0?[дубликат]

StackOverflow https://stackoverflow.com/questions/1072028

  •  21-08-2019
  •  | 
  •  

Вопрос

На этот вопрос уже есть ответ здесь:

Итак, с финальными версиями Python 3.0 (а теперь и 3.1) многие люди сталкиваются с проблемой обновления без потери половины своей кодовой базы из-за обратной несовместимости.

Каковы лучшие советы людей, как избежать множества подводных камней, которые почти неизбежно возникнут в результате перехода на python следующего поколения?

Вероятно, хорошее место для начала - "используйте 2to3 для преобразования вашего кода python 2.x в 3.x" :-)

Это было полезно?

Решение

Во-первых, этот вопрос очень похож на Как вы планируете справиться с переходом на Python 3?.Проверьте ответы там.

Существует также Раздел в Python Wiki о переносе приложений на Python 3.x

Тот Самый Примечания к выпуску для python 3.0 содержит раздел о переносе.Я цитирую приведенные там советы:

  1. (Обязательное условие:) Начните с отличного тестового покрытия.
  2. Портировать на Python 2.6.Это должно быть не больше работы, чем средний por от Python 2.x до Python 2.(x + 1).Убедитесь, что все ваши тесты прошли успешно.
  3. (Все еще используется 2.6:) Включите переключатель командной строки -3.Это позволяет получать предупреждения о функциях, которые будут удалены (или изменены) в версии 3.0.Запустите свой набор тестов еще раз и исправьте код, о котором вы получаете предупреждения, до тех пор, пока не останется никаких предупреждений, и все ваши тесты по-прежнему будут проходить.
  4. Запустите переводчик 2to3 из исходного кода в исходный поверх вашего дерева исходного кода.(Смотрите 2to3 - Автоматизированный перевод кода на Python 2-3 для получения дополнительной информации об этом инструменте.) Запустите результат перевода на Python 3.0.Вручную устраните все оставшиеся проблемы, исправляя проблемы до тех пор, пока все тесты не пройдут снова.

Не рекомендуется пытаться писать исходный код, который выполняется без изменений в как Python 2.6, так и 3.0;вам пришлось бы использовать очень искаженный стиль кодирования, напримеризбегание инструкций печати, метаклассы и многое другое.Если вы поддерживаете библиотеку, которая должна поддерживать как Python 2.6, так и Python 3.0, лучшим подходом будет изменить шаг 3 выше, отредактировав 2.6 версию исходного кода и повторный запуск транслятора 2to3 вместо редактирования версии 3.0 исходного кода.

Другие советы

Я пишу бесплатную книгу об этом.Вы можете прочитать это здесь:

http://python3porting.com/

Короче говоря:

  1. Убедитесь, что все ваши сторонние библиотеки доступны для Python 3.
  2. Подготовьте свой код, удалив распространенные двусмысленности:
    • Используйте //, если вы действительно хотите целочисленное деление.
    • Убедитесь, что вы помечаете двоичные файлы флагом "b" при их открытии, чтобы четко указать, подразумеваете ли вы, что данные являются двоичными или нет.
  3. Чем выше охват вашего тестирования, тем лучше.
  4. Убедитесь, что он запускается без предупреждений в разделе "Python 2.7 -3".
  5. Теперь запустите 2to3.
  6. Исправьте все ошибки.

Вот и все, более или менее.

Без действительно веской причины для обновления я бы придерживался того, что работает.Я посмотрел на обновление скриптов, которые использую ежедневно, и это было слишком много работы без видимой пользы.

"Если он не сломался, не чини его!"

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top