RSS Планета Python
Подписаться
Бретт Кэннон: Почему я написал PEP 832 — обнаружение виртуальных сред
Такие инструменты, как VS Code, с трудом определяют среду Python проекта, что препятствует выполнению основных функций, таких как выполнение кода и анализ зависимостей. Эта проблема возникает из-за того, что редакторы не имеют универсального метода для определения того, какой инструмент рабочего процесса использует проект или где расположены его виртуальные среды. При первом открытии проекта VS Code не может надежно определить, предпочитает ли пользователь Hatch, Poetry, uv или пользовательское решение. Текущие методы часто полагаются на угадывание на основе pyproject.toml, что зависит от поддержания точного списка поддерживаемых инструментов. Кроме того, инструменты рабочего процесса, которые хранят среды глобально или позволяют использовать общие среды, усложняют идентификацию, особенно когда пользователи управляют многочисленными средами. Простое решение существует для сред, хранящихся локально в каталоге .venv, предлагая базовую функциональность. Однако для сред вне проекта или при наличии нескольких сред специальный файл, такой как предложенный .python-envs, мог бы перечислять их пути. Для решения проблемы предпочтения инструмента предлагается таблица [workflow] в pyproject.toml для определения того, как инструменты запускаются в серверном режиме, обеспечивая связь через JSON-RPC на основе протокола Workflow Server Protocol. Этот протокол позволяет инструментам информировать редакторы о доступных средах и управлять их созданием. Альтернатива включает установление соглашений об именовании для инструментов CLI, которые возвращают необходимые детали среды. Мотивация автора проистекает из желания упростить настройку для всех пользователей Python, независимо от уровня опыта, минимизируя ручное управление средами. Это усилие направлено на решения, которые не являются специфичными для VS Code и могут быть приняты другими редакторами. Такой стандартизированный протокол связи поднял бы инструменты рабочего процесса за пределы простого промежуточного ПО, обеспечивая более широкую поддержку редакторов и сокращая разработку специализированных расширений.