Хитрый Питон
2.6K subscribers
4 photos
222 links
Я много читаю и делюсь в этом канале заинтересовавшими меня материалами, в основном про Python. @korneevm
Download Telegram
Наткнулся на интересную либу - 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
Завтра, 7 апреля в 14:00 по Москве будем обсуждать новости питона за март в прямом эфире:

- LTS-релиз Django 4.2;
- Pandas 2.0;
- PyTorch 2.0;
- свежее исследование Django-экосистемы от JetBrains.
- предложение по ускорению list comprehensions;
- отклоненное предложение по аналогу node_modules в Python

Приходите поболтать, ставьте лайки и вот это все 🙂 https://www.youtube.com/watch?v=vtjmhIhdweo
🔥10👍6
Отвечаем на вопросы про Python в прямом эфире
Завтра, 13 апреля в 14:00 по Москве встретимся решили сделать трансяляцию Moscow Python Podcast, полностью посвешенный ответу на вопросы зрителей. Попробуем новый формат 🙂

Оставляйте свои вопросы анонимно в форме или публично в комментариях к трансляции — https://www.youtube.com/watch?v=fd_xgN_zHvk
Присоединяйтесь к нам по ссылке!
🔥10👍2
Внезапно резкие ребята из Sentry удалили пакет codecov с pypi. На редите плачут те, у кого из-за этого развалились пайплайны. Вроде как пакет давно выдавал deprecation warning, но кто их читает? 😉
Хорошо, что ребята из pypi заблокировали возможность сквоттинга названия пакета после его удаления. Иначе кто-нибудь шустрый и сообразительный вполне мог бы выложить что-нибудь прикольное с малварью внутри.
Я свои проекты проверил - у меня он нигде не используется. Проверьте у себя. Вот пост от codecov с извинениями и рекомендациями как правильно починить проблему https://about.codecov.io/blog/message-regarding-the-pypi-package/
Доброе утро 🙂
👍15
Так получилось, что в апреле мне понадобилось апдейтить Django в двух проектах - один здоровенный монолит с 3.1 до 3.2 и маленький moscowpython.ru с 1.9 до 4.2. Как ни странно, переход 3.1->3.2 попил больше крови из-за кучи зависимостей и легаси кода, но рассказать я хочу не об этом.
Я хочу рассказать о небольшой библиотечке django-upgrade, которая оказалось очень полезной при обновлении. Ей нужно указать на какую версию ты хочешь обновиться, после чего она шерстит файлы проекта и заменяет всякие deprecated-штуки на их замену из новых версий - например переписывает использование url() на path() в urlconf-ах, заменяет NullBooleanField() на BooleanField(null=True) и все такое прочее. Полный список того, что она делает можно посмотреть в readme.
Итого — это штука, которая позволяет при обновлении не копаться в ченджлогах, а отдать некоторый кусок рефакторинга пир апдейте автоматике. Рекомендую посмотреть на нее, если вам нужно апгрейдить версию джанги.
Ссылка - https://github.com/adamchainz/django-upgrade
🔥41👍20
28 апреля в 14:00 делаем очередной прямой прямом эфир Moscow Python Podcast, где будем говорить об обучении программированию в целом и python в частности. В гости придет Артем Рудаковский, преподаватель в Лицее Академии Яндекса.

Обсудим:
→ за что взяться начинающему специалисту в первую очередь;
→ как сделать свой первый проект;
→ ресурсы, которые помогут изучить Python;
→ нужно ли всем изучать программирование.

В ходе трансляции будем отвечать на вопросы и комментарии в прямом эфире. Присоединяйтесь к нам по ссылке и ставьте колокольчик, чтобы не забыть.
👍5🔥4
PyPi анонсировали новую фичу для публикации пакетов - Trusted Publishers. Грубо говоря - это возможность использовать короткоживущие OIDC-токены вместо логина/пароля/токена для публикации пакетов на pypi.

Выглядит удобно, самый простой способ начать этим пользоваться - использовать готовый Github Action https://github.com/marketplace/actions/pypi-publish

