Хитрый Питон
2.6K subscribers
4 photos
222 links
Я много читаю и делюсь в этом канале заинтересовавшими меня материалами, в основном про Python. @korneevm
Download Telegram
Хороший пост про проблему, про которую довольно легко забыть. Если делать просто asyncio.create_task() не сохраняя ссылку на результат в переменную, то сборщик мусора может прибить задачу до того, как она будет исполнена и получится очень сложно отлавливаемый баг.

В документации это поведение отражено только с 3.9, хотя сама функция появилась в 3.7. Сейчас даже в примере хорошо показали "как правильно", тем не менее думаю многие и не помнят про такое поведение (я вот не помнил). Вот тут расписано подробнее https://textual.textualize.io/blog/2023/02/11/the-heisenbug-lurking-in-your-async-code/
👍18🔥8
Привет, приближается первая пятница месяца, а значит 3 марта в 14:00 по Москве мы снова соберемся онлайн, чтобы обсудить новости python за февраль. В этом выпуске:

• 32 года Python;
• три больших атаки на pypi за месяц, и что с этим собираются делать?;
• три главных тренда 2023 в Python;
• вышел отчет по Python в блокчейне, оказывается python там тоже используют;
• вышел mypy 1.0;
и другие новости.

В ходе трансляции Moscow Python Podcast будем отвечать на вопросы и комментарии в прямом эфире. Присоединяйтесь к нам по ссылке https://www.youtube.com/watch?v=36APuXAnSoo
🔥10👍4
Короткая статья с примером того, как с помощью nox и pyenv гонять тесты на разных версиях питона. Полезно, если вы пишете, к примеру, библиотеку.
Последнее время часто вижу, что люди переходят с tox на nox, в основном потому что его удобнее конфигурировать.
https://sethmlarson.dev/nox-pyenv-all-python-versions
👍11🔥1
Наткнулся на редите на пост об игре Software Engineering Simulator. Идея проста - пишем код на питоне, чтобы управлять различными механизмами и проходить уровни. Графика, прямо скажем, не некстген, но выглядит любопытно, пока у подобные игрушки/тренажеры я только с мультяшной графикой видел. Добавил себе в вишлист - посмотрю на релизе и возможно куплю ребенку, надеюсь его больше чем Codecombat заинтересует https://store.steampowered.com/app/2216770/JOY_OF_PROGRAMMING__Software_Engineering_Simulator/
👍10🔥4
На reddit-е кто-то задал вопрос "Стоит ли использовать FastApi, учитывая что у проекта 400+ открытых issues на гитхабе?" и па-не-слась :)
На самом деле тред интересный, там много внятных обсуждений, кроме того в комменты пришел tiangolo (автор fastapi) и мне было интересно почитать его позицию.
Если делать выжимку то получается следующее:

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

Ссылка на тред https://www.reddit.com/r/Python/comments/11pfgjo/is_something_wrong_with_fastapi/
👍19
Новость не про python, но мне кажется интересной поэтому страдайте:

Вчера вечером OpenAI анонсировали GPT4 - следующую версию сетки, которая используется например в ChatGPT. Основные моменты:

- GPT4 будет доступна на chat.openai.com только коммерческим подписчикам с ограничением по объему использования. OpenAi пока не определились с размером ограничений
- Доступ к api тоже за деньги и нужно записываться в очередь, бесплатный доступ "когда-нибудь"
- Сетка, как и GPT3, не знает ничего позже 2021 года и не умеет учиться на том, что ей пишут
- Обещают, что будет сильно меньше, чем GPT3 галлюцинировать и придумывать факты
- Добавили возможность давать управляющие команды используя роль system — это позволит менять поведение сети перед тем, как начать диалог. С моей точки зрения самая интересная фича, работа с промптами выходит на новый уровень

Вообще в статье очень интересные примеры работы с сеткой, рекомендую хотя бы полистать. Ссылка на статью https://openai.com/research/gpt-4
🔥6👍3
17 марта в 14:00 встретимся в прямом эфире Moscow Python Podcast с Алексеем Андрияшем, тимлидом, YADRO. Вместе с гостем обсудим:

• разработку тулов для разработчиков;
• использование CI/CD;
• как доносить проблемы до девопсов;
• почему Jenkins все еще жив.

В ходе трансляции будем отвечать на вопросы и комментарии в прямом эфире. Присоединяйтесь к нам по ссылке и ставьте колокольчик, чтобы не забыть.
👍3🔥2
Вышел PyTorch 2.0. Признаюсь честно, я его трогал совсем немного и это было довольно давно. Поэтому почитав список изменений я понял, что не понимаю, что крутого в релизе :-). Тем не менее, поздравляю всех кто ее использует с большим мажорным апдейтом. https://pytorch.org/blog/pytorch-2.0-release/
👍7
Последние несколько месяцев регулярно выходят новости в стиле "на pypi залили еще 100500 пакетов с названиями, похожими на популярные библиотеки и злодейским кодом внутри". Эта схема как-то работает потому, что особенно новички часто слышат где-то название библиотеки и ставят ее, не посмотрев внимательно, что это за код.

