Секция [project.optional-dependencies] описывает функции пакета, которым нужны дополнительные библиотеки. Пользователь подключает их через extra в квадратных скобках. Обычная установка остается легче.

Объявите extra

Ключ становится публичным именем возможности, а список преобразуется в метаданные Requires-Dist с условием extra, которое читают pip и другие совместимые установщики.

[project.optional-dependencies]
cli = ["rich>=14"]

Установите нужную возможность

Квадратные скобки выбирают один или несколько extras, после чего resolver добавляет их требования к обязательным зависимостям конкретной версии дистрибутива.

python -m pip install "sample-package[cli]"

Не храните здесь инструменты команды

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

Проверьте две чистые установки, базовую и с extra: импорт основного модуля должен работать без необъявленного пакета, который случайно остался в окружении разработчика.

Для внутренних инструментов используйте dependency-groups. Поля метаданных разобраны в руководстве Writing your pyproject.toml.