Zen of Python
18.7K subscribers
1.5K photos
202 videos
38 files
3.71K links
Полный Дзен Пайтона в одном канале

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
Где Hypothesis хранит найденные сбои

Hypothesis нашёл неудачный вход, а следующий запуск будет уже на новой машине. Будет ли пример проверен снова? Это зависит в том числе от базы примеров: она сохраняет провалившиеся случаи, а фаза reuse загружает их в следующих запусках.

В обычной конфигурации используется .hypothesis/examples. Если каталог недоступен для чтения или записи, библиотека предупреждает и переходит к базе в памяти. При database=None хранения нет вообще. В текущем встроенном профиле ci задано именно это значение, так что постоянный кеш в CI нельзя считать включённым автоматически.

Проверьте активный профиль и срок жизни хранилища CI-раннера. База ускоряет повтор известных сбоев, но не заменяет регрессионный тест. Важный вход закрепите через @example или отдельный тест, а не оставляйте только в каталоге кеша.
⚡1
Путь к ресурсу пакета может быть временным

Ресурс установленного пакета не обязательно лежит обычным файлом рядом с модулем. Пакет может читаться из zip-архива, а importlib.resources.files() возвращает объект Traversable, без гарантии, что ресурс лежит на диске.

Для чтения текста часто достаточно read_text(). Если стороннему API нужен настоящий pathlib.Path, используйте as_file(resource) как контекстный менеджер. При необходимости он извлечёт ресурс во временный файл и удалит его при выходе из with.

Поэтому передавайте путь потребителю внутри блока, пока ресурс нужен. Не сохраняйте его для отложенного чтения после выхода. Очистка касается созданного временного файла: если ресурс уже лежал на диске, исходный файл пакета при закрытии контекста не удаляется.
🤔2👍1
Обрезать строку и не оторвать ударение

Одна видимая буква может состоять из нескольких кодовых точек. При сокращении подписи в интерфейсе срез по произвольному индексу может отделить комбинируемый знак от буквы.

В Python 3.15 появился итератор графемных кластеров unicodedata.iter_graphemes. Он использует расширенные правила сегментации Unicode UAX #29. У каждого элемента есть границы start и end, а преобразование в строку возвращает сам кластер.

Можно выбрать целые кластеры и по их границам сформировать сокращённую подпись. При этом число графем не определяет ширину текста: для выравнивания колонок терминала или расчёта пикселей всё ещё нужен отдельный способ измерения.
✍2
Куда пропало условие Windows в pylock.toml

Зависимость нужна только в Windows и только группе разработки. В pylock.toml это можно записать одним маркером с обоими условиями. Если при чтении потерять весь маркер, пакет начнёт устанавливаться и на других платформах.

Именно такую ошибку исправили в Pipenv 2026.10.1. Она затрагивала маркеры, которые вместе с ограничением платформы или версии Python содержали dependency_groups. В журнале приведён пример файла, экспортированного через PDM. При обработке группы Pipenv терял и оставшуюся часть условия.

Если вы экспортируете зависимости в pylock.toml, а затем устанавливаете их через Pipenv, проверьте комбинированные маркеры на разных целевых окружениях.