На realpython.com вышла статья, которая рассказывает том, как оценить качество либы перед тем, как начать ее использовать. В принципе ничего сложного, но как много людей, к примеру, обращают внимание на то, под какой лицензией выпущена библиотека?

Итак коротко, что они советуют:

- Посмотреть внимательно страницу пакета на pypi, кто автор, сколько было релизов, когда был последний релиз, какой Development Status - если там planning или alfa - точно ли вы хотите тащить к себе подобный код?
- Посмотреть страницу пакета на Libraries.io, это даст чуть больше информации чем pypi
- Заглянуть в репозиторий на github/gitlab и оценить активность разработки, количество issues, качество readme и т.д.
- Посмотреть, что за лицензия у либы. Это не очень важно для маленьких проектов, но если вы пишете коммерческий софт, проблемная лицензия может потребовать срочно менять библиотеку если к вам придет, например, аудит при получении инвестиций или заключении крупного договора. Поверьте, выпиливать либу проросшую корнями в код может быть очень, хм, интересным опытом.

В общем думайте, что вы скачиваете из интернетов (с) https://realpython.com/python-package-quality/
👍14🔥6
Python meetup (Online)

1. Real-time аналитика в Uchi.ru - как смотреть сложные метрики здесь и сейчас - Андрей Скиба, Uchi.ru

В докладе рассказывается об архитектуре системы real-time аналитики, разработанной в Uchi.ru, а также о примененных в ней подходах и технологиях.

2. FastAPI с нуля до production-ready образа - Алексей Шарыпов, VK

Поделюсь опытом, как запустить FastAPI приложение в продакшне. На простых примерах покажу как собрать контейнер с использованием Poetry.

3. Введение в функциональное программирование на Python - Алексей Каньков, Revizto

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



🗓 29 марта, начало в 19:00 мск, Среда

🌐 ОНЛАЙН

Регистрация на мероприятие
🔥12👍4
Вышло свежее исследование Django-экосистемы от JetBrains. Из интересного:

- за 2022 многие переехали с о старых и неподдерживаемых версий на 3.2/4.1
- забавный пассаж про "3.1 и ниже используют в основном опытные разработчики, а новички выбирают послденюю версию". Подозреваю, что на самом длеле это история о том, что когда ты работаешь с большой легаси кодовой базой обновляться - это каждый раз квест
- htmx набирает популярность и похоже отжимает пользователей у React (1 место) и jQuery (2 место)
- 46% разработчиков прописывают аннотации типов
- black/isrt/pre-commit неплохо прибавили в популярности

Ссылка https://lp.jetbrains.com/django-developer-survey-2022/
👍18
Сегодня будет очередной Moscow Python Meetup, к созданию которых я когда-то приложил руки. Даже если вы не в Москве, можно посмотреть трансляцию https://www.youtube.com/watch?v=v3buzDmoHxA

В программе:

* Лучший язык — это… или Пайтон против Суслика (Евгений Соколов, YADRO)
* Кто такой syslog, зачем читать RFC-* и причём тут Django (Максим Безруков, Ред Софт)
* и секретный доклад от Николая Маркова в Aligned Research Group
🔥12👍2
List comprehensions (выражения типа [x for x in iterable]) в питоне обычно сложновато даются новичкам. Но стоит один раз разобраться с синтаксисом, как понимаешь, насколько это удобный инструмент. Более того, они быстрее чем .append() в список в цикле.

И вот в новом PEP 709 предлагают оптимизировать их работу. Сейчас при переводе list/dict/set comprehension в байткод происходит создание вложенной функции и ее исполнение. Авторы PEP предлагают не создавать эту дополнительную вложенную функцию, а сразу писать в байткоде ее содержимое (inline). Это должно быть безопасно, так как в случае list comprehention мы не можем стандартными средствами в процессе его выполнения как-то повлиять на переменные внутри.

У этого подхода есть большой плюс - ускорение исполнения подобных выражений на 11% на тестах. Из минусов - в трейсбеках больше не будет пункта listcomp и при трейсинге/профилировании не будет видны вход в comprehension и выход из него. На мой взгляд плюсы заметно перевешивают минусы, надеюсь этот PEP примут и внедрят в одном из ближайших релизов.

Ссылка https://peps.python.org/pep-0709/
👍28
Наткнулся на интересную либу - MegaMock, которую позиционируют как более удобную замену для стандартного unittest.mock. В чем удобство:

- делает autospec по аналогии с create_autospec сразу по умолчанию
- принимает на вход не текстовую строку, а прямо объект или функцию, это удобно если делать например рефакторинг средствами IDE
- убирает необходимость в штуках типа with mock.patch() потому что сразу патчит сам и везде
- при патчинге можно для отдельных методов оставлять реальную логику вместо мока

В общем выглядит интересно, попробую в пет-проджект затащить и посмотреть так ли все хорошо https://github.com/JamesHutchison/megamock
👍24
Ребята, которые делают Starlite - еще один интересный веб-фреймворк, написали чуть больше подробностей о версии 2.0. Что интересного обещают:

