Siemens: новый подход к декларированию и верификации зависимостей Python
В проектах на Python декларации зависимостей задаются самыми разными способами: от требований без указания версий до нижних границ, диапазонов и жёстких пинов. Такое разнообразие порождает два вопроса, которые часто остаются без ответа: как были выбраны эти декларации и как они верифицируются? Специалисты Siemens предлагают системный подход, позволяющий сделать заявления о поддержке версий осознанными и обоснованными.
Декларации как утверждения о версиях
Любая декларация зависимости — это утверждение о версиях пакетов: допущенная версия считается поддерживаемой, а исключённая — несовместимой. Каждое такое утверждение требует соответствующей проверки. На практике декларации нередко следуют настройкам инструментов по умолчанию и привычкам, а не осознанному выбору, а верификация не всегда соответствует заявленным claims, что снижает полезность проекта для downstream-потребителей.
Политика деклараций для изолированных и совместных сред
Корректные декларации зависят от того, является ли среда изолированной или в ней совместно устанавливаются другие пакеты. Библиотеки должны ограничивать версии не строже, чем требуют доказательства, тогда как приложения и зависимости для разработки не должны заявлять больше, чем подтверждаетсяevidence. В статье выводится политика деклараций для обоих случаев и каждая декларация сопоставляется с доказательствами, способными обосновать её утверждение.
Технические детали: спецификаторы версий и расположение деклараций
Требование вида pydantic>=2.11 состоит из имени дистрибутива, идентифицирующего пакет, и спецификатора версии, ограничивающего допустимые версии согласно спецификациям dependency specifier и version specifier. Спецификатор может объединять несколько разделённых запятыми условий, все из которых должны выполняться. При этом таблица ограничена финальными релизами; другие факторы — пре-релизы, пост-релизы, маркеры окружения, совместимость с Python и доступность подходящих артефактов — дополнительно влияют на то, какие версии квалифицируются.
Проект записывает требования как декларации в трёх разделах файла pyproject.toml, которые различаются тем, публикуются ли они вместе с пакетом и, соответственно, какие среды они ограничивают. Поскольку резолверы обращаются только к опубликованным метаданным, runtime-декларации должны быть особенно тщательно обоснованы.
Применение в России
Предложенная методика актуальна для российских промышленных и IT-компаний, разрабатывающих ПО на Python для АСУ ТП, MES и систем предиктивной аналитики. В условиях импортозамещения и перехода на собственные репозитории пакетов строгая политика декларирования и верификации зависимостей помогает снизить риски несовместимости при обновлениях, повысить воспроизводимость сборок и упростить аудит сторонних компонентов в критичных системах автоматизации.