Недавно вышла пачка минорных релизов CPython.
Очередная порция исправлений и улучшений попала в 3.11.3. Тем временем, метрика поддержки ветки 3.11 в библиотеках достигла уровня 43.1%, что всё ещё сильно меньше поддержки ветки 3.10 (70.6%).
Впрочем, это не нужно понимать как причину оставаться на 3.10, потому что эта ветка на днях получила последний баг-фикс релиз (3.10.11) и перешла в режим "security fixes only". Всё, больше никакие исправления багов бэкпортироваться не будут, а будут только исправления уязвимостей. Как всегда, переход в этот статус наступает очень внезапно и выглядит как что-то преждевременное. Но и команду разработки тоже могу понять: поддерживать хотя бы даже две параллельные ветки активно развивающегося проекта — это уже сложно, а три — это вообще боль, боль в кубе.
Кстати, а вы знали, что 3.7 через пару месяцев депрекейтнут окончательно? Успели уже везде обновиться?
Очередная порция исправлений и улучшений попала в 3.11.3. Тем временем, метрика поддержки ветки 3.11 в библиотеках достигла уровня 43.1%, что всё ещё сильно меньше поддержки ветки 3.10 (70.6%).
Впрочем, это не нужно понимать как причину оставаться на 3.10, потому что эта ветка на днях получила последний баг-фикс релиз (3.10.11) и перешла в режим "security fixes only". Всё, больше никакие исправления багов бэкпортироваться не будут, а будут только исправления уязвимостей. Как всегда, переход в этот статус наступает очень внезапно и выглядит как что-то преждевременное. Но и команду разработки тоже могу понять: поддерживать хотя бы даже две параллельные ветки активно развивающегося проекта — это уже сложно, а три — это вообще боль, боль в кубе.
Кстати, а вы знали, что 3.7 через пару месяцев депрекейтнут окончательно? Успели уже везде обновиться?
blog.python.org
Python Insider: Python 3.11.3, Python 3.10.11 and 3.12.0 alpha 7 are available
Charlie Marsh, автор быстрого линтера #ruff, основал компанию Astral и сразу же поднял $4m инвестиций. Автор планирует продолжать работать над ruff и другими инструментами для разработчиков фулл-тайм (как он это уже и так делает последние полгода), только уже не один, а с командой. На данный момент в компании 3 разработчика, включая самого Чарли, и это прям звёздная команда, собранная из разработчиков разных популярных и важных проектов (Maturin, Rome).
Обещают, что ruff останется опенсорсным с пермиссивной лицензией, а вокруг него компания будет делать какие-то платные сервисы. Короче, очень похоже на подход Pydantic. Эта весна чёт богата на компании вокруг опенсорса.
Ruff ещё не выпустили стабильную версию, проект всё ещё в разработке. Видимо, раз дали денег, то инвесторы считают, что этот проект просто обязан выстрелить.
https://astral.sh/blog/announcing-astral-the-company-behind-ruff
Обещают, что ruff останется опенсорсным с пермиссивной лицензией, а вокруг него компания будет делать какие-то платные сервисы. Короче, очень похоже на подход Pydantic. Эта весна чёт богата на компании вокруг опенсорса.
Ruff ещё не выпустили стабильную версию, проект всё ещё в разработке. Видимо, раз дали денег, то инвесторы считают, что этот проект просто обязан выстрелить.
https://astral.sh/blog/announcing-astral-the-company-behind-ruff
Telegram
Питонические атаки
В чате-комментах сообщают, что Pydantic поднял бабла 💸
Теперь это не просто библиотечка для парсинга/валидации данных. Это теперь вообще-то корпорация Pydantic Services с автором библиотеки, Samuel Colvin, во главе! Новоиспечённый стартап получил 4.7 миллиона…
Теперь это не просто библиотечка для парсинга/валидации данных. Это теперь вообще-то корпорация Pydantic Services с автором библиотеки, Samuel Colvin, во главе! Новоиспечённый стартап получил 4.7 миллиона…
В Python 3.12 приняли PEP 695 – Type Parameter Syntax, который добавляет новый синтаксис для дженерик классов, функций и алиасов для типов. Это вот то, где используется
Давайте посмотрим на изменение на примере функции с переменными типа (смотри скриншот 1). Если что, это нужно для того, чтобы связать типы нескольких параметров и возвращаемых значений функции. Вот функция принимает на вход значение (любого типа), а на выходе она отдаст значение такого же типа. Часто используемый сценарий, как мне кажется. Такое стало писать намного приятнее. Не нужно отдельно писать это явное, некрасивое определение
Кроме того, тайп-алиасы с переменными типов тоже стало писать намного легче (смотри скриншот 2). Тоже отпала необходимость явно определять
Про классы-дженерики писать не буду, но если вы такое практикуете, то сходите почитайте док. Там интересно.
Отдельно прикольно, что больше не надо думать о ковариантности, контравариантности и инвариантности переменных типов. Эти концепции никуда не уходят, но теперь тайп-чекер будет сам понимать, с чем он работает, без необходимости явного указания. Это вот та штука, из-за которой приходится аргументы функций аннотировать как
Если не думать о том, что это изменение создаёт новую область видимости для имён (scope) с довольно странной механикой работы, добавляет новое мягкое ключевое слово, добавляет новый сорт
typing.TypeVar
(спойлер: больше нет). Да, это снова про тайп хинты. Похоже, это самая активно развивающаяся область языка за последние 10 лет.Давайте посмотрим на изменение на примере функции с переменными типа (смотри скриншот 1). Если что, это нужно для того, чтобы связать типы нескольких параметров и возвращаемых значений функции. Вот функция принимает на вход значение (любого типа), а на выходе она отдаст значение такого же типа. Часто используемый сценарий, как мне кажется. Такое стало писать намного приятнее. Не нужно отдельно писать это явное, некрасивое определение
typing.TypeVar
, где ты дважды пишешь одно и то же имя переменной и засоряешь странными однобуквенными именами глобальную область видимости. В 3.12 можно будет просто прям при определении функции задекларировать своё намерение: "я буду тут использовать переменную типа T
", и аннотируешь ей все связанные аргументы и возвращаемые значения. Офигенно? О да.Кроме того, тайп-алиасы с переменными типов тоже стало писать намного легче (смотри скриншот 2). Тоже отпала необходимость явно определять
TypeVar
. Но теперь в языке появляется новое "мягкое" ключевое слово type
, которое ведёт себя по-разному в зависимости от контекста (как async
). Забавно, что это нововведение фактически депрекейтит PEP 613 про тайп алиасы, который появился в 3.10. Я даже толком не успел начать им пользоваться. Всё так быстро меняется.Про классы-дженерики писать не буду, но если вы такое практикуете, то сходите почитайте док. Там интересно.
Отдельно прикольно, что больше не надо думать о ковариантности, контравариантности и инвариантности переменных типов. Эти концепции никуда не уходят, но теперь тайп-чекер будет сам понимать, с чем он работает, без необходимости явного указания. Это вот та штука, из-за которой приходится аргументы функций аннотировать как
Sequence[Parent]
вместо list[Parent]
и которую я долго не мог осознать. Кстати, недавно смотрел хороший видос про эти концепции. Разобрался, вроде. Блин, не может ли недостаток понятных материалов на эту тему быть связан с тем, что эти слова так сложно писать и произносить? Я минуту набирал и перечитывал эти три слова в начале абзаца, да и то наверняка ошибся.Если не думать о том, что это изменение создаёт новую область видимости для имён (scope) с довольно странной механикой работы, добавляет новое мягкое ключевое слово, добавляет новый сорт
TypeVar
(теперь у нас есть "традиционные" и новые, и их нельзя смешивать между собой) и в целом делает язык синтаксически сложнее (давайте писать квадратные скобки вообще везде), то это абсолютно точно движение в правильную сторону, шаг навстречу программисту. Бойлерплейта станет меньше, импортов из typing
меньше, сложных концепций меньше, пространства для ошибки тоже. Да и выглядит относительно предыдущего варианта намного приятнее. Мне нравится.Python Enhancement Proposals (PEPs)
PEP 695 – Type Parameter Syntax | peps.python.org
В AWS Lambda наконец-то добавили рантайм Python 3.10. Вот интересно, они специально зачем-то добавляют новые рантаймы с отставанием в полтора года? Впрочем, все, кто серьёзно занимается разработкой serverless-приложений, наверняка просто используют контейнеры с каким нужно питоном внутри.
Тем временем в Yandex Cloud Functions есть рантайм с Python 3.11. Но почему-то нет 3.10 🤔
Тем временем в Yandex Cloud Functions есть рантайм с Python 3.11. Но почему-то нет 3.10 🤔
Amazon
Python 3.10 runtime now available in AWS Lambda | Amazon Web Services
You can build and deploy functions using Python 3.10 using the AWS Management Console, AWS CLI, AWS SDK, AWS SAM, AWS CDK, or your choice of Infrastructure as Code (IaC).
Forwarded from Python Заметки
Популярность имеет свои минусы. Чем популярней язык программирования, тем выше его распространённость, а значит найдутся те кто поспешит воспользоваться этим.
С ростом популярности Python всё больше на PyPi появляется вредоносных пакетов. Трояны, стиллеры и доставщики более опасных вредоносов.
Команда PyPi постоянно мониторит подобные случаи но и их возможности достигли предела. В результате сервис временно закрывает возможность заливки новых пакетов и регистрации юзеров.
PyPI new user and new project registrations temporarily suspended
Возможно одной из причин большого наплыва вредоносов является резко возросшая доступность их создания. Сегодня любой, даже не программист, может попросить у ChatGPT написать необходимый код и все инструкции для атаки.
Основной тип атаки - рассчёт на опечатку в названии пакета. Если невнимательный программист случайно установит
Чтобы избежать подобных факапов я рекомендую:
▫️ Всегда работайте в виртуальном окружении, неизвестные проекты устанавливайте внутри контейнеров.
▫️ Используйте файл
▫️ Очень внимательно пишите названия пакетов, а после написания проверьте еще раз. Сверьте с названием из документации.
▫️ После успешных тестов всегда фиксируйте версию пакета. Бывали случаи когда опасный код добавляли в новые версии. К тому же и без этой опасности не рекомендуется ставить по умолчанию последнюю версию.
▫️ Используйте вспомогательные инструменты для проверки безопасности, например https://pyup.io/safety или https://github.com/PyCQA/bandit. Они помогут не только найти опасный код в чужих пакетах, но и ваш код проверит на уязвимости.
Будем надеяться что PyPi переосмыслит методы борьбы с вредоносами, например внедрит ИИ для проверки как симметричный шаг.
#offtop
С ростом популярности Python всё больше на PyPi появляется вредоносных пакетов. Трояны, стиллеры и доставщики более опасных вредоносов.
Команда PyPi постоянно мониторит подобные случаи но и их возможности достигли предела. В результате сервис временно закрывает возможность заливки новых пакетов и регистрации юзеров.
PyPI new user and new project registrations temporarily suspended
Возможно одной из причин большого наплыва вредоносов является резко возросшая доступность их создания. Сегодня любой, даже не программист, может попросить у ChatGPT написать необходимый код и все инструкции для атаки.
Основной тип атаки - рассчёт на опечатку в названии пакета. Если невнимательный программист случайно установит
pilow
или djangoo
, считай что вредонос уже в системе.Чтобы избежать подобных факапов я рекомендую:
▫️ Всегда работайте в виртуальном окружении, неизвестные проекты устанавливайте внутри контейнеров.
▫️ Используйте файл
requirements.txt
вместо ручной установки пакетов▫️ Очень внимательно пишите названия пакетов, а после написания проверьте еще раз. Сверьте с названием из документации.
▫️ После успешных тестов всегда фиксируйте версию пакета. Бывали случаи когда опасный код добавляли в новые версии. К тому же и без этой опасности не рекомендуется ставить по умолчанию последнюю версию.
▫️ Используйте вспомогательные инструменты для проверки безопасности, например https://pyup.io/safety или https://github.com/PyCQA/bandit. Они помогут не только найти опасный код в чужих пакетах, но и ваш код проверит на уязвимости.
Будем надеяться что PyPi переосмыслит методы борьбы с вредоносами, например внедрит ИИ для проверки как симметричный шаг.
#offtop
status.python.org
PyPI new user and new project registrations temporarily suspended.
Python Infrastructure's Status Page - PyPI new user and new project registrations temporarily suspended..
JetBrains добавили в свои IDE ИИ ассистента
Есть режим чата, возможность копипастить сниппеты кода в чат и обратно в редактор, возможность генерить документацию, сообщения для коммитов и придумывать имена переменным. Под капотом сейчас происходят вызовы в OpenAI, а ещё есть несколько моделей поменьше от JetBrains. В будущем хотят интегрировать ещё каких-то провайдеров языковых моделей.
Выделяешь кусок самого мутного кода в проекте, нажимаешь хоткей
Пока что доступно только в EAP-сборках всех IDE на основе IntelliJ IDEA. В будущем фича наверняка станет платной (конечно, счета от OpenAI сами себя не оплатят). Не работает на территории РФ. В прочем, не думаю, что это вызовет у вас какие-то затруднения.
https://blog.jetbrains.com/idea/2023/06/ai-assistant-in-jetbrains-ides/
#jetbrains
Есть режим чата, возможность копипастить сниппеты кода в чат и обратно в редактор, возможность генерить документацию, сообщения для коммитов и придумывать имена переменным. Под капотом сейчас происходят вызовы в OpenAI, а ещё есть несколько моделей поменьше от JetBrains. В будущем хотят интегрировать ещё каких-то провайдеров языковых моделей.
Выделяешь кусок самого мутного кода в проекте, нажимаешь хоткей
Alt/Option+Enter > AI Actions > Explain code
, тут же открывается чат, где заботливый ИИ на чистейшем английском объясняет тебе суть. Правда, видимо, я выбирал слишком мутные куски кода, поэтому мне не особо помогло. Всё равно понравилось.Пока что доступно только в EAP-сборках всех IDE на основе IntelliJ IDEA. В будущем фича наверняка станет платной (конечно, счета от OpenAI сами себя не оплатят). Не работает на территории РФ. В прочем, не думаю, что это вызовет у вас какие-то затруднения.
https://blog.jetbrains.com/idea/2023/06/ai-assistant-in-jetbrains-ides/
#jetbrains
The JetBrains Blog
AI Assistant in JetBrains IDEs | The IntelliJ IDEA Blog
Update, Dec 6: JetBrains AI Assistant is generally available with v.2023.3 or JetBrains IDEs and ReSharper. Read more in the dedicated post. This week’s EAP builds of all IntelliJ-based IDEs an
Ещё одна новость про JetBrains, но вот это уже настоящая революция, а не эти ваши ИИ попсовые.
Наконец-то в PyCharm добавляют встроенную поддержку форматтера black! 🎉
Прямо без каких-либо плагинов, IDE задетектит наличие
Правда, заметил, что люди жалуются на модальное окошко, которое выскакивает на мгновение в процессе форматирования. Ещё пока что нет поддержки
Доступно только в EAP, а по-настоящему опубликуют в версии 2023.2.
https://blog.jetbrains.com/pycharm/2023/07/2023-2-eap-5/
#jetbrains #black
Наконец-то в PyCharm добавляют встроенную поддержку форматтера black! 🎉
Прямо без каких-либо плагинов, IDE задетектит наличие
black
в виртуальном окружении и предложит использовать его вместо дефолтного форматтера пайчарма. Настройки подхватывает из pyproject.toml
. И всё, просто берёт и форматирует!Правда, заметил, что люди жалуются на модальное окошко, которое выскакивает на мгновение в процессе форматирования. Ещё пока что нет поддержки
blackd
, который использовали для ускорения форматирования, но это обещали добавить. Короче, не идеально, но для начала хорошо.Доступно только в EAP, а по-настоящему опубликуют в версии 2023.2.
https://blog.jetbrains.com/pycharm/2023/07/2023-2-eap-5/
#jetbrains #black
Forwarded from Коробка с питоном
Появился PEP 723, который предлагает "встраивать"
Предлагается добавить переменную
К примеру, вот так будет выглядеть скрипт, которому для работы нужна библиотека
#pep
pyproject.toml
в однофайловые скрипты. Предлагается добавить переменную
__pyproject__
, которая будет содержать в себе валидный TOML, описывающий метадату скрипта, в том числе как скрипт запускать и какие зависимости необходимы для запуска.К примеру, вот так будет выглядеть скрипт, которому для работы нужна библиотека
requests
и питон 3.11 или выше:__pyproject__ = """PEP прикольный, что-то такое есть в качестве экспериментального RFC в Rust. Из минусов хотел бы отметить то, что автоматическая установка зависимостей может привести к запуску нежелательного кода. Но решение банальное - перед тем как что-то запускать, проверяйте, что вы запускаете.
[project]
requires-python = ">=3.11"
dependencies = [
"requests<3",
]
"""
import requests
resp = requests.get("https://peps.python.org/api/peps.json")
print(resp.json())
#pep
Python Enhancement Proposals (PEPs)
PEP 723 – Inline script metadata | peps.python.org
Apple рассказывает про часы — точно такие же, как старые, только новее и розовее. А тем временем без больших презентаций происходят куда более интересные вещи. Например, в Ruff появился встроенный форматтер.
Пока что это только экспериментальная альфа-версия, но уже обещают 99% совместимость с Black. Уже можно поставить последнюю версию Ruff и попробовать. Позже в этом году планируется уже пригодный к продакшн использованию релиз.
Пока что это только экспериментальная альфа-версия, но уже обещают 99% совместимость с Black. Уже можно поставить последнюю версию Ruff и попробовать. Позже в этом году планируется уже пригодный к продакшн использованию релиз.
GitHub
Implement autoformat capabilities · Issue #1904 · astral-sh/ruff
This issue is the public kickoff for Ruff's autoformatting effort. A few comments on how I'm thinking about the desired end-state: The goal is to enable users to replace Black with Ruff. So...
Офигеть, уже вышел Python 3.12.0rc2. Это последняя предрелизная версия. Дальше уже только настоящий релиз, который запланирован на 2 октября. Как правило, между вторым релиз-кандидатом и релизом почти ничего не меняется, так что, в принципе, уже можно с нежной осторожностью трогать свежую версию интерпретатора.
Вот здесь можно почитать What’s new.
Вот здесь можно почитать What’s new.
Blogspot
Python Insider: Python 3.12.0 release candidate 2 now available
О, пошло дело. В репозитории
Правда, в этот раз как-то скромно. Без помпезных стримов со спикерами и шляпами. Или это я просто не нашел где стримят?
python/cpython
на гитхабе появился тэг v3.12.0
, что означает... Ну, думаю, вы и сами понимаете. Скоро будет официально релизнуто. 🍾Правда, в этот раз как-то скромно. Без помпезных стримов со спикерами и шляпами. Или это я просто не нашел где стримят?
Pydantic нанимает фронтендера. Что-то происходит 🤔
Видать начали что-то делать из своего роадмапа.
Twi
Видать начали что-то делать из своего роадмапа.
Twi
PSF и JetBrains выложили результаты опроса среди питонистов за 2022 год: https://lp.jetbrains.com/python-developers-survey-2022/
По результатам вижу несколько интересных пунктов:
🔹 Значительно увеличилась доля тех, кто считает себя Data Scientist'ом — 34% против 29% в прошлом году; и этот опрос ещё проходил до или в самом начале нынешней GPT-лихорадки; интересно будет посмотреть на результаты следующего года.
🔹 Среди сценариев использования Machine Learning обогнал девопсов и сисадминов, а доля веб-девелоперов почему-то снижается. Баланс сил нарушен — раньше веб-разработка и data science/machine learning были примерно в одинаковых пропорциях.
🔹 Чёрт побери, почему доля Python 2 выросла? Всё же хорошо шло, вы зачем раскопали-то опять. Это как-то связано с предыдущими пунктами? 🤔
🔹 Доля Poetry среди пакетных менеджеров постепенно растёт. Люди постепенно пересаживаются с Requests на httpx. FastAPI надёжно закрепился в тройке популярных веб-вреймворков и продолжает откусывать доли у Flask и Django.
По результатам вижу несколько интересных пунктов:
🔹 Значительно увеличилась доля тех, кто считает себя Data Scientist'ом — 34% против 29% в прошлом году; и этот опрос ещё проходил до или в самом начале нынешней GPT-лихорадки; интересно будет посмотреть на результаты следующего года.
🔹 Среди сценариев использования Machine Learning обогнал девопсов и сисадминов, а доля веб-девелоперов почему-то снижается. Баланс сил нарушен — раньше веб-разработка и data science/machine learning были примерно в одинаковых пропорциях.
🔹 Чёрт побери, почему доля Python 2 выросла? Всё же хорошо шло, вы зачем раскопали-то опять. Это как-то связано с предыдущими пунктами? 🤔
🔹 Доля Poetry среди пакетных менеджеров постепенно растёт. Люди постепенно пересаживаются с Requests на httpx. FastAPI надёжно закрепился в тройке популярных веб-вреймворков и продолжает откусывать доли у Flask и Django.
Какая самая крутая/важная фича в 3.12?
Anonymous Poll
10%
Новый синтаксис тайп-хинтов для generic классов и функций, тайпалиасы (PEP 695)
17%
Обобщение синтаксиса f-строк (PEP 701)
10%
Сабинтерпретаторы, доступные пока только из C (PEP 684)
11%
Улучшенные сообщения об ошибках
48%
Ускорение asyncio до 75%
4%
Другое
Судя по опросу выше, для многих релиз 3.12 не содержит каких-то больших сносящих крышу фич. Сложно с этим поспорить. Что ж, давайте тогда смотреть на мелкие фичи. По мелочам много всего приятно поменялось.
Например, в
Пример:
Документация: https://docs.python.org/3/library/itertools.html#itertools.batched
Например, в
itertools
добавили функцию batched
, которая разбивает список или любой итерируемый объект на кортежи указанной длины. Последний кортеж может быть короче указанной длины, если не хватит элементов.Пример:
>>> list(batched('ABCDEFG', 3))
[('A', 'B', 'C'), ('D', 'E', 'F'), ('G',)]
Раньше для этого приходилось либо определять эту функцию самостоятельно, взяв её из документации Python, либо устанавливать библиотеки, типа more-itertools
. Да, эта функция испокон веков лежит в виде сниппета кода в документации, но в стандартной библиотеке её нигде не было. Теперь есть 🤷♂️ Возможно, теперь я буду чуть реже ставить more-itertools
.Документация: https://docs.python.org/3/library/itertools.html#itertools.batched
Python documentation
itertools — Functions creating iterators for efficient looping
This module implements a number of iterator building blocks inspired by constructs from APL, Haskell, and SML. Each has been recast in a form suitable for Python. The module standardizes a core set...