- они выпиливают pydantic как обязательную зависимость. Можно будет продолжать использовать его, но если нужна скорость, можно взять тот же msgspec
- добавили event bus - возможность отправлять и получать сообщения. Сейчас работает только с in-memory очередью, но к релизу обещают поддержку reddis/rabbitmq
- поддержка key-value хранилищ - in-memory, redis, файлы. Теперь не нужно придумывать свою реализацию для, скажем, кеш-бекенда

Прямо интересно наблюдать за проектом, развивается активно и притаскивают интересные фичи. Полностью анонс можно прочитать на reddit https://www.reddit.com/r/Python/comments/122ld24/starlite_updates_march_22_20_is_coming/
🔥12👍3
В пятницу, 31 марта в 14:00 встретимся в прямом эфире Moscow Python Podcast с Мстиславом Казаковым, тимлидом в Usetech. Вместе с гостем обсудим:

• наблюдаемость(observability) сервисов;
• стандартизацию логов;
• подключение Elastic APM к Django-приложению;
• использование Openmetrics для выгрузки данных.

В ходе трансляции будем отвечать на вопросы и комментарии в прямом эфире. Присоединяйтесь по ссылке и ставьте колокольчик 😀, чтобы не забыть.
👍9🔥6
Если помните, несколько лет назад появилось предложение добавить в path папку __pypackages__ и ставить туда локальные пакеты по аналогии с node_modules. Так вот, после долгих обсуждений это предложение (PEP 582) таки отклонили.

Ставлю ссылку на пост-обоснование от steering council, но если коротко предложение завернули потому, что по факту оно решало только небольшой набор проблем с установкой пакетов. Но про более сложные задачи там сказано "переключайтесь на виртуальные окружения". Например, как ставить пакеты, в которых не только python-файлы, но и, скажем, бинарники.

Да, тем кто только приходит в язык это упростило бы жизнь, но до очень определенного предела и при попытке сделать что-то чуть более сложное им все равно бы пришлось переключаться на виртуальные окружения. А мы бы все получили еще +1 стандарт к итак довольно запутанному процессу управления пакетами в python. https://discuss.python.org/t/pep-582-python-local-packages-directory/963/430
👍9🔥7
Вышел pandas 2.0 релиз, который был во многом ориентирован на улучшение производительности. Что интересного:

- Если раньше pandas работал только поверх numpy, теперь можно выбрать в качестве бекенда apache arrow
- Работа с отсутствующими значениями и строками стала эффективнее при использовании arrow backend
- Copy-on-write - ленивое копирование, при котором реальное копирование данных откладывается до тех пор, пока мы не начнем изменять данные. Это уменьшит количество ошибок, когда меняя данные в срезе мы на самом деле меняем исходный фрейм и при этом не скажется на производительности, когда нам нужно только читать данные
- Числовые индексы теперь могут быть не только 64-х разрядные (`int64`, uint64, `float64`), но и любых других числовых типов
- У datetime и timedelta теперь можно указывать единицу измерения. Если раньше pandas приводил все к наносекундам, теперь можно явно указать что-то типа dtype="datetime64[s]"

Полный список изменений: https://pandas.pydata.org/docs/dev/whatsnew/v2.0.0.html
🔥21👍8
Если вы с помощью pip ставите библиотеку по ссылке, например с гитхаба, то pip сохраняет информацию о том, откуда вы этот пакет поставили в файлик direct_url.json. В новом PEP 710 предлагают расширить эту практику на все пакеты и для пакетов, поставленных из репозиториев типа pypi. Т.е. сохранять для всех пакетов ссылку и хеш.

С одной стороны, это очень "внутреннее" изменение, которое может быть интересно разве что разработчиков менеджеров пакетов. С другой стороны, мне показалось это интересным, так как позволит лучше понимать что, как и откуда устанавливалось на проекте. Особенно в случае, когда используется несколько репозиториев (например pypi и свой) и имена пакетов могут совпадать.

Ссылка на pep https://peps.python.org/pep-0710/
🔥5👍3
Вышел LTS-релиз Django - 4.2. Long Term Support означает, что этот релиз будут поддерживать несколько лет, до 2026 года. Из интересных новинок:

- Реализовали поддержку psycopg3. Сейчас поддерживаются обе либы, но от psycopg2 планируют в будущем отказаться
- Добавили возможность оставлять комментарии для таблиц и полей БД
- На смену DEFAULT_FILE_STORAGE и STATICFILES_STORAGE приходит настройка STORAGES, которая позволяет объявлять столько файловых стореджей, сколько нужно
- In-memory file storage, удобная штука для использования в тестах, приятно учитывая, что dj-inmemorystorage уже несколько лет как перестала обновляться
- Минимальная версия postgres теперь - 12-я
- Еще больше поддержки асинхронности - asave(), adelete() и arefresh_from_db() для моделей, плюс aadd(), aclear(), aremove() и aset() для relation managers

И самое главное - добавили темную тему для админки. Все, кто не использовал Джангу из-за отсутствия темной темы, могут начинать использовать 🙂

Полный список изменений https://docs.djangoproject.com/en/4.2/releases/4.2/
🔥25👍3👎2