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

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

3 ответов


использование ConfigObj, по крайней мере, очень просто и ini-файлы в общие гораздо проще (и более широко используется), чем YAML. Для более сложных случаев, включая проверку, значения по умолчанию и типы, ConfigObj предоставляет способ сделать это через проверку configspec.

простой код для чтения ini-файла с помощью ConfigObj:

from configobj import ConfigObj

conf = ConfigObj('filename.ini')
section = conf['section']
value = section['value']

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

посмотрите эти статьи для получения дополнительной информации, включая примеры проверки типа:


это зависит от того, что вы хотите сохранить в ваших конфигурационных файлах, и как вы их используете

  • если вы делаете круглое отключение (yaml→code→yaml) и хотите сохранить комментарии, вы не можете использовать PyYAML или ConfigParser.

  • если вы хотите сохранить порядок ваших ключей (например, при регистрации файлов конфигурации),PyYAML не делает этого, если вы не укажете !!omap (что делает его менее легким для обновления, чем обычный mapping)

  • если вы хотите иметь сложные структуры со списками неназванных элементов, содержащих сопоставления / диктанты, то ConfigParser и ConfigObj не поможет вам, поскольку пары ключ-значение INI-файлов должны входить в разделы, а списки могут быть только значениями.

на ruamel.yaml реализация YAML reader поддерживает все вышеперечисленное 1. Я использовал отличный ConfigObj fuzzyman для сохранения комментариев туда и обратно для долгое время, а также PyYAML для более сложных структур и это сочетает в себе лучшее из обоих миров. ruamel.yaml включает в себя yaml утилита, которая может конвертировать ConfigObj INI файлы в YAML


1 ruamel.yaml-это библиотека YAML, поддерживающая YAML 1.2 (я рекомендую использовать ее, но тогда я являюсь автором пакета). PyYAML поддерживает только (большую часть) YAML 1.1.


ConfigParser имеет действительно плохой API, ConfigObj должен быть хорошим, но я никогда не использовал его, для ini-файлов я обычно реализую свой собственный парсер.

однако ini-подобные форматы не обрабатывают различные типы, последовательности или рекурсивные сопоставления, поэтому я бы просто использовал yaml. Легко читать и редактировать с помощью редактора, есть стандарт для разбора этих файлов, и у вас нет ни одного из упомянутых недостатков ini-подобных форматов.