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
This PEP specifies a metadata format that can be embedded in single-file Python scripts to assist launchers, IDEs and other external tools which may need to interact with such scripts.
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...
Ещё один прикол в 3.12 — встроенная функция
Раньше было как, складываешь 10 чиселок, где в результате ожидаешь получить 1, но получаешь что-то немного другое:
Но была специальная функция
sum()
теперь использует специальный алгоритм для сложения чисел с плавающей точкой с минимальной потерей точности (прочитать про алгоритм можно на вики).Раньше было как, складываешь 10 чиселок, где в результате ожидаешь получить 1, но получаешь что-то немного другое:
>>> sum([0.1] * 10)И ладно бы оно просто всегда ошибалось одинаково, дак ведь погрешность ещё и зависит от порядка, в котором складывать числа:
0.9999999999999999
>>> sum([0.1] * 5 + [0.05] * 10)А вы разве не знали, что сложение float'ов не коммутативно?
1.0000000000000004
>>> sum([0.05] * 10 + [0.1] * 5)
0.9999999999999999
>>> sum([0.1, 0.05, 0.05, 0.05, 0.05, 0.1, 0.1, 0.05, 0.05, 0.1, 0.05, 0.05, 0.05, 0.1, 0.05])
1.0000000000000002
Но была специальная функция
math.fsum()
, которая всё делает правильно:>>> math.fsum([0.1] * 10)Дак вот в 3.12 встроенная функция
1.0
>>> math.fsum([0.1] * 5 + [0.05] * 10)
1.0
>>> math.fsum([0.05] * 10 + [0.1] * 5)
1.0
sum()
даёт такие же результаты, как math.fsum()
. По крайней мере, я не смог найти примера, где они дали бы разный результат. Кроме того, по моим замерам, sum()
работает ещё и раза в полтора быстрее math.fsum()
:>>> timeit.timeit("sum([0.05] * 10 + [0.1] * 5)")Кто-нибудь понимает, зачем теперь нужна
0.26875441599986516
>>> timeit.timeit("math.fsum([0.05] * 10 + [0.1] * 5)", setup="import math")
0.34194887499961624
math.fsum()
?Wikipedia
Kahan summation algorithm
computation algorithm to sum a sequence of floating-point numbers
Питонические атаки
Ещё один прикол в 3.12 — встроенная функция sum() теперь использует специальный алгоритм для сложения чисел с плавающей точкой с минимальной потерей точности (прочитать про алгоритм можно на вики). Раньше было как, складываешь 10 чиселок, где в результате…
Выяснил отсюда, что
math.fsum()
всё-таки нужна, потому что она лучше сохраняет точность, чем встроенная sum()
, хоть и работает значительно медленнее. Видимо, там какие-то более сложные алгоритмы используются.GitHub
Improve accuracy of builtin sum() for float inputs · Issue #100425 · python/cpython
Currently sum() makes no efforts to improve accuracy over a simple running total. We do have math.fsum() that makes extreme efforts to be almost perfect; however, that function isn't well known...
Forwarded from Заметки Андрея
Летом успел съездить на PyCon Russia и выступить с докладом про новый язык программирования Mojo. История там такая: Крис Латнер, некогда очень активно поучаствовавший в создании LLVM, clang и Swift, вместе со своей командой решил сделать платформу для обучения нейросеточек и другого ML, а для этого делает свой язык программирования, максимально похожий на питон и тесно интегрированный с ним.
Анонс языка был очень мощным: вышло несколько статей, буквально пророчащих смерть обычного питона и становление Mojo в качестве его замены. Мне, разумеется, захотелось разобраться, насколько это серьёзные заявления, а насколько — хайп и кликбейт.
Разобрался! А теперь и вы можете: https://youtu.be/kzNwVdA3t_s.
P. S. А буквально позавчера Mojo стало можно загрузить и попробовать локально, ура: https://www.modular.com/blog/mojo-its-finally-here
Анонс языка был очень мощным: вышло несколько статей, буквально пророчащих смерть обычного питона и становление Mojo в качестве его замены. Мне, разумеется, захотелось разобраться, насколько это серьёзные заявления, а насколько — хайп и кликбейт.
Разобрался! А теперь и вы можете: https://youtu.be/kzNwVdA3t_s.
P. S. А буквально позавчера Mojo стало можно загрузить и попробовать локально, ура: https://www.modular.com/blog/mojo-its-finally-here
Гвидо наградят премией NEC C&C Prize за разработку языка Python, который сильно повлиял на развитие технологий и общества.
Раньше не слышал про такую премию, но судя по тому, что японцы награждали ей в разные годы, среди прочих, таких гигантов как:
* Кен Томпсон и Деннис Ритчи
* Тим Бернерс-Ли
* Эдсгер Дейкстра
* Гордон Мур
* Линус Торвальдс
Это должно быть почетно! Поздравляем Гвидо! 🥳
Награда включает в себя сертификат, почётный значок и денежный приз в 10 миллионов йен.
Ссылка на анонс
Почитать про премию на вики
Раньше не слышал про такую премию, но судя по тому, что японцы награждали ей в разные годы, среди прочих, таких гигантов как:
* Кен Томпсон и Деннис Ритчи
* Тим Бернерс-Ли
* Эдсгер Дейкстра
* Гордон Мур
* Линус Торвальдс
Это должно быть почетно! Поздравляем Гвидо! 🥳
Награда включает в себя сертификат, почётный значок и денежный приз в 10 миллионов йен.
Ссылка на анонс
Почитать про премию на вики
Успели обновиться до 3.12? А там уже вовсю пилят 3.13 и вышел первый альфа-релиз: https://discuss.python.org/t/python-3-13-0-alpha-1/36109
Пока что в 3.13 есть только куча удалений давно задепрекейченных модулей и ещё много разных штук объявляются deprecated. Но это только самое начало цикла разработки. Сейчас на peps.python.org есть около 10 предложений, которые целятся попасть в версию 3.13. Среди которых самые интересные, пожалуй:
* PEP 649 – Deferred Evaluation Of Annotations Using Descriptors — уже принят
* PEP 554 – Multiple Interpreters in the Stdlib
* PEP 703 – Making the Global Interpreter Lock Optional in CPython
* PEP 730 – Adding iOS as a supported platform
Релиз обещает быть интересным.
Пока что в 3.13 есть только куча удалений давно задепрекейченных модулей и ещё много разных штук объявляются deprecated. Но это только самое начало цикла разработки. Сейчас на peps.python.org есть около 10 предложений, которые целятся попасть в версию 3.13. Среди которых самые интересные, пожалуй:
* PEP 649 – Deferred Evaluation Of Annotations Using Descriptors — уже принят
* PEP 554 – Multiple Interpreters in the Stdlib
* PEP 703 – Making the Global Interpreter Lock Optional in CPython
* PEP 730 – Adding iOS as a supported platform
Релиз обещает быть интересным.
Discussions on Python.org
Python 3.13.0 alpha 1
It’s not a very exciting release (yet), but it’s time for the first alpha of Python 3.13 anyway! This is an early developer preview of Python 3.13 Major new features of the 3.13 series, compared to 3.12 Python 3.13 is still in development. This release…
Иногда аж вскрикиваю с заголовков рандомных статей в интернете. Если я когда-нибудь окончательно упорюсь в журнализм и начну писать такое, то... Даже не знаю, поставьте класс, подпишитесь на меня на бусти, онлифансе и медиуме. Ведь мне наверняка нужны будут деньги на таблетки. Главное не спорьте, со всем просто молча соглашайтесь, а то я могу воспринять это как сигнал, что нужно писать ещё. У автора заголовка явно неправильно подобрана доза.
Forwarded from Николай Хитров | Блог
Pycon 2023 - Архитектура кнута и пряника (запись)
Не так давно опубликовали записи докладов, так что думаю, пришла пора опубликовать. Изначально доклад планировал сделать про DDD и структуру проекта, но в итоге получился доклад про линтеры. Почему так вышло, смотрите в докладе. В презентации на все есть ссылки, можно скачать и прокликать.
Надеюсь, каждый для себя найдет что-нибудь новое и полезное. Как всегда, помидоры и набрасывания на вентилятор - приветствуются
Ссылка на youtube
Презентация в посте вот тут
Не так давно опубликовали записи докладов, так что думаю, пришла пора опубликовать. Изначально доклад планировал сделать про DDD и структуру проекта, но в итоге получился доклад про линтеры. Почему так вышло, смотрите в докладе. В презентации на все есть ссылки, можно скачать и прокликать.
Надеюсь, каждый для себя найдет что-нибудь новое и полезное. Как всегда, помидоры и набрасывания на вентилятор - приветствуются
Ссылка на youtube
Презентация в посте вот тут
YouTube
Николай Хитров. Архитектура кнута и пряника
Ждем вас на наших конференциях:
2 февраля 2024 - EkbPy
26-27 июля 2024 - PyCon
Николай Хитров
Backend Developer, Литрес
Архитектура кнута и пряника
Когда разработчик приходит на новый проект, первым делом ему приходится разбираться с местными устоями…
2 февраля 2024 - EkbPy
26-27 июля 2024 - PyCon
Николай Хитров
Backend Developer, Литрес
Архитектура кнута и пряника
Когда разработчик приходит на новый проект, первым делом ему приходится разбираться с местными устоями…
В PyCharm добавили поддержку PEP 701 с f-строками из 3.12. Теперь можно писать бесконечно вложенные кавычки, и это не будет ломать подсветку синтаксиса в редакторе.
https://blog.jetbrains.com/pycharm/2023/10/2023-2-3/
https://blog.jetbrains.com/pycharm/2023/10/2023-2-3/
The JetBrains Blog
PyCharm 2023.2.3 Is Out! | The PyCharm Blog
You can update to this version from inside the IDE, using the Toolbox App, or using snaps if you are an Ubuntu user. You can also download it from our website. Download PyCharm 2023.2.3
Ruff становится всё более зрелым проектом. Недавно выпустили версию 0.1.0: https://astral.sh/blog/ruff-v0.1.0
Всё ещё не 1.0, но 0.1.0 — это уже серьёзная заявка на стабильность! Что изменилось:
* В Ruff теперь есть preview mode, куда будут попадать все новые, экспериментальные фичи до момента их стабилизации; можно передать флаг
* Ruff теперь по умолчанию фиксит только те правила, которые можно пофиксить безопасно, не изменив смысл кода; unsafe fixes тоже можно запустить, но это нужно указывать явно, и желательно фиксить по одной ошибке за раз, а затем ревьювить получившийся код.
* Появилась политика версионирования; дальше версии будут не просто счётчиком релизов, а будут показывать наличие новых фич и ломающих изменений.
Всё ещё не 1.0, но 0.1.0 — это уже серьёзная заявка на стабильность! Что изменилось:
* В Ruff теперь есть preview mode, куда будут попадать все новые, экспериментальные фичи до момента их стабилизации; можно передать флаг
--preview
или указать в конфиге, чтобы получить доступ к этому великолепию.* Ruff теперь по умолчанию фиксит только те правила, которые можно пофиксить безопасно, не изменив смысл кода; unsafe fixes тоже можно запустить, но это нужно указывать явно, и желательно фиксить по одной ошибке за раз, а затем ревьювить получившийся код.
* Появилась политика версионирования; дальше версии будут не просто счётчиком релизов, а будут показывать наличие новых фич и ломающих изменений.
astral.sh
Ruff v0.1.0
Ruff adds a versioning policy, fix safety levels, and a preview mode for unstable features.
Питонические атаки
Я вам говорю, скоро он их обоих подожмёт
Ну и раз уж мы снова про Ruff, то надо зафиксировать график. Он уже подобрался совсем близко и щекочет там снизу пяточки pylint'у.
Думаю, что дальше популярность Ruff будет прирастать ещё быстрее, учитывая какую деятельность они развели, а теперь ещё и дают какие-никакие гарантии стабильности. Ведь дальше Ruff будет забирать аудиторию не только у линтеров, но и у форматтеров. Такая вот нехитрая ночная табуреточная аналитика (я на табуретке, а не на диване).
Кстати, интересно, что разрыв между pylint и flake8 будто бы сократился. Это почему, как думаете?
Думаю, что дальше популярность Ruff будет прирастать ещё быстрее, учитывая какую деятельность они развели, а теперь ещё и дают какие-никакие гарантии стабильности. Ведь дальше Ruff будет забирать аудиторию не только у линтеров, но и у форматтеров. Такая вот нехитрая ночная табуреточная аналитика (я на табуретке, а не на диване).
Кстати, интересно, что разрыв между pylint и flake8 будто бы сократился. Это почему, как думаете?