fa
Feedback
Хитрый Питон

Хитрый Питон

رفتن به کانال در Telegram

Я много читаю и делюсь в этом канале заинтересовавшими меня материалами, в основном про Python. @korneevm

نمایش بیشتر
2 505
مشترکین
اطلاعاتی وجود ندارد24 ساعت
+27 روز
+130 روز
آرشیو پست ها
YAML в последние годы набрал огромную популярность, но наверное самая большая проблема с ним в том, что он выглядит просто, но на самом деле формат очень замороченный. Спецификация состоит из 10-и глав https://yaml.org/spec/1.2.2/. Честно признаюсь - я не осилил прочитать ее полностью, думаю, как и большинство людей, активно использующих yaml. И вот тут мы подходим к теме сегодняшней статьи. Из-за того, что формат сложный, но с ним пытаются работать как с простым, есть много неочевидных способов поломать yaml`-документ. Например, ключи словаря в `yaml могут быть любого типа, не только строками. Если это совместить с тем, что yaml считает, что on — это True, а off — это False, то вот этот пример из Quickstart-а Github Actions:
on: [push]
будет прочитан как:
True: ['push']
Интересно, в Github Actions свой, пропатченый парсер или они on и True в ключах считают одним и тем же? В общем вот хорошая статья, в которой разбирается этот и многие другие неочевидные ловушки формата. Очень рекомендую всем, кто сталкивается с необходимостью писать/править YAML https://ruudvanasseldonk.com/2023/01/11/the-yaml-document-from-hell

Вышел релиз SQLAlchemy 2.0, получается довольно интересно: - Полная поддержка типов: ORM-модели теперь можно делать полностью типизированные, результаты запросов тоже типизированы - Теперь ORM-модели можно объявлять как MappedAsDataclass и в этом случае на выходе получатся полноценные датаклассы - Для массовых добавлений/изменений вместо bulk_* методов теперь можно использовать insert-ы и update-ы, которые стали достаточно умными, чтобы делать это одним запросом и поддерживать .returning() - C-расширения переписали на Cython и обещают повышение их производительности - Поддержка нового psycopg3 (aka "просто psycopg") Резюмируя - очень здорово, что в довольно "олдскульный" SQLAlchemy затащили поддержку всяких современных фич языка. Будет интересно попробовать это все. Статья про изменения в 2.0 https://docs.sqlalchemy.org/en/20/changelog/whatsnew_20.html QuickStart, в котором показан новый подход к объявлению моделей https://docs.sqlalchemy.org/en/20/orm/quickstart.html

Послезавтра, 27 января в 14:00 по Москве проведем прямую трансляцию очередного Moscow Python Podcast. В гости придет Иван Самсонов, продакт-менеджер в прикладных исследованиях ИИ во ВКонтакте. Обсудим: • философию работы в команде; • можно ли научить бизнес ставить ML задачи; • тренды прикладного ИИ; • исследования и продуктовую разработку в ML; • этичность применения технологий; • настала ли эра ИИ. В ходе трансляции будем отвечать на вопросы и комментарии с Ютуба в прямом эфире. Присоединяйтесь https://youtu.be/K8gDQykx25Q

