Подтвердить что ты не робот

ConfigObj/ConfigParser против использования файла настроек YAML для Python

Что лучше для создания файла настроек для программ Python, встроенного модуля (ConfigParser) или независимого проекта (ConfigObj) или с использованием формата сериализации данных YAML? Я слышал, что ConfigObj проще в использовании, чем ConfigParser, хотя он не является встроенной библиотекой. Я также прочитал, что PyYAML прост в использовании, хотя YAML занимает немного времени для использования. Простота реализации в стороне, что является лучшим вариантом для создания файла настроек/конфигурации?

4b9b3361

Ответ 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-подобных форматов.