Где Hypothesis хранит найденные сбои
Hypothesis нашёл неудачный вход, а следующий запуск будет уже на новой машине. Будет ли пример проверен снова? Это зависит в том числе от базы примеров: она сохраняет провалившиеся случаи, а фаза
В обычной конфигурации используется
Проверьте активный профиль и срок жизни хранилища CI-раннера. База ускоряет повтор известных сбоев, но не заменяет регрессионный тест. Важный вход закрепите через
Hypothesis нашёл неудачный вход, а следующий запуск будет уже на новой машине. Будет ли пример проверен снова? Это зависит в том числе от базы примеров: она сохраняет провалившиеся случаи, а фаза
reuse загружает их в следующих запусках.В обычной конфигурации используется
.hypothesis/examples. Если каталог недоступен для чтения или записи, библиотека предупреждает и переходит к базе в памяти. При database=None хранения нет вообще. В текущем встроенном профиле ci задано именно это значение, так что постоянный кеш в CI нельзя считать включённым автоматически.Проверьте активный профиль и срок жизни хранилища CI-раннера. База ускоряет повтор известных сбоев, но не заменяет регрессионный тест. Важный вход закрепите через
@example или отдельный тест, а не оставляйте только в каталоге кеша.⚡1
Путь к ресурсу пакета может быть временным
Ресурс установленного пакета не обязательно лежит обычным файлом рядом с модулем. Пакет может читаться из zip-архива, а
Для чтения текста часто достаточно
Поэтому передавайте путь потребителю внутри блока, пока ресурс нужен. Не сохраняйте его для отложенного чтения после выхода. Очистка касается созданного временного файла: если ресурс уже лежал на диске, исходный файл пакета при закрытии контекста не удаляется.
Ресурс установленного пакета не обязательно лежит обычным файлом рядом с модулем. Пакет может читаться из zip-архива, а
importlib.resources.files() возвращает объект Traversable, без гарантии, что ресурс лежит на диске.Для чтения текста часто достаточно
read_text(). Если стороннему API нужен настоящий pathlib.Path, используйте as_file(resource) как контекстный менеджер. При необходимости он извлечёт ресурс во временный файл и удалит его при выходе из with.Поэтому передавайте путь потребителю внутри блока, пока ресурс нужен. Не сохраняйте его для отложенного чтения после выхода. Очистка касается созданного временного файла: если ресурс уже лежал на диске, исходный файл пакета при закрытии контекста не удаляется.
🤔2👍1
Обрезать строку и не оторвать ударение
Одна видимая буква может состоять из нескольких кодовых точек. При сокращении подписи в интерфейсе срез по произвольному индексу может отделить комбинируемый знак от буквы.
В Python 3.15 появился итератор графемных кластеров
Можно выбрать целые кластеры и по их границам сформировать сокращённую подпись. При этом число графем не определяет ширину текста: для выравнивания колонок терминала или расчёта пикселей всё ещё нужен отдельный способ измерения.
Одна видимая буква может состоять из нескольких кодовых точек. При сокращении подписи в интерфейсе срез по произвольному индексу может отделить комбинируемый знак от буквы.
В Python 3.15 появился итератор графемных кластеров
unicodedata.iter_graphemes. Он использует расширенные правила сегментации Unicode UAX #29. У каждого элемента есть границы start и end, а преобразование в строку возвращает сам кластер.Можно выбрать целые кластеры и по их границам сформировать сокращённую подпись. При этом число графем не определяет ширину текста: для выравнивания колонок терминала или расчёта пикселей всё ещё нужен отдельный способ измерения.
✍2
Куда пропало условие Windows в pylock.toml
Зависимость нужна только в Windows и только группе разработки. В
Именно такую ошибку исправили в Pipenv 2026.10.1. Она затрагивала маркеры, которые вместе с ограничением платформы или версии Python содержали
Если вы экспортируете зависимости в
Зависимость нужна только в Windows и только группе разработки. В
pylock.toml это можно записать одним маркером с обоими условиями. Если при чтении потерять весь маркер, пакет начнёт устанавливаться и на других платформах.Именно такую ошибку исправили в Pipenv 2026.10.1. Она затрагивала маркеры, которые вместе с ограничением платформы или версии Python содержали
dependency_groups. В журнале приведён пример файла, экспортированного через PDM. При обработке группы Pipenv терял и оставшуюся часть условия.Если вы экспортируете зависимости в
pylock.toml, а затем устанавливаете их через Pipenv, проверьте комбинированные маркеры на разных целевых окружениях.