Если вы еще не смотрели проект msgspec (https://jcristharif.com/msgspec/index.html) - очень рекомендую взглянуть. Это очень сериализатор для json/msgpack, у него удобный синтаксис, похожий на pydantic и по тестам скорости сериализации/десериализации он обгоняет orjson. В общем, быстрая и удобная штука. А теперь перейдем к новости - автор анонсировал поддержку yaml/toml. Правда, для парсинга для этих форматов будет использоваться существующие библиотеки и прибавки производительности можно не ждать. Тем не менее, возможность декларативно описывать, читать/писать и валидировать самые распространенные разные форматы выглядит очень вкусно - https://www.reddit.com/r/Python/comments/10gzbgo/parsing_and_validating_pyprojecttoml_files_with/

Я довольно мало работаю с данными, но, когда возникает задача, привычно беру pandas. Про polaris, конечно, слышал но никогда его не использовал. Сегодня наткнулся на подробное сравнение синтаксиса этих библиотек, и мне прямо очень понравился синтаксис выборок в полярисе. В следующий раз, когда надо будет покрутить набор данных, я попробую взять для этого polaris - https://kevinheavey.github.io/modern-polars/

В качестве пятничного чтения рекомендую большую статью про состояние и перспективы менеджмента пакетов в Питоне. На мой взгляд это одно из самых проблемных мест в экосистеме языка. Есть много инструментов, у каждого из которых свой подход. Нет единого лидера - судя по опросам, top3 самых популярных менеджера, одинаково популярны. Проблемы со стандартизацией - тот же PEP 582 уже несколько лет как завис в непонятном состоянии. В статье довольно много личного авторского отношения и статья довольно длинная. Но если вы интересуетесь тем, что происходит в экосистеме это прямо must read https://chriswarrick.com/blog/2023/01/15/how-to-improve-python-packaging/

Послезавтра, 19 января в 14:00 МСК будем в прямом эфире записывать очередной Moscow Python Podcast. В гости к нам придет Георгий Могелашвили, Engineering Manager в Shopify и основатель GetMentor.dev. Обсудим опыт жизни за рубежом и адаптацию в зарубежной компании, развитие, поиск наставника и всем ли нужно становиться тимлидами. В ходе трансляции будем отвечать на вопросы и комментарии в прямом эфире. Ссылка https://www.youtube.com/watch?v=1mpHfaxy104

Tryo Labs опубликовали ежегодный обзор "Top Python Libraries 2022". Обзор несколько субъективный и смещен в сторону анализа данных/машинного обучения, но все равно но его интересно посомтреть с точки зрения " какие из этих библиотек я знаю/пробовал?". Мне было интересно пробежаться по предыдущим выпуска - самый ранний вышел в 2015 году. https://tryolabs.com/blog/2022/12/26/top-python-libraries-2022

На мой взгляд, одной из больших проблем как у тех, кто приходит в разработку так и у тех, кто довольно давно в ней работает. Это умение не просто хорошо писать код, а умение структурировать проект. Понимать, чем хорошая архитектура отличается от плохой. В книгах часто описываются высокоуровневые абстрактные концепции и дальше возникает вопрос — все это хорошо, но вот у меня есть проект на условной Джанге, как все это применить? На выходных я разбирал закладки и наткнулся на несколько неплохих практических "около архитектурных" гайдов, про которые хочу рассказать: 1. Django Styleguide - гайд который ребята из HackSoftware развивают уже несколько лет. Если вы не читали - очень рекомендую, много хорошего можно утащить для своего проекта. Там хорошо описано как структурировать проект так, чтобы код было легче развивать, поддерживать и тестировать. Гайд постоянно развивается и обновляется https://github.com/HackSoftware/Django-Styleguide 2. Django API Domains - пример применения некоторых принципов Domain-Driven Design в Django. Тут как и в предыдущем гайде использован довольно прагматичный подход - вместо того, чтобы тащить все что есть в DDD, автор предлагает достаточно простую, легко реализуемую и поддерживаемую структуру проекта. Это не "чистый DDD", но лично мне такой подход больше нравится своей простотой. Гайд небольшой и не очень активно развивается, но я все равно рекомендую потратить время и ознакомиться с ним https://phalt.github.io/django-api-domains/ 3. Arch Guide компании BestDoctor - тут я не очень объективен, так как работал в BestDoctor-е 🙂 Тем не менее этот гайд стоит того, чтобы с ним ознакомиться. Он основан на Django Styleguide из п.1, но на мой взгляд довольно сильно от него отличается. Многие вещи тут зафиксированы более строго, так как это гайд от команды, которая поддерживает один большой продукт со сложной бизнес-логикой. Рекомендую потратить на него свое время и почитать его - там много чего можно почерпнуть интересного. Ну и это единственный гайд из сегодняшней подборки на русском https://github.com/best-doctor/arch-guide/tree/main/ru Ну и подводя итог хочу повторить то, что написано в двух первых гайдах. Это не инструкции, которым надо в точности следовать. Это скорее набор подсказок и принципов, из которых имеет смысл выбрать то, что вам покажется разумным и полезным в своих проектах. P.S. Я попробовал включить комментарии в канале, надеюсь сработает 🙂 Если у вас есть другие хорошие гайды по архитектуре python-веб-приложений - кидайте в комменты, я по итогам сделаю еще один пост.

С наступающим! Пусть новый год будет к нам всем добрее, чем старый. И больше питончика вам в новом году :) 🐍

Закинули резюме того, что обсуждали на предновогоднем подкасте на Хабре https://habr.com/ru/post/708204/ Те, кто предпочитает читать выжимку прослушиванию подкаста - велкам

Наткнулся на интересный gist Python People - список людей из глобального python-сообщества со ссылками на их twitter, github и mastodon. Если вы ищите "кого-бы почитать интересного про python" то посмотрите на людей из этого списка https://gist.github.com/samuelcolvin/1743d8919acb465c1fbbcea2c3cdaf3e

Привет, в эту пятницу в 14:00 МСК буду вести прямой эфир Moscow Python Podcast. Обсуждаем итоги года в python-разработке, приходите, задавайте ввопросы и вообще участвуйте 🙂 Ссылка - https://www.youtube.com/watch?v=Mq3Tkgrczi0 P.S. Конечно, подкаст будет как всегда доступен в записи через некоторое время после эфира

