Существуют ли какие-либо рекомендации по документации конфигурационного файла, особенно для python?
В частности, в научных вычислениях обычно используется файл конфигурации в качестве входных данных для управления заданием пакетной обработки (например, моделированием) и ожидается, что пользователь настроит значительную часть конфигурации для своего сценария. (Конфигурация также, вероятно, выбирает между различными модулями обработки, каждый из которых имеет разные наборы полей конфигурации.) Таким образом, пользователь должен знать: что означает или влияет каждый параметр; какие настройки не используются (при каких обстоятельствах); каковы значения по умолчанию (и допустимые значения или диапазоны); и т. д.
Я обнаружил, что неполные документы файла конфигурации являются обычным явлением. Фундаментальная проблема заключается в том, что если документы поддерживаются отдельно от кода, они рассинхронизируются. (Это кажется меньшей проблемой с документами API из-за стандартных практик, включающих совмещенные строки документации и автогенерацию из сигнатур функций/argspec.) Например, если стандартный python configparser используется один раз для анализа файла конфигурации, тогда код для доступа к отдельным атрибутам ( и неявное определение схемы конфигурации) по-прежнему могут быть распределены по всей базе кода (и, возможно, доступны только во время выполнения, а не при создании документации).
Дальнейшие мысли:
- Является ли плохой практикой замена файла конфигурации (yaml или аналогичного) на настраиваемый пользователем скрипт Python (чтобы требовались только документы API)?
- Раздача хорошо прокомментированного примера файла конфигурации (который также используется в автоматических тестах): как вести себя, если разные сценарии дублируют большие разделы, но нужны совершенно разные поля?
- Можно ли поддерживать единую схему как для использования в коде (чтобы помочь синтаксическому анализу, проверке и установке значений по умолчанию), так и для создания документов каким-либо образом?
- Существует ли доступный для чтения/записи способ (де)сериализации состояния некоторого экземпляра (под)класса, который представляет новый пакетный процесс (чтобы конфигурация была покрыта существующей документацией)?