Planet Python на русском Заметка

Planet Python на русском

Сайт Planet Python - это планетарный сайт, на котором собраны материалы, связанные с Python, из различных источников, включая блоги, новостные сайты и другие онлайн-издания. Сайт представляет собой универсальное место, где можно быть в курсе последних событий в мире программирования на Python. Контент сайта включает в себя учебники, новости, анонсы проектов и обсуждения различных тем, связанных с Python. Пользователи могут посещать сайт, чтобы быть в курсе событий, происходящих в сообществе Python, новых релизов, конференций и лучших практик использования языка программирования Python. Цель сайта - способствовать продвижению и распространению контента, связанного с Python, тем самым внося свой вклад в рост и развитие сообщества Python.

Трэд заметок

Автор предлагает индивидуальные коучинг-сессии, чтобы помочь людям решить реальные рабочие проблемы. Эти сессии обычно затрагивают такие вопросы, как сложный код, архитектурные неопределенности или проблемы с Git. Автор предоставляет эту услугу уже много лет, но теперь официально описывает ее на специальной веб-странице. Во время часовой сессии клиенты могут обсудить свои конкретные потребности, такие как обзор кода, планирование проекта, парное программирование, вопросы по Git или карьерные консультации. Сессии являются конфиденциальными, обеспечивая сохранность информации и обсуждений клиента. Участники получают запись сессии и любые предоставленные материалы для дальнейшего использования. Каждая часовая сессия в Zoom стоит 300 долларов и не привязана к какому-либо членству. Клиенты могут забронировать сессию напрямую или написать автору по электронной почте, чтобы обсудить расписание или пригодность. Автор гибок в отношении часовых поясов и выражает готовность найти взаимоприемлемое время. Они также открыты для обратной связи относительно того, подходит ли конкретная проблема для коучинг-сессии.
Существует значительный разрыв между изучением базового синтаксиса Python и созданием функционального приложения. Многие курсы по Python фокусируются на основах языка, но пренебрегают необходимыми рабочими процессами разработки для реальных проектов. Это часто оставляет учащихся в замешательстве по поводу таких тем, как установка Python, использование терминала, управление пакетами с помощью pip, виртуальные окружения, организация проектов и контроль версий с помощью Git. Эти навыки имеют решающее значение для разработчиков, чтобы эффективно делиться своими работами и развертывать их.Для решения этой проблемы был создан бесплатный курс продолжительностью 6 недель, который можно проходить в своем темпе, под названием "Ship Your First Python App" (Запусти свое первое приложение на Python). Курс направлен на обучение полному локальному рабочему процессу разработки с нуля. Участники создадут небольшое приложение командной строки: журнал разработчика. Каждая неделя вводит новые концепции и завершается набором тестов, которые не проходят, и которые студенты должны исправить.Учебная программа охватывает настройку проекта, моделирование данных, интерфейсы командной строки, типобезопасность, обработку ошибок, организацию кода, тестирование, улучшение форматирования вывода и измерение покрытия тестами. Последняя неделя посвящена подготовке проекта к обмену, включая написание документации и, возможно, публикацию его в PyPI. Этот курс предназначен для людей, которые понимают основы Python, но испытывают трудности с сопутствующими процессами разработки. Он не предполагает предварительных знаний о CLI, упаковке или Git, что делает его доступным для более широкой аудитории. Автор активно ищет отзывы для улучшения полезности курса и пользовательского опыта.
Организация предлагает новый статус голосующего членства для точного отслеживания активных членов и обеспечения действительности выборов. Члены, голосовавших на выборах в Совет директоров в течение последних двух лет, автоматически будут считаться активными и учитываться при расчете кворума. Члены, не голосовавших недавно, останутся членами, но не будут учитываться при расчете кворума до тех пор, пока они явно не выразят желание голосовать. Это изменение направлено на решение проблемы достижения кворума по мере роста членства, что является распространенной проблемой во многих некоммерческих организациях. Подобно Python Software Foundation, этот новый статус упростит расчеты кворума. Статус членства не будет утерян, и члены по-прежнему будут указаны на веб-сайте. Активный статус конкретно влияет на расчеты кворума, а не на общее членство. Организация планирует отправлять напоминания о выборах и публиковать обновления, чтобы члены были в курсе. Чтобы проголосовать, желающие должны связаться с организацией до открытия выборов, чтобы быть включенными в список активных членов. Отзывы по этому предложенному изменению устава запрашиваются до 7 октября 2026 года через GitHub или на форуме только для членов. Совет директоров рассмотрит все комментарии перед возможным голосованием 8 октября.
PyPy выпустил версию 8.0.0, что знаменует собой значительное обновление. Этот релиз включает поддержку Python 2.7, Python 3.11 и бета-версию Python 3.12. Сборочные боты Linux были обновлены для использования образов manylinux_2_28, теперь требующих glibc2.28. Важным нововведением является новая модель C-слоя PyPy, нацеленная на совместимость с ограниченным ABI CPython для колес. Это обновление скрывает специфичные для PyPy расширения в модулях C-расширений, приводя заголовки PyPy в соответствие с заголовками CPython при использовании ограниченного API. Хотя импортный механизм и инструменты экосистемы все еще нуждаются в полном распознавании объектов abi3.so, предпринимаются усилия с Cython и PyO3 для обеспечения бесшовной интеграции. Генерация кода RPython получила улучшения, включая вычисляемые переходы и более агрессивное встраивание, хотя прирост производительности скромный. Внутренний бэкенд HPy был удален, так как он не получил достаточной поддержки. Возрожденный инструмент pyhdrdump доступен для сравнения файлов заголовков PyPy и CPython. Релиз предлагает три интерпретатора: PyPy2.7, PyPy3.11 (который будет последним для этой версии) и PyPy3.12 beta. PyPy — это быстрая, прямая замена CPython, использующая трассирующий JIT-компилятор. Бинарные сборки доступны для различных распространенных архитектур, а поддержка большего числа платформ предоставляется сторонними упаковщиками.
В этой статье представлено подробное объяснение Auto-GPT. К концу статьи читатели поймут его функциональность и научатся устанавливать и запускать его. Auto-GPT привлек значительное внимание СМИ, став актуальной темой после ChatGPT. Его возможности вызвали интерес как у профессионалов в области ИИ, так и у людей из других областей. Различные СМИ сообщали о его потенциале автоматизировать задачи различной сложности. Auto-GPT — это экспериментальный проект с открытым исходным кодом, использующий модель GPT-4. Он выходит за рамки возможностей ChatGPT, выполняя веб-поиск для сбора информации. Подобно тому, как аналитики-люди завершают проекты, Auto-GPT автономно выполняет все необходимые задачи для достижения целей проекта. Например, если ему поручено провести исследование рынка наушников, он самостоятельно найдет информацию в Интернете. Затем он представит результаты в хорошо организованном и структурированном формате.
CdXz5zHNQW_75zBjmNvqH.png
Этот текст описывает создание мастер-класса в JupyterLab, посвященного обучению pytest. Мастер-класс разработан так, чтобы быть достаточно компактным для размещения в посте блога, но при этом содержать все необходимые элементы настоящего мастер-класса. Он включает манифест, несколько страниц, интерактивные действия, автоматические проверки, викторину и вспомогательные инструменты. Мастер-класс обучает фундаментальному циклу pytest: написанию теста, наблюдению его сбоя и последующему исправлению кода. Этот итеративный процесс структурирован на четырех отдельных страницах мастер-класса. Ключевой особенностью является создание изолированной среды Python для мастер-класса, гарантирующей установку pytest без влияния на систему учащегося. Этот подход использует учебные материалы из предыдущего доклада на конференции для улучшения процесса обучения. Процесс начинается с планирования и определения проверяемых шагов, что отличает мастер-классы от руководств. Мастер-класс генерируется с помощью команды jupyter workshop init, которая настраивает структуру каталогов и файл манифеста. Возможности, такие как доступ к терминалу, запись файлов, выполнение кода и установка пакетов, объявляются в манифесте и проверяются линтерами. Поле environment в манифесте указывает зависимости, такие как pytest, которые устанавливаются в самодостаточную виртуальную среду. Это позволяет избежать ручной настройки среды, позволяя учащимся сосредоточиться на самом pytest. Запись env в манифесте также отключает кэширование байт-кода Python, чтобы предотвратить проблемы с быстрыми изменениями файлов. Мастер-класс использует файл files/orders.py, содержащий намеренно ошибочную функцию для отладки учащимися. Каждая страница мастер-класса использует Markdown и специальные блоки действий для направления учащегося через такие задачи, как открытие файлов, написание кода и выполнение команд. Проверки реализованы с помощью действия verify, которое автоматически проверяет результат действий учащегося, обеспечивая прогресс и обучение. Включено действие quiz для того, чтобы учащиеся предсказывали результаты перед запуском тестов, закрепляя понимание того, как работает pytest. Действие editor-insert позволяет добавлять и просматривать новый код, например тесты, непосредственно в редакторе. Структура и содержание мастер-класса разработаны так, чтобы быть интерактивными и образовательными, с акцентом на практическое применение pytest.
CdXz5zHNQW_hkEwNEOUhk.png
Автор разрабатывал общий контракт для CLI-инструмента, взаимодействующего с двумя различными бэкендами для генерации изображений. Цель состояла в том, чтобы позволить CLI использовать универсальную функцию submit(request), при этом каждый бэкенд преобразовывал бы ее в вызовы своего собственного SDK. Изначально автор рассматривал использование абстрактных базовых классов (ABC) в качестве общего интерфейса из-за их принудительного применения абстрактных методов. Однако ABC требуют наследования, что создает зависимость для сторонних подключаемых бэкендов.typing.Protocol оказался более подходящим решением, поскольку он использует структурную типизацию. Класс удовлетворяет протоколу, имея правильные методы с нужными сигнатурами, без необходимости явного наследования. Такой подход отделяет внешних реализаторов от основного пакета, позволяя поставщикам развиваться независимо. Протоколы способствуют дизайну, основанному на композиции, где поставщик передается как значение, а не является частью строгой иерархии.Хотя протоколы идеально подходят для описания границ плагинов, ABC более уместны, когда поставщики должны совместно использовать конкретное поведение или логику реализации. ABC может определять общие методы и принудительно применять абстрактные методы, которые должны реализовать конкретные подклассы. Также возможно использовать оба подхода: протокол для внешней границы плагина и внутренний ABC для общего поведения среди поставщиков.Автор рекомендует по умолчанию использовать Protocol из-за его более легкого контракта, переходя к ABC только тогда, когда требуется общая реализация или когда необходимо принудительное применение абстрактных методов во время выполнения. Для экосистем плагинов "соответствие по форме" (Protocol) часто предпочтительнее, чем "соответствие по наследованию" (ABC). Выбор зависит от того, является ли основной потребностью определение формы или совместное использование конкретного поведения и принудительное применение иерархии.
Выборы в Совет директоров PSF в 2026 году способствовали важным дискуссиям о роли организации в поддержке мирового сообщества Python. PSF выражает благодарность всем кандидатам за их готовность служить, а сообществу — за их активное участие и голосование. Поздравляем вновь избранных членов Совета директоров: Элейн Вонг, Лаис Карвальо, Ии Дурбин и Георги Кер, а также отмечаем возвращение действующего члена. Уходящим членам Совета директоров Чук Тин Хо, Крису Нойгебауэру и Денни Пересу выражается благодарность за их значительный вклад и лидерство в формировании стратегического видения PSF. Выборы успешно достигли кворума: было подано 670 бюллетеней, что свидетельствует о высокой вовлеченности сообщества. Особая благодарность тем, кто способствовал проведению выборов, включая члена Совета директоров Квонхана Бае, а также сотрудникам PSF и членам Совета директоров, которые работали над улучшением избирательного процесса. Подробные результаты выборов доступны на веб-сайте PSF до 10 ноября 2026 года. Команда по проведению выборов PSF проведет ретроспективу для сбора отзывов и улучшения будущих избирательных процессов. Организация призывает к продолжению обратной связи от сообщества по избирательному процессу через discuss.python.org или по электронной почте. Поскольку в следующем году снова откроется как минимум три места в Совете директоров, заинтересованным лицам предлагается узнать больше и рассмотреть возможность выдвижения своей кандидатуры.
CdXz5zHNQW_cy1larHnBn.png
Первые выборы в Совет по упаковке Python (PPC) успешно завершились при активном участии сообщества. Семнадцать кандидатов боролись за пять первых мест в совете. Сообщество активно участвовало в обсуждениях AMA и рассматривало кандидатов. Всего в этих выборах было подано 541 бюллетень. Поздравляем пятерых избранных членов: Бретт Кэннон и Прадьюн Гедам на двухлетние сроки (Когорта А), и Дональд Стаффт, Генри Шрайнер и Ральф Гоммерс на одногодовые сроки (Когорта Б). Структура выборов определяет двух кандидатов, получивших наибольшее количество голосов, для Когорты А с более длительными сроками, а следующие трое формируют Когорту Б с более короткими сроками. Такой поэтапный подход гарантирует, что примерно половина мест в PPC будет выставлена на выборы в чередующиеся годы на двухлетние сроки. Выражается признательность всем кандидатам, избирателям и тем, кто участвовал в обсуждениях PEP 772 и избирательном процессе. Особая благодарность была выражена Барри Варшавскому и Прадьюну Гедаму в качестве связующих звеньев сообщества, а также сотрудникам и членам правления PSF. Новоизбранные члены скоро начнут процесс адаптации.
CdXz5zHNQW_vTLavQQ1oQ.png
Автор разработал jupyterlab-workshop, расширение для JupyterLab, чтобы устранить ограничения использования обычных Jupyter-ноутбуков для образовательных мастер-классов. Это расширение разделяет инструкции от фактической работы, которую должен выполнить учащийся. Инструкции представлены на боковой панели, причем каждый шаг является выполнимым действием в среде JupyterLab. Эти действия могут включать выполнение команд терминала, изменение файлов, создание ноутбуков и выполнение кода. Мастер-класс также может проверять прогресс учащегося и требовать завершения задач, прежде чем разрешить ему продолжить.В отличие от ноутбуков, где учащиеся могут пассивно наблюдать за выполнением кода, это расширение обеспечивает активное участие, поскольку действия выполняются в реальном времени. Оно преодолевает ограничение ноутбуков, связанных с одним языком, позволяя взаимодействовать с более широкой средой JupyterLab и внешними инструментами. Это разделение предотвращает смешение учебного контента и выполненной работы, предлагая более четкий путь обучения. Боковая панель обеспечивает навигацию, отслеживание прогресса и детали выполненных действий.Каждый исполняемый шаг не симулируется; нажатие на действие выполняет его в живом терминале или выполняет назначенную задачу. Расширение поддерживает различные действия, включая операции с терминалом, управление файлами, взаимодействие с ноутбуками и манипулирование интерфейсом. Мастер-классы могут быть даже разработаны для организации пользовательского интерфейса для оптимального обучения в определенные моменты. Контрольные точки позволяют учащимся сохранять свой прогресс и возвращаться к известному состоянию в случае возникновения ошибок.Расширение включает надежную систему проверки, позволяющую проводить проверки с помощью кода Python, команд оболочки или предикатов на основе файлов. Также могут быть интегрированы викторины, ответы на которые будут использоваться в последующих шагах. Файл манифеста определяет, является ли завершение задачи рекомендательным или обязательным. Безопасность обеспечивается механизмом доверия, при котором учащиеся предоставляют мастер-классам определенные возможности перед выполнением.Сам мастер-класс структурирован как каталог, содержащий файл манифеста, файлы Markdown для страниц и любые необходимые стартовые файлы. Такая структура в виде обычного текста облегчает контроль версий. Страницы написаны на MyST Markdown, а действия определены в блоках кода с ограждением. Расширение может быть установлено локально или использоваться через такие сервисы, как mybinder.org и GitHub Codespaces, что позволяет запускать мастер-классы в различных средах без сложной настройки. Автор решил не использовать свою предыдущую платформу Educates, потому что она требовала Kubernetes, что ограничивало ее доступность для небольших команд и отдельных лиц.
CdXz5zHNQW_ghHpRchT3T.png
Новый студент, изучающий Rust, столкнулся с ошибкой при попытке вызвать read_to_string для объекта File. Компилятор указал, что такого метода не существует. Решение заключалось в добавлении use std::io::Read; в начало файла. Этот импорт сбил с толку студента, который ожидал импорта std::io::File, если предполагались файловые операции.Суть путаницы заключается в системе трейтов Rust. Метод read_to_string не является внутренним методом самого типа File. Вместо этого он определяется трейтом Read, который реализует File. Импорт трейта Read делает его методы доступными для поиска методов компилятором Rust.Этот механизм значительно отличается от Python, где доступность методов обычно напрямую связана с типом объекта. В Rust трейты предоставляют способ определения общего поведения для различных типов, способствуя полиморфизму и повторному использованию кода. Например, File, TcpStream и Stdin реализуют трейт Read, что позволяет им предлагать схожие функции чтения.Следовательно, use std::io::Read; — это не о прямом использовании функции, а о включении интерфейса Read в область видимости. Это позволяет компилятору учитывать трейт Read при разрешении вызовов методов для типов, которые его реализуют. Понимание трейтов имеет решающее значение для понимания того, почему некоторые, казалось бы, несвязанные импорты необходимы для функциональности методов в Rust. Такой подход позволяет избежать дублирования кода и обеспечивает обобщенное программирование. Сообщение об ошибке компилятора "trait Read is implemented but not in scope" (трейт Read реализован, но не в области видимости) напрямую указывает на эту проблему разрешения трейтов.
Выступление "Молчание — золото" призывает к включению времени тишины в дискуссии для поощрения участия нерешительных спикеров. Докладчик, который сам легко высказывается, признает личную сложность в том, чтобы сдерживаться и освобождать место для других. Эта идея была вдохновлена наблюдением за групповой дискуссией, где доминирующий спикер мешал другим внести свой вклад. В выступлении предлагается применить "Правило Пакмана", обычно касающееся физического пространства, к концепции времени для разговора. Основная мысль подчеркивает сложность, но и важность молчания в определенных ситуациях. Создавая паузы, цель состоит в том, чтобы способствовать более инклюзивной среде, где могут проявиться разнообразные голоса. Этот подход направлен на улучшение групповой динамики и обеспечение того, чтобы все участники имели возможность поделиться своими мыслями. Докладчик надеется, что сообщение будет воспринято конструктивно, а не как нравоучение, поскольку это напоминание и для него самого. В конечном итоге, намеренное молчание может привести к более богатому и сбалансированному вкладу со стороны всех участников.
Кодовую базу CPython можно проверить с нуля всего за 0,3 секунды с помощью Ruff, инструмента, написанного на Rust. Rust все чаще используется в экосистеме Python, появляясь в популярных инструментах, таких как Pydantic, Polars, uv и Granian. Интеграция Rust с Python преследует три основные цели: автономные инструменты, библиотеки, импортируемые Python, и серверы, встраивающие интерпретаторы Python. Основное внимание уделяется тому, чтобы сделать Rust доступным для разработчиков Python, не требуя глубоких знаний Rust. Кристофер Трюдо обсуждает эту тенденцию и свой новый курс "Up and Running with Rust". Фундаментальное отличие между Python и Rust заключается в управлении памятью: Python полагается на сборку мусора, в то время как Rust обеспечивает строгие правила владения во время компиляции. Этот доклад исследует, как Rust используется для улучшения разработки на Python. В нем также упоминаются различные спонсируемые продукты и ресурсы для дальнейшего изучения Rust и его применения. Эпизод содержит обширные ссылки на соответствующие проекты, документацию и связанный контент. Обсуждение подчеркивает растущую синергию между сообществами Rust и Python.
Фонд программного обеспечения Django продлил срок подачи заявок на первую должность исполнительного директора. Заявки будут приниматься до конца вторника, 22 сентября 2026 года, в любой точке Земли. Это продление было предоставлено, чтобы дать больше времени заинтересованным кандидатам для подачи заявок. Те, кто уже подал заявку, не столкнутся с какими-либо задержками в процессе рассмотрения. Исполнительный директор будет играть ключевую роль в развитии потенциала DSF и обеспечении устойчивого будущего для проекта Django. Основные обязанности включают руководство фандрайзингом и партнерствами, поддержку операционной деятельности и сотрудничество с заинтересованными сторонами. Идеальный кандидат будет опытным руководителем некоммерческой организации, обладающим навыками фандрайзинга, построения отношений и организационного лидерства. Предварительный опыт работы с Django или Python не требуется, но опыт работы с организациями с открытым исходным кодом или управляемыми сообществом будет полезен. Фонд ищет человека, комфортно чувствующего себя в широкой роли и умеющего создавать инициативы. Сильные коммуникативные навыки и лидерские качества необходимы для того, чтобы убедить потенциальных спонсоров в ценности Django. Любой, кто считает, что он или кто-то из его знакомых хорошо подходит на эту должность, призывается подать заявку или поделиться этой возможностью. Полное описание вакансии и детали подачи заявки доступны онлайн. DSF стремится найти лидера, который будет формировать его будущее.
fastlogging-rs — это высокопроизводительный фреймворк логирования на языке Rust, разработанный для устранения узких мест в логировании приложений. Он обеспечивает значительное повышение скорости: запись в файл до 147 раз быстрее, чем встроенное логирование Python, и в 9 раз быстрее, чем Apache Log4j. Фреймворк предлагает неблокирующую асинхронную архитектуру, где запись происходит в фоновых потоках, предотвращая замедление основного приложения. Он поддерживает восемь языков программирования (Rust, Python, C, C++, Go, Java, C#) через тонкие обертки, все с похожим API для согласованного логирования в различных технологических стеках. Ключевые функции включают опциональную ротацию файлов, сжатие, AES-шифрование для сетевого логирования и настройку через API или файл. fastlogging-rs также автоматически перенаправляет сообщения журнала из подпроцессов в основной процесс. Этот первоначальный выпуск, 0.8.1, включает ядро Rust и привязки для поддерживаемых языков. Установка проста с использованием пакетных менеджеров, таких как cargo для Rust или pip для Python. Проект является открытым исходным кодом, лицензированным под MIT или Apache-2.0, с исходным кодом и документацией, доступными на GitHub. Тесты производительности демонстрируют его превосходную производительность как в стандартных сценариях, так и при ротации файлов. fastlogging-rs стремится обеспечить существенные преимущества в производительности при минимальных изменениях кода, облегчая миграцию с существующих фреймворков логирования.
В этом выпуске PyCoder's Weekly освещаются различные темы Python, от производительности до тестирования и новых функций. Подчеркивается, что множества и словари могут иметь квадратичную производительность, а не всегда O(1). Тестирование на основе свойств с помощью Hypothesis продвигается как альтернатива тестированию граничных случаев. В спонсируемой рекламе представлена ScrapingBee для эффективного веб-скрейпинга. Объясняется предварительная версия ленивых импортов в Python 3.15, обещающая более быстрое время запуска приложений. Выпущен призыв к волонтерам для Рабочей группы по сбору средств Django. Упоминается отчет об инциденте от PyPI относительно ошибок хостинга файлов. Исследуются интересные функции Django, такие как объекты Q() для динамической фильтрации. Представлен профиль создателя Python Гвидо ван Россума. Статья "Создание интерпретатора Python за 1024 байта" демонстрирует кодовое гольфирование. Также обсуждается деоптимизация доступа к атрибутам путем чтения __dict__. Предоставляются советы по созданию эффективной среды разработки Python. Анализ тенденций на рынке удаленной работы в сфере Python показывает сокращение вакансий и увеличение удаленной работы. Обучаются функции таймера Python и созданию повторно используемого класса Timer. Подробно описывается прототипирование нового CLI для Wagtail. Представлены ufuncs NumPy и их внутреннее устройство. Перечислены несколько новых проектов и репозиториев кода, включая django-ox и Plotext. Наконец, анонсируются предстоящие мероприятия Python, такие как PyCon Cameroon и различные встречи.
CdXz5zHNQW_hpByPwlbht.png
В этом выпуске обсуждаются несколько ключевых тем в экосистеме Python. Один из значимых моментов — аргумент о том, что Pandas должен умереть, поскольку более быстрые и эффективные по памяти альтернативы, такие как Polars и DuckDB, лучше подходят для большинства рабочих нагрузок "средних данных". Представлена Pydantic-pint — библиотека, которая интегрирует реальные единицы измерения в модели Pydantic, улучшая проверку данных для физических величин. Объясняется технический аспект того, как библиотеки Rust работают в Python с использованием PyO3, освещая процесс создания и интеграции кода Rust для повышения производительности. Освещается крупное приобретение в сфере данных: AWS приобрела DuckLabs, компанию, стоящую за DuckDB, что вызывает вопросы о будущем экосистемы DuckDB и потенциальной конкуренции с существующими сервисами. Шоу также затрагивает выпуск Astral uv подписанных бинарных файлов и документальный фильм о восхождении VS Code. Наконец, рассказывается шутка о том, что значит быть "агентом".
CdXz5zHNQW_erSw25awoZ.jpeg
Фонд программного обеспечения Python (PSF) официально принял свой Стратегический план 2026, охватывающий годы с 2026 по 2031 годы. Этот план был разработан в совместном процессе, первоначальные цели были представлены в мае, а полный проект был открыт для обратной связи сообществом в июне. Полученная обратная связь существенно повлияла на итоговый план, что привело к включению новых целей по безопасности и управлению уязвимостями. Мнение сообщества также повлияло на акцент плана на перевод, локализацию, более чёткие пути финансирования для компаний и рост ценности членства в PSF. Выделенная веб-страница станет постоянным домом для плана, подробно описывающей механизмы установления приоритетов и обратной связи. Чтобы сохранить актуальность плана, совет PSF создал ежегодный процесс обзора. Этот обзор будет оценивать прогресс, оценивать изменения приоритетов и учитывать постоянную обратную связь от сотрудников и сообщества. Реализация стратегического плана уже началась, и первый раунд финансирования программы грантов 2026 года стал первой инициативой, соответствующей его направлению. PSF также сотрудничает с внешней бухгалтерской фирмой для предоставления актуальной финансовой информации. Сообщество может предоставлять обратную связь круглый год в [email protected] и во время ежемесячных офисных часов Совета PSF в Discord.
Спикер обсуждает актуальность мастер-классов для разработчиков в эпоху ИИ, отмечая, что ИИ отлично справляется с предоставлением пошаговых руководств и учебных пособий. Однако основная ценность мастер-классов заключается в активном обучении через практику, где ошибки имеют последствия и требуют решения проблем. Эта практическая борьба углубляет понимание так, как не может воспроизвести пассивное чтение или объяснения, сгенерированные ИИ. Кроме того, мастер-классы знакомят учащихся с проблемами, которые они могли не предвидеть, что является важным аспектом для реальной разработки.Эффективность мастер-классов зависит от преодоления распространенных подводных камней: проблем с настройкой среды, слишком больших шагов, недостаточного объяснения "почему" и неадекватной проверки. Спикер выступает за размещенные среды, которые стандартизируют отправную точку для всех участников, обеспечивая лучшую поддержку и более сложные сценарии обучения. Хотя ИИ может помочь в разработке контента для мастер-классов, он не справляется с пониманием человеческого процесса обучения. ИИ оптимизирует правильность, а не обучаемость, и не может предвидеть путаницу у учащихся.Критически важным шагом в создании мастер-классов является тестирование с реальными людьми, поскольку материалы, сгенерированные ИИ, часто хорошо читаются, но терпят неудачу на практике. Давление со стороны ИИ наиболее остро ощущается в сценариях добровольного обучения, обусловленных любопытством, поскольку ИИ может удовлетворить это любопытство более эффективно и бесплатно. Однако мастер-классы с четким бизнес-драйвером, такие как демонстрации продаж или обучение клиентов, остаются весьма актуальными. В конечном счете, мастер-классы направлены на создание ритма обучения, который ИИ не может полностью воспроизвести.
Wing Python IDE выпустила версию 12.0.3, внедрив значительные улучшения. Это обновление включает поддержку Python 3.15 и улучшенный анализ исходного кода для современных подсказок типов. Автодополнение в больших средах Python было существенно ускорено, даже при включенном автоимпорте. Wing 12 глубоко интегрирует агент кодирования Claude Code AI, оснащенный новым инструментом Claude Code и инструментом Tasks для управления рабочими процессами ИИ. Он также предоставляет MCP-серверы, которые предоставляют агенту ИИ доступ к мощным функциям отладки, тестирования и анализа кода Wing. Новые функции FIX на базе ИИ могут автоматически устранять ошибки отладчика и сбои модульных тестов, а функция Write Tests предлагает агенту генерировать модульные тесты. AI Code Actions позволяют пользователям объяснять, проверять, исправлять и оптимизировать код с помощью ИИ. IDE теперь имеет псевдотерминал для эмуляции ANSI-терминала в инструментах OS Commands и Debug I/O. Гибкость рабочего пространства повышена за счет возможности размещения инструментов в разделенных редакторах, а меню Tools было реорганизовано для лучшей юзабилити. Wing 12 упрощает свою продуктовую линейку, разделяя ее на Wing Pro с инструментами агента ИИ и Wing Classic для традиционной разработки, при этом Wing Personal снят с производства.
CdXz5zHNQW_dlloi3F9Xk.png
Детектор ИИ под названием Pangram пометил твит Дэвида Сакса как сгенерированный ИИ, что Сакс оспорил, назвав детекторы ИИ фальшивыми. Pangram имеет низкий процент ложных срабатываний, однако ИИ-помощники для письма часто ошибочно идентифицируют человеческий текст как ИИ. Pangram работает, обучаясь на человеческом тексте, а затем просит ИИ переписать или отредактировать его, учась выявлять паттерны письма ИИ. Автор дал команду ИИ Opus 5 сгенерировать твит в стиле Дэвида Сакса о "Продвижении на переднем крае", основываясь на существующих публикациях Дарио и Сэма Альтмана. Сгенерированный твит утверждал, что OpenAI и Anthropic, обладая дуополией, должны продвигаться на переднем крае, поскольку это приносит им коммерческую и стратегическую выгоду. Твит также отвергал утверждения о том, что модели с открытым весом представляют основную опасность, и критиковал предложенный регуляторный подход. Pangram оценил этот сгенерированный твит как 100% ИИ. Затем автор вручную переписал твит, сохранив его структуру и идеи, стремясь получить от Pangram оценку "человек". Несмотря на значительное перефразирование и удаление скопированных предложений, этот переписанный человеком текст также получил от Pangram оценку 100% ИИ. Автор отмечает, что использование ИИ для первоначальной структуры может привести к плохим результатам обнаружения ИИ даже после обширного редактирования. Автор ценит Pangram за повышение осведомленности о влиянии использования ИИ и растущей зависимости от них при написании текстов. Однако автор задается вопросом, является ли оценка 100% ИИ справедливой для текста, который прошел существенное человеческое редактирование.
Валидация данных в Pydantic v2 основана на расширении Rust под названием pydantic-core, созданном с использованием PyO3. В этом посте демонстрируется, как создать пользовательский JSON-парсер в Rust и вывести его на Python. Процесс включает написание Rust-модуля, аннотирование его макросами PyO3 и использование Maturin для компиляции и установки. Ядро примера — это Rust-энум, представляющий структуру JSON-дерева. Открытие функции в Python требует специфических аннотаций и типов PyO3, таких как Python и Bound. Самым значимым аспектом является преобразование структур данных Rust обратно в объекты Python. Этот «возврат» включает создание множества объектов Python, что может быть дороже, чем сам парсинг для крупных JSON-документов. Это преобразование осуществляется с использованием черты IntoPyObject. Также необходимо переводить ошибки; Ошибки Rust преобразуются в исключения Python с помощью признака From. Для скалярных значений возврата стоимость перехода границы незначительна. Однако для крупных структур стоимость конвертации существенна и может доминировать в производительности. Оптимизация преобразования границ, потенциально за счёт возвращения ленивых видов, крайне важна для успешных портов Rust-to-Python. Поэтому профилирование границы между Rust и Python является необходимым.
CdXz5zHNQW_y8hcnXdNTs.png
Wrapture достиг версии 1.0.0b1, перейдя из альфа-статуса в бета-статус, что сигнализирует о стабильности API. Проект теперь ищет отзывы пользователей о реальных приложениях для дальнейшей разработки. Особое внимание уделяется экспорту OpenTelemetry, чтобы обеспечить соответствие сопоставления атрибутов конвенциям. Сопутствующие пакеты инструментов также находятся на стадии бета-тестирования. Основной пакет инструментов охватывает внутрипроцессные цели, в то время как отдельные пакеты существуют для внешних сервисов, таких как базы данных и AWS. Эти отдельные пакеты имеют свои собственные графики выпуска. Проект планирует дальнейшую инструментацию для Redis, MongoDB и, возможно, LangChain. Серия постов в блоге подробно описывает использование wrapture в модульном тестировании и трассировке приложений. Интерактивные семинары доступны через GitHub для практического обучения, их можно запускать непосредственно в браузере на mybinder.org или локально. Эти семинары позволяют пользователям изучать концепции wrapture на практике. Автор признает, что предыдущий обзорный пост Саймона Уиллсона уже повысил узнаваемость wrapture. Текущий пост призван объединить все соответствующие ссылки, информацию о пакетах и ресурсы семинаров в одном месте. Новая функция jupyterlab-workshop позволяет запускать интерактивные семинары в JupyterLab.
Идея о том, что ИИ приведет к вымиранию человечества, в последнее время набирает обороты. Некоторые лидеры в области ИИ, такие как Дарио Амодеи, оценивают вероятность такого события как значительную. Пост Амодеи о темпах развития ИИ вызвал дискуссию среди видных деятелей. Однако автор не согласен с этой предпосылкой, несмотря на то, что разделяет многие опасения.Автор определяет "гибель" не как вымирание, а как постоянные неприятности, такие как ботнеты, когда системы ИИ становятся трудно контролируемыми. Они признают, что нынешние системы ИИ раздражают, но их можно отключить, в отличие от потенциальных будущих продвинутых агентов. Автор обеспокоен влиянием ИИ на людей за пределами крупных лабораторий ИИ, а не экзистенциальными угрозами, такими как оружие, управляемое ИИ.Концепция "темпов" развития ИИ рассматривается как проблематичная, особенно учитывая, что лишь несколько американских компаний лидируют в этой гонке. Эти компании получили выгоду от общедоступных данных и ресурсов, а теперь предлагают системы сторонней оценки, связанные с ними. Автор критикует идею о том, что только эти корпорации должны контролировать мощный ИИ, особенно учитывая их геополитические мотивы.Автор утверждает, что открытые модели по своей сути будут сдерживать развитие ИИ благодаря широкой доступности, подобно распространению ядерного оружия. Нынешняя ситуация, когда общественность поддерживает развитие ИИ, но выкупает его преимущества у нескольких лабораторий, рассматривается как ошибочная экономическая и геополитическая модель. В то время как проекты с открытым исходным кодом испытывают трудности из-за компаний, занимающихся ИИ, китайские лаборатории рассматриваются как ключевые для распространения возможностей и выравнивания игрового поля.Автор указывает на провал регулирования, когда существующие законы игнорируются, а данные используются без согласия. Возникающая токен-экономика для услуг ИИ сравнивается с наркотическим рынком, лишенным прозрачности. В идеале развитие ИИ должно было принести пользу общественному достоянию, а регулирование должно было бы предписывать поддержку дистилляции знаний.В конечном счете, автор не предвидит события вымирания из-за ИИ, полагая, что крупные лаборатории потеряют больше. Вместо этого основная обеспокоенность вызывает широкомасштабный ущерб, который ИИ может нанести различным отраслям, сделав их дороже. Этот новый "налог" на инновации, уже очевидный в разработке программного обеспечения, как ожидается, распространится и на другие области.
Автор любит читать email-рассылки за их информативное и заставляющее задуматься содержание, но в течение недели у него не хватает времени, а по субботам он предпочитает не пользоваться компьютером. Для решения этой проблемы была разработана система, при которой рассылки автоматически перемещаются в папку "toprint", а избранные помечаются звездочкой. В пятницу днем избранные и выбранные не отмеченные звездочкой рассылки печатаются, часто двусторонние и по четыре страницы на лист, для чтения в субботу утром. Однако этот ручной процесс приводил к значительному количеству бумажных отходов и требовал утомительного удаления ненужного контента и изображений. Расстроенный неэффективностью, автор создал "newsprint" — пакет на Python для автоматизации этой задачи. Newsprint обрабатывает отмеченные звездочкой рассылки, создавая PDF-файл с удаленным рекламным контентом и ненужными изображениями. Он интеллектуально обрабатывает изображения и добавляет нижние колонтитулы с информацией о рассылке и странице. Пакет также может генерировать оглавление и, используя ключ API Claude, предоставлять общие сводки рассылок и персонализированные сведения. Пользователи могут выбирать не отмеченные звездочкой рассылки для включения, настраивать размер и ориентацию бумаги, а также управлять обработанными рассылками. Newsprint уже сократил использование бумаги автором и улучшил его опыт чтения.
Wrapture теперь интегрирует OpenTelemetry как первоклассный пункт назначения для трассировки данных. Подпакет 'wrapture.otel', входящий в комплект каждой установки, обеспечивает бесшовный экспорт в трассирующие бэкенды. Добавив таблицу '[otel]' в конфигурацию, пользователи могут включить трассировку, указать имя сервиса и настраивать индивидуальные настройки сигнала. Такая конфигурация позволяет подробно анализировать поведение приложений, включая ошибки и детали запросов. Переменные среды OpenTelemetry определяют, куда отправляются трассирующие данные, при этом консольные экспортеры доступны для немедленной отладки. Каждое событие приложения преобразуется в span, формируя иерархическую следу. Например, запрос Flask становится серверным span, а внутренние вызовы создают вложенные окраски. Ошибки, такие как «KeyError», точно фиксируются с помощью кодов статуса и деталей исключений. Инструментация автоматически фиксирует аргументы и другие аннотированные данные в виде атрибутов span, при этом чувствительная информация, такая как номера кредитных карт, редактируется. Это гарантирует, что ошибки полностью документированы, появляясь как в конкретной операции, так и в родительском диапазоне запросов. Распределённая трассировка между несколькими процессами достигается через распространение контекста следов W3C. Wrapture вводит контекстные заголовки трассы в исходящие запросы, которые затем анализируются промежуточным ПО принимающей службы. Это позволяет трассировкам распространяться между разными сервисами, сохраняя единый идентификатор трассы. Даже при включённом экспорте OpenTelemetry обёртка сохраняет собственные заданные идентификаторы трассировки, обеспечивая непрерывность. Метрики также генерируются из тех же трассируемых событий, предоставляя агрегированные данные без необходимости явных изменений кода инструмента. Длительность запросов и вызовы автоматически собираются и приписываются релевантной информацией, такой как методы HTTP, маршруты и коды состояния. Эти метрики предоставляют ценную информацию о производительности и уровне ошибок. Накладные расходы при использовании wrapture с OpenTelemetry сопоставимы с прямым использованием SDK OpenTelemetry. Wrapture оптимизирует обработку span, создавая готовые пролёты напрямую, обходя часть внутренних накладных расходов SDK. Это снижает затраты, особенно для операций, вызывающих исключения. Основной принцип дизайна wrapture остаётся неизменным: корректное отслеживание вызовов в реальном времени как для тестирования, так и для трассировки производства. Будь то подача тестовой ленты или трассирующий бэкенд, основной механизм остаётся прежним. Страница экспорта OpenTelemetry содержит дополнительную информацию о продвинутых функциях, таких как дискретизация и интеграция логарифмического сигнала.
Набор на курс Stanford's Code in Place удвоился после появления инструментов для написания кода с использованием ИИ, что свидетельствует о возросшем интересе к изучению программирования. Крис Пич, который ведет курс, объясняет, почему людям все еще стоит учиться программировать. Он разделяет программирование на синтаксис и решение проблем, причем ИИ преуспевает в синтаксисе, а людям необходимо осваивать навыки решения проблем. Понимание фундаментальной архитектуры имеет решающее значение для выявления потенциальных ошибок и плохих структурных решений ИИ. Чрезмерная зависимость от ИИ может привести к атрофии навыков, поэтому программисты должны оставаться в курсе своего роста наряду с инструментами ИИ. Программирование служит отличной площадкой для отработки навыков решения проблем с быстрыми циклами обратной связи, в отличие от реальных решений. Наиболее ценным долгосрочным навыком является определение того, что стоит создавать, и понимание потребностей пользователей. ИИ может выступать в качестве мощного наставника, ускоряя обучение при использовании для преподавания фундаментальных концепций. Ключ в том, чтобы использовать ИИ как инструмент обучения, а не как замену критическому мышлению. Человеческое суждение, вкус и способность решать, что создавать, являются наиболее ценными навыками в эпоху ИИ.
DuckLake отличается тем, что задает один SQL-запрос, а не парсит многочисленные JSON-файлы и файлы метаданных перед доступом к данным. Его метаданные находятся в настоящей базе данных, а сами данные хранятся в обычных файлах Parquet. Педро Холанда, ведущий разработчик, присоединился к DuckDB в 2018 году. Гильермо Санчес Дионис также вносит свой вклад в DuckLake и новый протокол Quack. Каталог Quack позволяет DuckLake обрабатывать 200 транзакций в секунду при высокой конкуренции, превосходя другие открытые форматы таблиц. Этот выпуск спонсируется Six Feet Up и Talk Python Courses. Среди гостей — Педро Холанда и Гильермо Санчес; их ссылки предоставлены. Дополнительные ссылки содержат информацию о прогрессивных индексах, SQLite, Litestream, DuckDB, Iceberg и спецификациях DuckLake. Также выделены курсы DuckLake-dataframe и Polars. Доступна информация о парсинге CSV, Arrow без копирования, ART-индексах и асинхронном вводе-выводе в DuckDB. Наконец, включены ссылки для просмотра выпуска на YouTube и поиска транскриптов.
Ежегодная благотворительная акция JetBrains продлена до 14 сентября 2026 года, предлагая скидку 30% на лицензии PyCharm. Во время этой акции JetBrains направит 100% всех покупок или продлений PyCharm в DSF. Это мероприятие является значительной ежегодной благотворительной акцией для DSF, и они выражают благодарность за участие. Поиск исполнительного директора также завершается 14 сентября, ожидаются заинтересованные кандидаты. JetBrains является давним спонсором, и их сотрудничество в рамках опроса разработчиков Django 2026 было хорошо воспринято. Полные результаты опроса доступны на веб-сайте JetBrains, подчеркивая их сильные предложения по IDE. DSF призывает частных лиц и компании внести свой вклад в достижение своих целей по сбору средств. Способы помочь включают продление или покупку лицензии PyCharm, прямое спонсорство компании или пожертвование через их веб-сайт или GitHub Sponsors. Правление также открыто для обсуждения пожертвований, спонсорства, волонтерства и новых идей по сбору средств.
re.match() пытается сопоставить шаблон в самом начале строки. Он возвращает объект сопоставления, если шаблон найден в начале, в противном случае возвращает None. re.match("pi", "pi") и re.match("pi", "pie") оба возвращают совпадение, потому что "pi" находится в начале этих строк. Однако re.match("pi", "api") и re.match("pi", "magpie") не дают совпадения, так как "pi" не появляется в начале строки.В отличие от этого, re.search() сканирует всю строку и возвращает первое место, где найден шаблон, независимо от его положения. re.fullmatch() требует, чтобы вся строка точно соответствовала шаблону от начала до конца. Python 3.15 представил re.prefixmatch() как псевдоним для re.match(), стремясь к более четкой семантике благодаря своему названию. re.match() был мягко объявлен устаревшим в Python 3.15, что означает, что его не следует использовать для нового кода, но он остается безопасным для существующего кода. Для нового кода следует предпочитать re.prefixmatch(), если намерение состоит в том, чтобы сопоставлять только в начале.
EuroPython 2026 успешно прошел в Кракове с 13 по 19 июля благодаря участникам, докладчикам, волонтерам и спонсорам. Конференция продемонстрировала сообщество Python с увлекательными техническими презентациями и сильным чувством товарищества. Видеозаписи всех сессий и фотографии с конференции теперь доступны онлайн для всех желающих. В этом году мероприятие собрало 1386 участников, среди которых было значительное количество опытных пользователей Python. Основной Python стал самой популярной темой, за ним последовали веб-разработка и наука о данных и машинное обучение. Были введены два новых члена EuroPython Society, отмеченные за их значительный вклад. Впервые на сцене EuroPython была вручена награда Python Software Foundation Community Service Award. Мероприятие также отметило 25-летие EuroPython, отметив давних членов сообщества. Изюминкой спринтов стал самодельный фургон с джелато, способствующий духу сообщества. Сложная викторина Kahoot проверила знания участников о Python и конференции. Организаторы также поделились произведениями искусства, созданными участниками, и объявили о партнерстве с PyCon NL, PyCon España и Django on the Med. Их благодарность распространяется на всех спонсоров, особенно на платиновых спонсоров Manychat, Microsoft и Vercel.
CdXz5zHNQW_MR1HRatWUi.jpeg
Конечная точка /order магазина Flask работает медленно, и цель — выявить узкое место. Традиционные методы с использованием секундомера требуют изменений в коде, создают несвязанные строки логов и плохо справляются с периодическими замедлениями. Профайлеры предоставляют слишком много деталей, скрывая информацию, специфичную для запроса.Используя существующую конфигурацию, начальное трассирование немедленно выявляет разбивку по времени. Запрос занимает 37,3 мс, представление — 36,3 мс, сервис — 35,9 мс, а реестр — 35,1 мс, в то время как шлюз — всего 8 мкс. Это указывает на то, что реестр является основной причиной замедления.Концепция "собственного времени" отличает операции, которые медленны сами по себе, от тех, которые медленны из-за своих дочерних элементов. Wrapture вычисляет это, показывая, что реестр медленный сам по себе, в то время как сервис и представление медленны, потому что они вызывают реестр.Тест с использованием wrapture.instrumentation и wrapture.timeline подтверждает это: OrderService.place имеет собственное время 173 мкс из 31,0 мс, в то время как Ledger.record отвечает за большую часть продолжительности. Такой уровень детализации недоступен из стандартных профайлеров.Для долгосрочного мониторинга коллектор Aggregate собирает статистику по многим запросам, включая общее, собственное, минимальное и максимальное время. Отчет, полученный после отправки тридцати запросов на сервер, подтверждает, что Ledger.record является основным источником замедления по собственному времени.Для отслеживания замедлений по арендаторам wrapture.annotate позволяет добавлять пользовательские данные, такие как "X-Tenant", к текущим событиям. Это позволяет фильтровать трассировки, чтобы определить, какие арендаторы испытывают более медленные запросы.Коллектор Counter предоставляет более дешевую альтернативу, подсчитывая только операции без сохранения продолжительности, что подходит для утверждений, основанных на бюджете, в наборах тестов (например, для обнаружения проблем с запросами N+1). Следующим шагом является передача этих событий в бэкенд трассировки.
Сбои в многопоточном видеостримере, использующем NumPy и PyQt6, часто возникают из-за того, как QImage взаимодействует с памятью массива NumPy. Когда QImage создается из массива NumPy, он не копирует данные, а ссылается на исходный буфер памяти. Это создает опасную ситуацию в многопоточных приложениях, поскольку если рабочий поток изменяет или отбрасывает массив NumPy, QImage в потоке GUI может стать недействительным, что приведет к сбоям. Решение состоит в том, чтобы гарантировать, что QImage имеет свою собственную независимую копию данных. Это достигается путем вызова метода .copy() для QImage. Время выполнения этого копирования имеет решающее значение; оно должно быть выполнено до того, как QImage будет передан из рабочего потока в поток GUI, обычно перед его отправкой через сигнал. Кроме того, все обновления GUI, такие как вызов setPixmap, должны происходить исключительно в основном потоке. Использование сигналов и слотов — это правильный способ взаимодействия рабочих потоков с основным потоком для обновлений GUI. Предоставленный пример демонстрирует это, создавая QImage из массива NumPy, немедленно копируя его, а затем отправляя скопированный QImage через сигнал. Слот в основном потоке получает этот безопасный QImage, преобразует его в QPixmap и обновляет QLabel без сбоев. Внедряя эти практики, можно добиться надежной многопоточной потоковой передачи видео с помощью PyQt6.
Чтобы проверить, пуст ли QLineEdit, вы можете получить его текущий текст с помощью метода .text(). Этот метод возвращает текстовое содержимое в виде строки. Затем вы можете сравнить эту возвращенную строку с пустой строкой. Альтернативно, Python рассматривает пустые строки как ложные значения. Это означает, что вы можете напрямую проверить истинность строки, возвращаемой .text(). Пустая строка оценивается как False, а любая непустая строка оценивается как True. Следовательно, if not lineedit.text(): будет истинным, если поле ввода пусто. Распространенной практикой является использование сигналов, таких как textChanged, для отслеживания изменений в содержимом QLineEdit. Подключение этого сигнала к слоту позволяет динамически реагировать по мере ввода текста пользователем. Метод слота получает текущий текст в качестве аргумента. Внутри слота вы можете выполнить проверку истинности этого полученного текста. Это позволяет обновлять информацию в реальном времени, например, изменять метку, указывающую, пусто ли поле ввода или нет. Этот метод совместим с различными привязками Python Qt. Он предлагает лаконичный способ проверки пользовательского ввода без необходимости использования специального метода isEmpty().
Фоновые потоки в приложениях PyQt, управляемые QThreadPool или QThread, продолжают работать даже после закрытия главного окна. Это может привести к зависанию приложения или возникновению ошибок. Для решения этой проблемы переопределите метод closeEvent в классе вашего главного окна. Этот метод автоматически вызывается при начале закрытия окна, предоставляя возможность выполнить код очистки. Внутри closeEvent вы должны сигнализировать всем вашим фоновым рабочим о прекращении их выполнения. Для рабочих, реализованных как QRunnable, это обычно включает установку внутреннего флага, который метод run рабочего периодически проверяет. После сигнализации рабочим о прекращении работы используйте QThreadPool.waitForDone() для приостановки выполнения до тех пор, пока все потоки в пуле не завершат свои задачи. Это гарантирует, что ни один поток не будет внезапно завершен, предотвращая потенциальные проблемы. Наконец, вызовите event.accept(), чтобы разрешить нормальное закрытие окна. Также крайне важно обернуть выполнение цикла событий вашего приложения в sys.exit(), чтобы гарантировать чистое завершение процесса. Этот шаблон гарантирует, что все фоновые операции будут корректно остановлены до полного выхода из приложения.
Отслеживание запроса веб-приложения включает в себя захват деталей HTTP-запроса и всех вызовов, сделанных во время его обработки, в виде иерархического дерева. Приложения WSGI представляют трудности для отслеживания, поскольку статус и заголовки передаются через обратный вызов, тело является итерируемым объектом, потребляемым после вызова, а исключения обрабатываются внутренне. Пример приложения Flask демонстрирует это, с маршрутами для проверки работоспособности, цитат и заказов. Конфигурация для отслеживания теперь включает запись [[instrument]] для указания инструментации Flask. Эта настройка позволяет детально наблюдать за потоками запросов. Когда запрос Flask обрабатывается, трассировка показывает строку запроса, инициирующую дерево, за которой следуют вложенные вызовы, представляющие логику приложения. Ошибки фиксируются посредством обработки исключений внутри Flask, что позволяет инструментации отмечать их в событии запроса. Для управления шумом определенные пути, такие как проверки работоспособности, могут быть проигнорированы, чтобы они не генерировали данные трассировки. Обратные вызовы жизненного цикла расширений Flask также могут быть опционально исключены из наблюдения. Инструментация Flask работает путем применения привязок к ключевым точкам выполнения Flask, включая его промежуточное ПО WSGI, обработку маршрутов и управление исключениями. Основной единицей отслеживания является событие запроса, которое содержит все соответствующие данные, включая статус, продолжительность и детали HTTP. Это детальное отслеживание позволяет анализировать, на что тратится время приложения.
Этот проект реализует сервис на FastAPI с гранулированным ролевым контролем доступа (RBAC) с использованием Azure Entra ID для аутентификации. Вместо жесткого кодирования политик доступа в каждом маршруте, эти политики хранятся в таблице базы данных. Это позволяет администраторам изменять разрешения пользователей без изменения и повторного развертывания кода приложения. Система использует Azure Entra ID для аутентификации пользователей и получения их ролей из утверждений JWT. Сопоставление ключей конечных точек с требуемыми ролями хранится в таблице SQLModel EndpointPermission.Ядром логики авторизации является функция require, которая используется как зависимость FastAPI. Эта функция извлекает требуемые роли для конечной точки из базы данных и проверяет, есть ли они у аутентифицированного пользователя. Если нет, выдается ошибка 403 Forbidden. Ключевая строка для конечной точки является единственным литералом, жестко закодированным в определении ее маршрута.Критически важно, что конечная точка для управления этими разрешениями сама защищена тем же механизмом RBAC, гарантируя, что только администраторы могут изменять правила доступа. Предусмотрены меры предосторожности, предотвращающие случайную отмену администраторами собственного доступа к конечной точке управления разрешениями, и гарантирующие, что назначения ролей никогда не будут пустыми. В статье освещаются две распространенные проблемы конфигурации Azure: использование токенов v1 вместо v2, что вызывает ошибки недопустимых токенов, и тот факт, что вложенные членства в группах не отражаются в ролях пользователей для прямого назначения.Проект также предоставляет рекомендации по эффективному тестированию логики авторизации. Тесты могут переопределять зависимости аутентификации и сеанса для использования фиктивных пользователей и баз данных SQLite в памяти, что позволяет проводить всестороннее тестирование без внешних зависимостей. Такая конструкция, вынося политику как данные, делает авторизацию динамичной и управляемой, в соответствии с принципом 12-факторного приложения. Автор подчеркивает необходимость различать логику кода и изменяемую политику.
В этом выпуске PyCoder's Weekly освещаются различные темы для разработчиков Python. В нем обсуждается профилирование и ускорение приложений Python по умолчанию, в соответствии с новой книгой Дэна Одела "Fast by Default". Другая ключевая статья посвящена стратегиям миграции с pandas на Polars, включая полную миграцию конвейера с помощью LLM. Также анонсируется PR-AF, рецензент кода с открытым исходным кодом, который показал исключительные результаты на Code-Review-Bench.Несколько статей посвящены практическому использованию Python, например, когда использовать NotImplemented в dunder-методах и как построить архитектуру плагинов с помощью Pydantic и FastAPI. Важное обновление от PyPI.org указывает на то, что запросы метаданных больше не учитываются как загрузки пакетов, что повышает точность статистики загрузок. Учебные пособия предлагают руководство по созданию инструментов распознавания лиц и исправлению распространенных ошибок объекта "NoneType".Другой образовательный контент включает в себя введение в декораторы Python и советы по эффективному тестированию асинхронного Python. Разработчики также могут узнать о хранении статических и медиафайлов Django в Cloudflare R2. Провокационные статьи, такие как "Analysis Paralysis Sucks" и "Why OOP Exists", предлагают более широкие перспективы разработки.Предварительный просмотр Python 3.15 освещает изменение кодировки UTF-8 по умолчанию с соответствующей викториной. Выпуск также включает проекты, такие как Shedskin, транспайлер Python в C++, и Pandas-silent-bugs, демонстрирующий множество примеров ошибок в pandas. Также перечислены предстоящие события для сообщества Python в сентябре 2026 года, включая различные встречи и PyCon Cameroon.
CdXz5zHNQW_IGTZIgus4k.png
Фонд программного обеспечения Django ищет членов в свою Рабочую группу по сбору средств — критически важную инициативу, поскольку она стремится собрать 500 000 долларов к 2026 году. Это финансирование необходимо для поддержки существующих программ, таких как Django Fellows и Django Girls, а также для найма первого исполнительного директора DSF. Достижение этой цели требует стратегического мышления, выходящего за рамки простых пожертвований, с акцентом на корпоративные отношения, значимые спонсорские программы и демонстрацию ценности Django. Рабочая группа по сбору средств будет тесно сотрудничать с новым исполнительным директором для разработки комплексных усилий по сбору средств.DSF ищет людей с предыдущим опытом в области сбора средств, спонсорства, партнерства, развития бизнеса или продаж. Эти эксперты будут выявлять возможности, открывать двери и разрабатывать новые инициативы по сбору средств. Однако опыт в области сбора средств не является обязательным условием для вступления в группу. Фонд также ценит людей, которые понимают, как компании поддерживают открытый исходный код, имеют идеи по привлечению корпораций или обладают сильными навыками построения отношений и организационными навыками.Они ищут разнообразную группу, сочетающую опытных профессионалов со свежими взглядами, людей, которые могут вести работу, и тех, кто стремится учиться и вносить свой вклад. Рабочая группа работает в режиме ежемесячных встреч и асинхронной работы между сессиями. Всех желающих, независимо от их опыта в области сбора средств, призывают подать заявку и помочь Фонду программного обеспечения Django достичь своих амбициозных целей.
Видео с EuroPython 2026 теперь доступны онлайн, включая 117 записей от вступительных докладов до полных выступлений. Опрос "Состояние Django 2026" показывает, что, хотя ядро Django остается стабильным, окружающая экосистема быстро развивается. Интеграция с ИИ стала обычным явлением, хотя ее применение в рабочих процессах разработки все еще дорабатывается. Инструментарий консолидируется, при этом uv и Ruff демонстрируют значительное внедрение. Подсказки типов используются все чаще, но выбор проверки разнообразен. Заметной тенденцией является сосуществование сообществ, использующих серверный рендеринг шаблонов и API-only Django, с растущим внедрением htmx. Выпущена версия htmx 4.0.0, включающая переписывание с использованием fetch() и незначительные изменения API, такие как явное наследование атрибутов. Новые дополнения включают встроенные морф-свопы и тег hx-partial. htmx 2.x по-прежнему поддерживается и является последней версией на npm до 2027 года. Концепция "Функционального Дзен" способствует простоте в Python, отдавая предпочтение идиоматическому коду, данным вместо функций и чистым функциям. Этот подход предполагает тонкую "нечистую оболочку" вокруг "чистого ядра" для управления побочными эффектами. Недавние дополнения включают новые функции uv и крошечный интерпретатор Python. Голосование в управляющий совет также открыто.
Автор активно использует Claude Code в работе, разработав значительные части LernerPython.com и интегрировав ИИ-тьютора в курсы и рассылки. Это привело к тому, что он стал писать меньше кода вручную, при этом производя больше и получая удовольствие от процесса. Главный вывод заключается в том, что ИИ-агенты, такие как Claude Code, в целом делают то, что вы просите, но разработчики должны быть внимательны к потенциальным расхождениям между намерением, спецификацией и реализацией. Для эффективного управления кодом, сгенерированным ИИ, необходимо внедрить строгую валидацию, контрольные списки и последующие вопросы в контролируемой среде разработки. Четыре практики существенно изменили рабочий процесс автора: файл CLAUDE.md, выступающий в качестве контракта для инструкций ИИ, приоритет тестов над простыми различиями в коде, внедрение подробной телеметрии и логирования, а также использование небольших коммитов в качестве стратегии отката. Автор также предлагает три мастер-класса по использованию Claude Code с Python и Pandas, охватывающих вводные и продвинутые темы. Эти мастер-классы практические и направлены на обучение практическому применению ИИ в программировании. Для тех, кто рассматривает возможность участия в мастер-классах, доступна информационная сессия.
CdXz5zHNQW_nCJNA7OiJQ.png
Этот текст описывает, как использовать инструмент "wrapture" для наблюдения и отслеживания программ Python без изменения их исходного кода. Изначально отслеживание включало редактирование точки входа программы, что нежелательно для унаследованного или общего кода. Более гибкий подход использует отдельный конфигурационный файл, wrapture.toml, для указания того, что наблюдать и куда отправлять данные трассировки. Этот конфигурационный файл определяет цели наблюдения и связанные с ними методы, а также правила маскирования данных.Файл wrapture.toml позволяет нацеливаться на конкретные имена методов или шаблоны glob в модулях. Инструмент запускается с помощью python -m wrapture, за которым следует скрипт программы, который применяет конфигурацию перед выполнением программы. Этот метод генерирует тот же вывод трассировки, что и подход с модификацией исходного кода, но сохраняет логику наблюдения внешней. Для более длительных приложений вывод трассировки может быть направлен в файл, например trace.jsonl, в формате JSON Lines.Этот формат файла фиксирует подробную информацию о событиях, включая аргументы, результаты, исключения и время, что делает его легко обрабатываемым распространенными инструментами, такими как jq. Соображения безопасности при оставлении активной трассировки включают ограниченную очередь для предотвращения блокировки и суммирование аргументов, чтобы избежать сохранения живых объектов. Когда прямая командная строка невозможна, autowrapt может использоваться для внедрения wrapture при запуске интерпретатора через переменную окружения.Этот механизм загрузки обычно предназначен для разработки или отладки, а не для производственных сред. После внедрения трассировки ее можно динамически контролировать – приостанавливать и возобновлять или полностью отменять – без перезапуска приложения, используя функции, доступные через wrapture.bootstrap. Следующим шагом для wrapture является применение этой возможности трассировки к более сложным единицам приложений, таким как те, которые встречаются в веб-приложениях.
"Wrapture bindings, изначально использовавшиеся для модульного тестирования, также могут служить мощным механизмом трассировки. Привязка наблюдает за вызовами методов и генерирует события, которые затем обрабатываются "приемником" вместо тестовой ленты. Это позволяет в реальном времени описывать работу запущенной программы.В статье это иллюстрируется на примере OrderService, включающего Gateway, Ledger и Notifier, где платежи по картам могут быть отклонены. Три привязки применяются к ключевым методам: OrderService.place, Gateway.charge и Ledger.record. Простой приемник Printer используется для отображения этих событий.Вывод показывает подробную информацию о вызовах, включая аргументы, возвращаемые значения и исключения, с отступами, указывающими на вложенность вызовов. Важно отметить, что конфиденциальные данные, такие как номера карт, могут быть скрыты с помощью политик захвата wrapture.redact() на уровне привязки.Когда приемник не зарегистрирован, привязки несут минимальные накладные расходы, работая примерно за полмикросекунды на вызов. Для управления большими трассировками можно применять фильтрацию на уровне приемника или привязки.Фильтрация на уровне приемника, например wrapture.Depth(1, wrapture.Printer()), ограничивает вывод вызовами верхнего уровня, предоставляя краткий обзор. Фильтрация на уровне привязки с использованием when= принимает предикат для предотвращения создания событий для определенных вызовов, что делает ее очень эффективной.Однако when= пропускает только указанное событие; вложенные вызовы по-прежнему записываются. Чтобы подавить все дерево вызовов, к привязке можно добавить tree=True, гарантируя, что "ничего отсюда вниз" не будет отслежено.Привязки также отслеживают filtered_calls, позволяя пользователям понять, какие операции были подавлены. Эта настройка позволяет программам самоописывать свои действия с помощью данных в реальном времени, с минимальными изменениями кода и настраиваемыми приемниками для различных потребностей мониторинга."