TG Telegram Group Link
Channel: Питонические атаки
Back to Bottom
Forwarded from ITGram
🐍 debuglater is a Python library that saves stacktrace into a file when your app crashes with an exception. Not just a traceback, but the whole stack, including all variables. It's all is saved using dill, so if you have the same code, you can load the saved stacktrace into a pdb session and debug the crash, as if you could if you had put an actual breakpoint into the place of failure. Pretty cool, huh?
17
Forwarded from Code Mining
Energy Efficiency across Programming Languages

Увлекательное и довольно очевидное по выводам исследование опубликовали коллеги из Португалии в 2017 году.

Рецепт прост: взяли 27 языков, взяли приличный список программ для замера эффективности исполнения (потребление энергии, время, ресурсы памяти), свели результаты в таблички.

Конечно не без выводов, но таблица как бы намекает ;)

Насладиться научным подходом можно здесь.

ЗЫ: только тссс, зелёным не говорите, а то ещё с забастовками против Python будут выходить.
7👍1👎1
Там проект Faster CPython (это где Гвидо ускоряет питон) опубликовал цели, над которыми собираются работать в рамках релиза 3.12.

* Вероятно, наконец станет можно запускать саб-интерпретаторы прямо из кода на питоне. Это позволит занять интерпретаторами все ядра в нескольких потоках (не процессах!), потому что у каждого будет свой собственный GIL.
* Зачатки JIT будут развиваться — добавят больше специализированных оп-кодов, интерпретатор научится заменять оп-коды на более эффективные целыми пачками, а не по одному.
* Сделают структуры в пямяти более компактными. Хотят уменьшить служебную информацию, которая приделывается к каждому объекту, с 5 до 2 машинных слов. Ожидается, что от этого не только уменьшится количество потребляемой памяти для всех программ на питоне, но и кэши процессора будут использоваться эффективнее.

https://github.com/faster-cpython/ideas/wiki/Python-3.12-Goals
👍2531
Forwarded from FEDOR BORSHEV
Типы в Python

Я познакомился с типизацией в Python ещё в 2018 году. Вернее не совсем познакомился — просто мы начали писать какие-то аннотации, без правил: кто хотел, тот и писал. С виду довольно бесполезное занятие — автодополнения не было, по рукам, если накосячил, никто не бил. Дальше такой опциональной типизации мы тогда не пошли — нормального инструментария не было.

Даже в такой типизации была польза: когда пишешь код с типами, начинаешь гораздо больше думать об API и данных, чем об алгоритмах и синтаксисе языка. Сдвиг мышления похож на то, что происходит с TDD — с ходу не видишь пользы, но если вкуришь, то мышление траснформируется и больше не возвращается обратно.

В 2021 году я наконец-то смог сделать проект по фен-шую: с django-stubs и mypy. На мой взгляд, стало гораздо лучше: помимо автодополнения и стандартизации кодовой базы, радикально улучшилась читаемость. Последний пункт особенно важен сейчас, когда я захожу в проекты пару раз в месяц, и с ходу должен понять, над чем работает команда.

С типизацией согласны далеко не все: и в нашей команде и в питоньем мире в целом есть чуваки, которые думают, что типы в коде забирают больше времени, чем экономят. Я этих ребят понимаю — сам несколько лет не мог определиться. До сих пор отдаю решение об обязательности типов в команду проекта: если хотят писать с нестрогими типами или вообще без них — пожалуйста.

В общем для согласных, несогласных и тех, кто хочет радикально улучшить знания по типизации, мы с Марьяной позвали в Школу Никиту Соболева. Если вдруг не знаете Никиту — он один из авторов django-stubs, член Django Software Foundation, коммитит в mypy, typeshed и CPython. Никита прочитает цикл из трёх вебинаров — об устройстве типов, о тайпчекерах и о практическом применении всего этого.

Курс — бесплатный: времена располагают, да и сообществу надо помогать. Для желающих получить обратную связь есть тариф с домашкой и сертификатами, 30% выручки от которого пойдёт на развитие системы типов в Python.

Стартует 11 октября, читаем по одному вебинару в неделю, заканчиваем 31 октября.

Зарегистрироваться →
🔥9👎6💩2👍1
Уже примерно через сутки произойдёт релиз Python 3.11! Как и год назад, весь процесс будет проходить в прямом эфире, будут разные гости с торжественными речами. Смотреть вот тут.

Вы как, готовы уже обновлять все свои программки?
🔥22🎉5💩2
Запустился уже шестой по счету ежегодный опрос Python Developers Survey от PSF и JetBrains. Как обычно, вопросы про версии языка, используемые фреймворки, библиотеки, инструменты и так далее. Надо проходить!

https://surveys.jetbrains.com/s3/c1-python-developers-survey-2022
🤯1👌1
Сегодня с утра меня пайчарм встретил вот такой плашечкой. Умный, чертяга. Чует приближающийся релиз!

#jetbrains
👍15
А вы заценили красивую картинку, которую Pablo подготовил для этого релиза? Уже второй релиз с красивой картинкой. Прям хоть на футболку печатай.

Есть уже первые обновившиеся до 3.11? Делитесь впечатлениями!
👍23
Чем дольше смотрю, тем больше нравится. Символично, что два острова связывает лишь небольшой мост. Кажется, что культура и обычаи на северном и южном островах совсем разные. Только что говорят на одном языке, да и то с разными акцентами. Редко вылажу из своего асинхронного леса, но иногда заносит на юг, и каждый раз я такой: "ёшкин кот, о чём вообще говорят эти волшебники, чем они тут занимаются?".

А вы где на карте обычно обитаете?

