Обратите внимание, что я больше не обновляю этот ответ. У меня гораздо больше вопросов и ответов по Python 3 на моем личном сайте по адресу http://python-notes.curiousefficiency.org/en/latest/python3/questions_and_answers.html.
Предыдущий ответ:
(Обновление статуса, сентябрь 2012 г.)
Мы (то есть разработчики ядра Python) предсказывали, когда Python 3.0 был выпущен, что для 3.x потребуется около 5 лет, чтобы стать выбором «по умолчанию» для новых проектов серии 2.x. Именно благодаря этому прогнозу запланированный период обслуживания для версии 2.7 такой долгий.
В первоначальном выпуске Python 3.0 также обнаружились некоторые критические проблемы с низкой производительностью ввода-вывода, которые сделали его практически непригодным для использования в большинстве практических целей, поэтому имеет смысл начинать сроки с выпуска Python 3.1 в конце июня 2009 года. Проблемы с производительностью ввода-вывода также являются причиной отсутствия выпусков поддержки 3.0.z: нет веской причины, по которой кто-то захочет придерживаться версии 3.0 вместо обновления до 3.1).
На момент написания статьи (сентябрь 2012 года) это означает, что в настоящее время мы находимся в процессе перехода чуть более 3 лет, и этот прогноз, похоже, все еще идет.
В то время как люди, печатающие код Python 3, чаще всего укушаются синтаксическими изменениями, такими как print
превращение в функцию, на самом деле это не проблема для переноса библиотеки, потому что 2to3
инструмент автоматического преобразования справляется с этим довольно счастливо.
Самая большая проблема на практике - это семантическая проблема: Python 3 не позволяет вам играть быстро и свободно с текстовыми кодировками, как это делает Python 2. Это и его самое большое преимущество перед Python 2, но также и величайший барьер для портирования: вы должны исправить проблемы с обработкой Unicode, чтобы заставить порт работать правильно (тогда как в 2.x, большая часть этого кода молча создавала некорректные данные с помощью не входящие в ASCII входные данные, создающие впечатление работы, особенно в средах, где не-ASCII данные встречаются редко).
Даже у стандартной библиотеки в Python 3.0 и 3.1 все еще были проблемы с обработкой Unicode, что затрудняло перенос большого количества библиотек (особенно связанных с веб-сервисами).
3.2 решает многие из этих проблем, обеспечивая гораздо лучшую цель для библиотек и сред, таких как Django. 3.2 также принесла первую рабочую версию wsgiref
(основной стандарт, используемый для связи между веб-серверами и веб-приложениями, написанными на Python) для 3.x, что было необходимой предпосылкой для принятия в веб-пространстве.
Основная зависимость , как NumPy и SciPy теперь было перенесена, установка и управление зависимостями инструменты , такие как zc.buildout
, pip
и virtualenv
доступны для 3.x, релиз Pyramid 1.3 поддерживает Python 3.2, предстоящая Джанго 1,5 релиза включает в себя экспериментальную поддержку Python 3, и выпуска 12,0 Twisted Network Framework отказался от поддержки Python 2.5, чтобы проложить путь для создания Python 3-совместимой версии.
В дополнение к прогрессу в библиотеках и инфраструктурах совместимости с Python 3, популярная JIT-скомпилированная реализация интерпретатора PyPy активно работает над поддержкой Python 3.
Инструменты для управления процессом миграции также заметно улучшились. В дополнение к 2to3
инструменту, предоставленному как часть CPython (который сейчас считается наиболее подходящим для одноразовых преобразований приложений, которым не требуется поддерживать поддержку для серии 2.x), существует также python-modernize
, который использует 2to3
инфраструктуру для таргетинга. (большое) общее подмножество Python 2 и Python 3. Этот инструмент создает единую базу кода, которая будет работать на Python 2.6+ и Python 3.2+ с помощью six
библиотеки совместимости. Релиз Python 3.3 также устраняет одну из основных причин «шума» при миграции существующих приложений, поддерживающих Unicode: Python 3.3 снова поддерживает префикс «u» для строковых литералов (на самом деле это не так.что - нибудь в Python 3 - это только что было восстановлено , чтобы избежать случайного внесения перехода на Python 3 труднее для пользователей , которые уже правильно отличившихся их текст и бинарные литералы в Python 2).
Таким образом, мы на самом деле очень довольны тем, как идут дела, - у нас осталось почти 2 года на нашем исходном временном интервале, и изменения хорошо отражаются во всей экосистеме Python.
Так как многие проекты не курируют свои метаданные Python Package Index должным образом, а некоторые проекты с менее активными сопровождающими были разветвлены для добавления поддержки Python 3, чисто автоматические сканеры PyPI по-прежнему дают слишком негативное представление о состоянии библиотеки Python 3 служба поддержки.
Предпочтительной альтернативой для получения информации об уровне поддержки Python 3 в PyPI является http://py3ksupport.appspot.com/
Этот список лично курирует Бретт Кэннон (давний разработчик ядра Python) для учета неверных метаданных проекта, поддержки Python 3, которая есть в инструментах управления исходным кодом, но еще не в официальном выпуске, и проектов, которые имеют более современные ветки или альтернативы, которые поддерживают Python 3. Во многих случаях в библиотеках, которые еще не доступны в Python 3, отсутствуют ключевые зависимости, и / или отсутствие поддержки Python 3 в других проектах уменьшает пользовательский спрос (например, как только базовая структура Django доступна в Python 3, связанные инструменты, такие как South и django-celery, с большей вероятностью добавят поддержку Python 3, а наличие поддержки Python 3 в Pyramid и Django повышает вероятность того, что поддержка Python 3 будет реализована в других инструментах, таких как gevent).
Сайт по адресу http://getpython3.com/ содержит несколько отличных ссылок на книги и другие ресурсы для Python 3, определяет некоторые ключевые библиотеки и платформы, которые уже поддерживают Python 3, а также предоставляет некоторую информацию о том, как разработчики могут обращаться за финансовой помощью к PSF в портировании ключевых проектов на Python 3.
Другим хорошим ресурсом является вики-страница сообщества, посвященная факторам, которые необходимо учитывать при выборе версии Python для нового проекта: http://wiki.python.org/moin/Python2orPython3