LINUX.ORG.RU

Python 3.13

 , ,


1

5

После года разработки вышла новая стабильная версия интерпретируемого языка программирования Python 3.13. Релиз включает изменения в собственно языке и его стандартной библиотеке. К важнейшим изменениям относятся использование нового интерактивного интерпретатора по умолчанию, экспериментальная поддержка работы в режиме free-threaded (т. е. с отключением global interpreter lock) (PEP 703), и JIT-компилятор (PEP 744).

С этого релиза осуществлён переход на новый цикл релизов Python (Annual Release Cycle for Python, PEP 602), в связи со стремлением расширить период «полной поддержки» новых выпусков:

  • Python 3.9–3.12 имеют полтора года полной поддержки, за ними следует три с половиной года исправления брешей в безопасности.
  • Python 3.13 и более поздние релизы будут иметь два года полной поддержки и три года исправлений уязвимостей.

Продолжается работа по усовершенствованию сообщений об ошибках. Теперь traceback’и по умолчанию подсвечиваются цветом. Встроенная функция locals() теперь имеет определённую семантику для изменения возвращаемого меппинга (PEP 667), а параметры типов (typing.TypeVar, typing.ParamSpec, typing.TypeVarTuple) поддерживают значения по умолчанию (PEP 696).

Изменения стандартной библиотеки включают удаление устаревших API и модулей (aifc, audioop, cgi, cgitb, chunk, crypt, imghdr, mailcap, msilib, nis, nntplib, ossaudiodev, pipes, sndhdr, spwd, sunau, telnetlib, uu и xdrlib), а также привычные улучшения в области дружелюбия к пользователю и корректности. Несколько модулей исключены из поставки в связи с объявлением их устаревшими в Python 3.11 (PEP 594), в том числе инструмент и библиотека 2to3.

Из улучшений безопасности стоит отметить, что ssl.create_default_context() устанавливает флагами по умолчанию ssl.VERIFY_X509_PARTIAL_CHAIN и ssl.VERIFY_X509_STRICT.

Добавлена поддержка платформ: Apple iOS и Android теперь официально поддерживаемые платформы (tier 3) (PEP 730, 738). wasm32-wasi поддерживается на уровне tier 2, прекращена официальная поддержка wasm32-emscripten.

Для более основательного ознакомления с нововведениями релиза, обращайтесь к официальной документации (по библиотеке, по языку). Руководствуйтесь статьей «Переход на Python 3.13» для обновления своих проектов на новую версию языка. Также см. changelog.

>>> Подробности



Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 7)

параметры типов (typing.TypeVar, typing.ParamSpec, typing.TypeVarTuple) поддерживают значения по умолчанию (PEP 696).

И как мы раньше без такого жили 🤣

Rodegast ★★★★★
()
Последнее исправление: Rodegast (всего исправлений: 1)

Смешанные чувства. С одной стороны хорошо что питон развивается, и самое интересное что они выпилили GIL. С другой стороны непрерывный слом обратной совместимости похоже является трендом, это какой то трындец. Мало того что при переходе от py2 к py3 сломали обратную совместимость не решив ни одной родовой травмы языка, так теперь кучу модулей повыкидывали (я их не юзал, но кто тоже наверное юзал!), да еще и 2to3 убрали…

Аффторы видимо думают что все сообщество только и мечтает о непрерывном переписывании питоньего кода? Нет, не мечтает.

AntonI ★★★★★
()
Ответ на: комментарий от AntonI

С одной стороны хорошо что питон развивается, и самое интересное что они выпилили GIL.

Не выпилили они его ещё, он через параметр отключается.

С другой стороны непрерывный слом обратной совместимости

Ну это же python...

Rodegast ★★★★★
()

Жаль JIT пока слабо перформанса отсыпал :(

ac130kz ★★
()
Ответ на: комментарий от Rodegast

Использую Python в своей работе. Отличный инструмент для автоматизации и прототипирования. Всегда радуюсь, когда любимые проекты развиваются, тем более открытые!

nuxster ★★★
()
Ответ на: комментарий от nuxster

Всегда радуюсь, когда любимые проекты развиваются, тем более открытые!

Не всегда выход новой версии означает развитие ;)

Rodegast ★★★★★
()
Ответ на: комментарий от AntonI

Ломание обратной совместимости - тренд у мамкиных смузихлёбов (любителей на синтаксический сахар). Странно для языков программирования. но систематично в песледнее время для SDK и фрейворков.

TechnoMag ★★
()
Последнее исправление: TechnoMag (всего исправлений: 1)
Ответ на: комментарий от Rodegast

Как правило подразумевает ) И хочется в это верить)

nuxster ★★★
()
Ответ на: комментарий от I-Love-Microsoft

