Что лучше для создания файла настроек для программ Python, встроенного модуля (ConfigParser) или независимого проекта (ConfigObj) или с использованием формата сериализации данных YAML? Я слышал, что ConfigObj проще в использовании, чем ConfigParser, хотя он не является встроенной библиотекой. Я также прочитал, что PyYAML прост в использовании, хотя YAML занимает немного времени для использования. Простота реализации в стороне, что является лучшим вариантом для создания файла настроек/конфигурации?
ConfigObj/ConfigParser против использования файла настроек YAML для Python
Ответ 1
Использование ConfigObj по крайней мере очень просто, и ini файлы в целом намного проще (и более широко используются), чем YAML. Для более сложных случаев, включая проверки, значения и типы по умолчанию, ConfigObj предоставляет способ сделать это с помощью проверки конфигов.
Простой код для чтения ini файла с помощью ConfigObj:
from configobj import ConfigObj
conf = ConfigObj('filename.ini')
section = conf['section']
value = section['value']
Он автоматически обрабатывает значения списка для вас и допускает многострочные значения. Если вы измените файл конфигурации, вы можете записать его обратно, сохраняя при этом порядок и комментарии.
Дополнительные сведения см. в этих статьях, включая примеры проверки типов:
Ответ 2
Это зависит от того, что вы хотите сохранить в своих конфигурационных файлах и как вы их используете.
-
Если вы делаете круглое отключение (yaml → code → yaml) и хотите сохранить комментарии, вы не можете использовать
PyYAMLилиConfigParser. -
Если вы хотите сохранить порядок своих ключей (например, при проверке ваших файлов конфигурации),
PyYAMLне делает этого, если вы не укажете!!omap(что делает его менее простым для обновления, чем нормальное отображение) -
Если вы хотите иметь сложные структуры со списками неназванных элементов, содержащих сопоставления/словари, то
ConfigParserиConfigObjне помогут вам, так как пары ключ-значение файлов INI должны перейти в разделы и списки могут быть только значениями.
ruamel.yaml реализация читателя YAML поддерживает все вышеперечисленное ¹. Я использовал fuzzyman отличную конфигурацию ConfigObj для сохранения комментариев в оба конца в течение длительного времени, а также PyYAML для более сложных структур, и это сочетает в себе лучшее из обоих миров. ruamel.yaml включает утилиту yaml, которая может конвертировать файлы ConfigObj INI в YAML
¹ ruamel.yaml - библиотека YAML, которая поддерживает YAML 1.2 (я рекомендую использовать это, но затем я являюсь автором пакета). PyYAML поддерживает только (большинство) YAML 1.1.
Ответ 3
У ConfigParser есть очень плохой API, но ConfigObj должен быть хорошим, но я никогда не использовал его, поскольку ini файлы обычно реализуют мой собственный синтаксический анализатор.
Однако ini-подобные форматы не обрабатывают разные типы, последовательности или рекурсивные отображения в любом случае, поэтому я бы просто использовал yaml. Он легко читается и редактируется с помощью редактора, есть стандарт для разбора этих файлов, и у вас нет ни одного из упомянутых ниже-ini-подобных форматов.