Утащено отсюда, автор @Enchantner. Люблю красивые картинки.
20👏4🐳4🥰2
Всем доброго понедельника!

Если кто-то, как и я, ждал новой версии pyenv, чтобы поставить свежих питонов, то идите обновляйтесь. Несколько дней назад там наконец появился стабильный 3.11.0.
15
Вышел релиз 🔤🔤🔤🔤==0.990.

Релиз получился объемный: там добавили базовую поддержку Python 3.11, рекурсивные типы, категории ошибок в вывод, и ещё на сдачу наложили разные ломающие изменения. Готовьтесь, при обновлении наверняка будут новые проблемы в коде, который раньше тайп-чекался без ошибок. Ниже выпишу самые важные, на мой взгляд, пункты, а за полным списком изменений идите в блог mypy.

Теперь по умолчанию отключены неявные Optional типы. Придётся либо явно указывать в тайп хинте, что переменная/аргумент может принимать None, либо переключать настройку, чтобы вернуть старое неявное поведение:

def foo(s: str = None) -> int: ...  # Error!
def foo(s: str | None = None) -> int: ... # OK

Также тайп-чекер теперь перестал игнорировать пустые функции/методы. Раньше они не проверялись, а теперь проверяются и вызывают ошибки:

# Error: Missing return statement (no error before 0.990)
def some_func(arg: str) -> int:
pass

Через forward reference'ы теперь можно определять рекурсивные типы. Для применения рекурсивных типов нужно обязательно явно указывать тип, потому что если не указать, то mypy выведет какой-то многоэтажный нерекурсивный тип. Вот как это выглядит:

NaiveJSON = str | list["NaiveJSON"] | dict[str, "NaiveJSON"]
test_data: NaiveJSON = {"foo": {"bar": "baz"}} # OK

Тайп чекер постепенно становится умнее и строже. Гаечки затягиваются — остаётся всё меньше неявного и игнорируемого. И это хорошо.
Please open Telegram to view this post
VIEW IN TELEGRAM
20👍3
Почти одновременно со стабильным релизом 3.11.0 вышел первый альфа-релиз следующей версии — 3.12.0a1! И начали появляться первые сообщения о том, что нас там ждёт.

Например, питон научили работать с профилировщиком perf из линукса. Можно будет отлаживать код на питоне, и видеть как вызовы функций внутри библиотек на C/Rust, так и вызовы функций внутри самого интерпретатора, и даже то, что происходит в это время в ядре ОС, включая даже всякие счётчики и кэши процессора. Это, конечно, можно было делать и раньше, но теперь, начиная с 3.12, профилировщик будет понимать код на питоне, так что станет куда проще соотносить результаты анализа с конкретными кусками кода в вашей программе.

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

Думаю, это изменение — это побочный результат работы Pablo над профилировщиком memray.

В треде в твиттере больше подробностей и есть ссылка на черновик документации.
👍17🔥1
Разные либы 🚀 продолжают релизить версии с поддержкой Python 3.11.

Напоминаю, что есть такой классный сервис, который отслеживает поддержку конкретной версии популярными библиотеками — https://pyreadiness.org/3.11/.

Сейчас поддержка 3.11 находится на уровне всего 19.4%, но цифра каждый день увеличивается. Это, конечно, не означает, что остальные 80% пакетов не заработают с 3.11. Это лишь значит, что они не задекларировали у себя эту поддержку явно.

Для сравнения, уровень поддержки Python 3.10 сейчас равен 63%, а 3.9 — 75%.
👍7
А ещё в 3.12 в очередной раз улучшат сообщения об ошибках. Интерпретатор научится догадываться о забытых импортах модулей из стандартной библиотеки, а также подсказывать про забытый self.

Взял отсюда и отсюда.
👍17🤔2
О, кстати, прикол. Не задумывался, что лямбда-функции тоже можно аннотировать. Делать я так, конечно, всё равно не буду.

Твит здесь.
❤‍🔥131🥰1
Свежие драмы из интернета.

На днях flake8 переехал на GitHub. Они довольно долго были чуть ли не единственным известным мне проектом, который принципиально хостился на GitLab.

Точнее, переехали они уже полтора года назад, а на днях они удалили свой старый репо на GitLab, который в последнее время был лишь зеркалом. И тут все внезапно заметили этот переезд, потому что у кучи народа отвалились pre-commit хуки локально и начали падать проверки в CI. Напомню, что pre-commit устанавливает свои тулзы именно из git-репозитория по адресу, а не из PyPI по имени пакета. И хоть исправление этой проблемы — это всего лишь поправить 2 символа в ямле, и автор заранее везде, где только можно, анонсировал этот переезд, и даже написал скрипты, которые всё пофиксят автоматически, всё равно мало кто узнал об этом событии заранее. Неприятно получилось, и народ начал роптать.

Мейнтейнер обеих утилит — flake8 и pre-commit (да, их обе поддерживает один человек, и он же поддерживает ещё кучу всего) — рассказал в комментах на реддите, чем был мотивирован этот переезд. Оказывается, причиной послужил неприятный инцидент с криптомайнером, который каким-то необъяснимым образом был запушен каким-то левым чуваком в репо flake8 на гитлабе. Поддержка гитлаба ушла в отрицание и помогла примерно никак: "мы ничего не знаем, вы сами виноваты". Вот 🤷‍♂️

Если используете pre-commit, то проверьте у себя адрес к репо flake8. Запуск pre-commit autoupdate должен по идее всё автоматически обновить правильным образом.
👍20🤔4👏2🖕1
HTML Embed Code:
2025/07/08 18:15:56
Back to Top