ХЗ. Зависит от того как они его выпилили;-)

Вообще конечно баловство все это, python банально не предназначен для написания быстро работающих частей кода.

AntonI ★★★★★
()

python 2 рулит. в чьей нездоровой голове str на байты стало добавлять спереди b' в конечную строку

>>> a = 'abcde'.encode('latin1')
>>> a
b'abcde'
>>> print (str(a))
b'abcde'

тот явно сильно-сильно болел головой

в python2 это, естественно, просто abcde

alt-tab-let ★★
()
Ответ на: комментарий от I-Love-Microsoft

Как это сказалось на многопоточных приложениях?

Нужны бенчмарки, но однопоточные совершенно точно станут медленнее:

Добавлен экспериментальный режим сборки CPython без глобальной блокировки интерпретатора (GIL, Global Interpreter Lock), который включается при помощи опции "--without-gil" и позволяет избавиться от проблемы с распараллеливанием операций на многоядерных системах, вызванной тем, что глобальная блокировка не допускает параллельное обращение к разделяемым объектам из разных потоков. Отключение GIL приводит к дополнительным накладным расходам, вызванным изменениями в сборщике мусора, системе управления памятью и примитивах для организации блокировок. Например, из-за использования подсчёта ссылок для изоляции потоков наблюдается снижение производительности однопоточных сценариев примерно на 10%. При этом подобные накладные расходы могут компенсироваться распараллеливанием операций.

OSBuster
()
Ответ на: комментарий от alt-tab-let

добавлять спереди b' в конечную строку

Так это не текстовая строка. b' указывает на то, что это последовательность байтов.

В Python 3 текстовые строки могут быть только в UTF-8. А текстовых строк ни в latin1, ни в KOI8-R в Python 3 не бывает.

saahriktu ★★★★★
()
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от saahriktu

нахрена при обратной конверсии из байт в строку добавлять это b'??? с какого бодуна это написано? скажите гвиду, что наркотики зло.

alt-tab-let ★★
()
Ответ на: комментарий от saahriktu

я знаю. в любом случае, там куча дичи, и код с python2, где часто используются байты, типа sha-хешей или base64, тупо непортируем.

да даже с нуля, там, где я мог сделать на python2 за 10 минут и 20 строк кода, я в python3 про...бался полдня, плюнул, понял что надо свою обёртку над base64 делать, и в итоге забил на идею, потому что постоянное приведение, выведение и сведение типов просто надоело. в python2 в этой части всё было идеально и ровно так, как мне нужно.

alt-tab-let ★★
()

Jit там немного странно сделан. Я часа три пытался раздуплить как именно происходит замена, но так и не врубился. Туповат, печаль.

А гил - ох сколько кривого кода поляжет если его вырубить. Половина всего что с сетью работает точно сдохнет, там любят глобальные переменные.

Но вообще тренд хороший, производительность это хорошо

upcFrost ★★★★★
()
Ответ на: комментарий от AntonI

и самое интересное что они выпилили GIL

если это эксприментальный режим, то может пройти дофига времени, пока он стабилизируется

так теперь кучу модулей повыкидывали (я их не юзал, но кто тоже наверное юзал!)

а в чём проблема поставить их из pypi?

seiken ★★★★★
()
Ответ на: комментарий от alt-tab-let

я знаю. в любом случае, там куча дичи, и код с python2, где часто используются байты, типа sha-хешей или base64, тупо непортируем.

Вполне портируем. Если разбираться без спешки и не бояться громоздких длинных команд. А потом пару раз пройтись по всему тексту и вычистить лишние преобразования.

да даже с нуля, там, где я мог сделать на python2 за 10 минут и 20 строк кода, я в python3 про…бался полдня, плюнул, понял что надо свою обёртку над base64 делать, и в итоге забил на идею, потому что постоянное приведение, выведение и сведение типов просто надоело. в python2 в этой части всё было идеально и ровно так, как мне нужно.

Сила привычки. Для тех, кто сразу осваивал 3-й, всё достаточно просто.

А вот переучиваться — тяжко!

Что за задача?

question4 ★★★★★
()
Ответ на: комментарий от alt-tab-let

в чьей нездоровой голове str на байты стало добавлять спереди b’ в конечную строку

Это другой тип данных. Неудобно, да. Логичнее было бы оставить байты без префикса, а для UTF-ных строк добавить префикс, например u’

Правда, выглядело бы это уродски. Но тебе бы понравилось?

question4 ★★★★★
()
Ответ на: комментарий от question4

Так unicode строки в третьем не равны utf. А так, конечно, не помешало бы машинные типы как в numpy втащить

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от seiken

кучу модулей повыкидывали (я их не юзал, но кто тоже наверное юзал!)

