Что лучше для создания файла настроек для программ 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-подобных форматов.