Ссылка на блог - https://blog.pypi.org/posts/2023-04-20-introducing-trusted-publishers/
👍8
Небезызвестный Армин Ронахер - автор Flask - выложил свою замену pip/poetry/venv/pipenv/hatch и т.д. - `Rye. Написан на rust и явно под влиянием cargo. Выглядит довольно удобно - можно выбрать версию python, сам создает и мейнтейнит pyproject.toml, пакеты ставит с помощью pip-tools под капотом. В общем на странице проекта есть 10-минутное видео, где Армин показывает работу с rye.

Из минусов - похоже он не планирует активно заниматься проектом, поэтому возникает вопрос насколько можно его использовать за пределами личных проектов. Работает пока только на linux и mac. В общем буду посматривать, будет здорово если мы получим не еще один 100500-й менеджер пакетов, а популярный инструмент, который составит хорошую конкуренцию существующим.

Ссылка на репо - https://github.com/mitsuhiko/rye
🔥12👍8👎1
В debian теперь перестанет позволять делать pip install не в виртуальном окружении (https://peps.python.org/pep-0668/). Мотивация - чтобы нельзя было (просто) заменить пакеты установленные apt-ом на пакеты из pypi.

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

В Ubuntu это поведение будет поддержано уже в 23.04. Вот тут новость https://salsa.debian.org/python-team/packages/python-pip/-/blob/master/debian/NEWS
👍27
Вышел urllib3 2.0 над которым работали с 2020 года. Часть фичей похожа на то, к чему многие привыкли в requests:

- Добавили простой интерфейс для запросов urllib3.request() который сазу возвращает response.
- Сделали возможность удобно отправлять и принимать json
- Добавили тайп-хинты

Ссылка на новость о релизе https://sethmlarson.dev/urllib3-2.0.0
👍24
Полезная статья для тех, кто пользуется github actions - довольно простые, но полезные улучшения для пайплайнов. Мне лично приглянулся остановка уже работающего action-а если пришел новый коммит и кеширование установки зависимостей. Утяну себе - https://ashishb.net/tech/common-pitfalls-of-github-actions/
👍10
Сегодня первая пятница месяца и мы как обычно в прямом эфире Moscow Python Podcast удем обсуждать новости за апрель. В темах:

- как Гриша Петров съездил на Европейский PyCon;
- Python Software Foundation считают, что принятие европейского Product Liability Act может поставить под угрозу opensource-разработчиков;
- поддержку trusted publisher от PyPI;
- вышел новый менеджер пакетов от автора Flask;
- релиз одной из основопологающих библиотек - urlib3 2.0;
- в Debian-based дистрибутивах линукса больше нельзя делать pip install вне виртуальных окружений.

Приходите в 14:00 МСК к нам на ютуб https://www.youtube.com/live/vDhn3xE7qN0?feature=share
👍15🔥3
Сегодня 14:00 МСК встретимся в прямом эфире Moscow Python Podcast с Даниилом Мясниковым, руководителем Python-разработки в Контуре. Вместе с гостем обсудим:
→ как занести Python в моностековую компанию, где тысяча разработчиков на C#;
→ сложности, которые видят шарписты в Python;
→ на что обращать внимание при внедрении нового стека.

В ходе трансляции будем отвечать на вопросы и комментарии в прямом эфире. Присоединяйтесь к нам по ссылке и ставьте колокольчик, чтобы не забыть.
🔥5👍3
Привет, последнее время был загружен и не писал новости в канал. Но тем не менее новостной выпуск подкаста записываем сегодня в 14:00 МСК на ютубе - приходите.

В этом выпуске обсудим новости за май:

🟡как прошел Python Language Summit 2023;
🟡субинтерпретаторы, как способ обойти ограничение GIL;
🟡обновления в PyPi;
🟡релиз Python 3.12 beta 1.

➡️Когда: 2 июня в 14:00 по Москве.
➡️Где: онлайн и в записи по ссылке.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10