а в чём проблема поставить их из pypi?

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

question4 ★★★★★
()
Ответ на: комментарий от question4

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

В данном случае даже смерти нет, используй либо python 3.12, либо доделывай пакет сам.

seiken ★★★★★
()
Последнее исправление: seiken (всего исправлений: 1)
Ответ на: комментарий от question4

Str это конвнртация. Оно должно быть идентичным. Оно не должно добавлять b в конечный рнзультат. В pythln 2 всё было идеально, а в 3 они вырвали поражение из лап победы

alt-tab-let ★★
()
Ответ на: комментарий от question4

Если сделать свою обёртку, проверяющую ттпы, иначе это мрак

alt-tab-let ★★
()
Ответ на: комментарий от question4

Уже не важно. Я хотел выпустить одну приколюху, которую в python 2 сделал бы за 10 минут. Уже не хочу

Python 3 не решил ни одной моей проблемы. Потому что у меня не быдюло проблем с python2. Зато создал кучу новых.

alt-tab-let ★★
()
Ответ на: комментарий от seiken

В том что это надо делать? Про py2 тоже так все говорили, но с каждым годом это все труднее и труднее.

AntonI ★★★★★
()
Ответ на: комментарий от question4

вычистить лишние преобразования.

В моем случае приходилось лишние преобразования вставлять и это жутко бесит до сих пор.

AntonI ★★★★★
()
Ответ на: комментарий от AntonI

непрерывный слом обратной совместимости

Это бывает, но ничего существенного, что нельзя было бы пофиксить за один-два дня на большой проектной базе. Единственное, что хочется вставить в одно место кочергу за периодически ломаемое API asyncio.

Мало того что при переходе от py2 к py3 сломали обратную совместимость не решив ни одной родовой травмы языка

А вот это полнейшая чушь. Как минимум исправили строки.

liksys ★★★★
()
Ответ на: комментарий от alt-tab-let

Я хотел выпустить одну приколюху, которую в python 2 сделал бы за 10 минут

https://chat.deepseek.com/ он код лучше тебя пишет, инфа сотка. Попроси нейро господина написать код… Да, все идет к тому, что программисты вымрут и останутся лишь «специализды» чьей квалификации не хватает для освоения Python 3, но хватит на составляение молитвы (молитва от слова мольба, те просьба) к Духу из Машины

Python 3 не решил ни одной моей проблемы

Как и ты не решил ни одной из проблем его

Потому что у меня не быдюло проблем с python2

Сиди дальше на Python 2

Зато создал кучу новых

Сидел бы на Python 2…

rtxtxtrx ★★
()
Ответ на: комментарий от alt-tab-let

Хотя я от этого кучу всего потерял и ничего не приобрёл

alt-tab-let ★★
()
Ответ на: комментарий от alt-tab-let

Какие либы? В pypi все древнее говно хранится и не удаляется, ты те умеешь через pip install govnoliba==2.2.8 ставить?

rtxtxtrx ★★
()
Ответ на: комментарий от rtxtxtrx

Сборка либ, их зависимости. Не все же либы pure python. К тому же пишу я в linux, а сервер на openbsd. Я тогда обреку себя на большие проблемы, чем неадекватность проектировки py3, где я могу обёртку написать для адекватной работы с байтами. Если бы py2 везде не выкидывали, остался бы на нём и проблем не знал

alt-tab-let ★★
()
Ответ на: комментарий от rtxtxtrx

Зато теперь байт - это число, а не символ

In [5]: a = b'\x00\x11\x22\x33'

In [6]: a[0]
Out[6]: 0

In [7]: a[1]
Out[7]: 17

In [8]: a[2]
Out[8]: 34

In [9]: a[3]
Out[9]: 51
rtxtxtrx ★★
()
~ python2.7
Python 2.7.18 (default, Sep 26 2024, 16:39:11)
[GCC OpenBSD Clang 16.0.6] on openbsd7
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 'abcde'.encode('latin1')
>>> a
'abcde'
>>> print str(a)
abcde

Могли же деды

alt-tab-let ★★
()
Ответ на: комментарий от alt-tab-let

«Деды» типа тебя не могут даже в подсветку синтаксиса. Не позорься, стойко принимай тот факт, что мир менеятся, и если меняться не будешь ты, то умрешь с голода

rtxtxtrx ★★
()
Ответ на: комментарий от rtxtxtrx

Я гоаорю, на коде с кучей sha256 и base64 интересно только первые полдня. В python2 всё было легко и просто. Поведние в python2 правильно, в python3 неадекватно,и в 20 строчек и на клиент и на сервер суммарно ты его не уместишь, за..ёшься гонять енкоды и декоды и везде за всем следить.

alt-tab-let ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.