В среду 02 ноября, в 19:00 мск пройдет Python meetup online 1. Куда двигается python в 2022 году? Денис Аникин — Райффайзенба
В среду 02 ноября, в 19:00 мск пройдет Python meetup online 1. Куда двигается python в 2022 году? Денис Аникин — Райффайзенбанк Расскажу о том куда двигается python: в первую очередь, о том как, когда и зачем он ускоряется, о nogil, cinder и прочих нововведениях.   2. Тестирование АПИ при помощи Django - Алексей Шарыпов VK История написания сервиса для тестирования черного ящика без тестов и документации, написанном на малоизвестном языке   3. Распознаем интересные моменты в матчах Dota 2 - Савостьянов Дмитрий — Nordcurrent В рамках доклада я расскажу как искать хайлайты в матчах Dota 2. Продемонстрирую, как парсить реплеи матчей и записи стримов на YouTube. Кратко обсудим архитектуры нейросетей BERT и TrOCR Регистрация - https://meetups.evrone.ru/python-meetup-online-1?utm_source=tg&utm_medium=tricky_python&utm_campaign=online_python_meetup

Сегодня в 8 вечера по Москве (5pm UTC) по Москве можно будет вживую наблюдать стрим релиза питона 3.11 https://youtu.be/PGZPSWZSkJI

Вышла джанга 4.1 https://www.djangoproject.com/weblog/2022/aug/03/django-41-released/ из интересного: 1. Поддержка асинхронных запросов в ORM, но магическим образом запросы асинхронными не станут, надо в явном виде вызывать начинающиеся с a методы типа .afirst() вместо .first() 2. В class-based views можно делать асинхронные методы 3. Meta.constraints теперь проверяются во время валидации модели. Я не успел посмотреть как это работает, но если модель сама начнет неявно лазить в базу для проверки unique то это скорее минус Еще всякие мелочи, которые показались интересными: - makemigrations --scriptable выглядит как удобная для использования в CI штука - новая команда optimizemigration обещает некие оптимизации для миграций, интеерсно будет посмотреть как это работает - поддержка пеерименования индексов в миграциях - bulk_create() теперь кажется умеет делать update если такая строка уже есть в базе - iterator() научили делать prefetch_related - добавили механизм ротирования SEKRET_KEY-а https://docs.djangoproject.com/en/4.1/ref/settings/#secret-key-fallbacks - много всякого removed/deprecated но ничего для себя интересного в списке я не нашел https://docs.djangoproject.com/en/4.1/releases/4.1/#backwards-incompatible-changes-in-4-1 Попробую на выходных один пет-проджект перевести на 4.1

Работа с датой и временем всегда была довольно мозголомной задачей, даже если не вспоминать про заморочки с часовыми поясами. Вообще про часовые пояса очень часто забывают, особенно если пишут прототип "для себя". В этом докладе с PyCon-а хороша разобрана тема с тем, как устроена работа с таймзонами в питоне, какие есть подводные камни и как делать правильно https://www.youtube.com/watch?v=XZlPXLsSU2U&list=PL2Uw4_HvXqvYeXy8ab7iRHjA-9HiYhRQl&index=21 Резюме - всячески рекомендую

Следующий доклад, который я сегодня посмотрел Bootstrapping Your Local Python Environment - https://www.youtube.com/watch?v=-YEUFGFHWgQ&list=PL2Uw4_HvXqvYeXy8ab7iRHjA-9HiYhRQl&index=18 В самом начале показалось что, как и предыдущий уйдет в голую (и малополезную) теорию - "No SoDo" и вот это все. Но дальше докладчик довольно подробно показал работу pyenv, который думаю далеко не все знают и используют. Я для себя узнал про pipx, который позволяет удобно устанавливать python-утилиты. В целом он вкратце упомянул наверное большинство более-менее распространённых инструментов для управления версиями языка и зависимостями. В конце рассказал про мои любимые piptools. Резюме - никаких откровений, но как вводная для тех кто знает только python -m venv будет полезно.

Как обещал, начну рассказывать свои впечатления о докладах с PyCon US. Первый доклад, который я посмотрел - "Best Practices for Continuous Integration in Python" https://www.youtube.com/watch?v=HMlXSiDKWrg&list=PL2Uw4_HvXqvYeXy8ab7iRHjA-9HiYhRQl&index=17 Честно говоря, ожидал большего. В течении 20 минут чувак рассказывает довольно таки очевидные вещи, причем с минимумом прикладных советов - "хороший CI должен быть точным, быстрым и дешевым", "не забывайте пинить версию питона и библиотек", "кеширование - это хорошо" и все в таком духе. Возможно, доклад может показаться интересным новичкам, которые с CI не сталкивались. Но даже в этом случае можно найти более информационно насыщенные видео. Резюме - не рекомендую

На ютуб выложены доклады с прошедшего PyCon US 2022. Я пока успел только посмотреть названия видео и темы докладов показались интересными, буду смотреть в ближайшие недели https://www.youtube.com/watch?v=nWnIRYQrVtk&list=PL2Uw4_HvXqvYeXy8ab7iRHjA-9HiYhRQl