TOML

uv Environment Markers Validator

Проверить синтаксис PEP 508 environment markers в полях required-environments и no-build-isolation-package сразу в нескольких pyproject.toml.

Как это работает

Поле required-environments в секции [tool.uv] задаёт, для каких платформ ваш проект вообще может быть установлен — актуально для зависимостей вроде PyTorch, которые публикуют только предсобранные wheel без исходного дистрибутива, и потому устанавливаются исключительно на явно перечисленных платформах. Синтаксис условия — это PEP 508 environment marker, тот же формат, что используется в extras зависимостей, но с более строгими последствиями ошибки: опечатка не выдаст явную ошибку сразу, а тихо приведёт к невозможности установки на платформе, которая должна была поддерживаться. uv Environment Markers Validator online проверяет синтаксис таких условий сразу в нескольких pyproject.toml.

Второе связанное поле, no-build-isolation-package, использует похожий, но не идентичный принцип — оно не описывает условие платформы, а перечисляет конкретные пакеты, для которых нужно отключить изоляцию сборки, что требуется для пакетов вроде cchardet, чьи build-зависимости должны устанавливаться заранее как обычные зависимости проекта, а не в изолированной среде сборки.

Инструмент разбирает оба поля во вставленных файлах и проверяет синтаксическую корректность marker-выражений в required-environments (валидные операторы, корректные имена переменных вроде sys_platform, platform_machine), помечая некорректные условия до того, как они тихо сломают резолюцию зависимостей при реальной установке.

Частые вопросы

Для каких пакетов вообще актуально поле required-environments?

В первую очередь для пакетов, которые публикуют только предсобранные wheel-дистрибутивы без исходного кода, например PyTorch — такие пакеты физически можно установить только на платформах, для которых существует готовый бинарный дистрибутив, и required-environments явно ограничивает разрешённый набор платформ проекта этим набором.

Что произойдёт при синтаксической ошибке в marker-выражении?

uv, скорее всего, либо не сможет корректно распарсить условие и выдаст ошибку резолюции зависимостей, либо неверно интерпретирует условие, что на практике означает разрешение установки на неподдерживаемой платформе или наоборот — валидатор помогает поймать это до реальной попытки установки.

Чем no-build-isolation-package отличается от required-environments по назначению?

required-environments ограничивает платформы, на которых проект вообще может быть установлен, а no-build-isolation-package решает другую задачу — отключает изоляцию сборки для конкретных пакетов, чьи build-зависимости должны быть доступны заранее как обычные зависимости проекта.

Можно ли проверить сразу несколько pyproject.toml монорепозитория одним прогоном?

Да, инструмент принимает несколько файлов, разделённых пустой строкой, что удобно для монорепозитория с несколькими Python-пакетами, каждый из которых может иметь собственные ограничения платформы или сборки.