ConfigObj / ConfigParser frente al uso de YAML para el archivo de configuración de Python

¿Qué es mejor para crear un archivo de configuración para los progtwigs Python, el módulo integrado (ConfigParser) o el proyecto independiente (ConfigObj), o usar el formato de serialización de datos YAML? He escuchado que ConfigObj es más fácil de usar que ConfigParser, aunque no es una biblioteca integrada. También he leído que PyYAML es fácil de usar, aunque YAML toma un poco de tiempo para usarlo. Dejando de lado la facilidad de implementación, ¿cuál es la mejor opción para crear un archivo de configuración / configuración?

El uso de ConfigObj es al menos muy sencillo y los archivos ini en general son mucho más simples (y más utilizados) que YAML. Para casos más complejos, incluyendo validación, valores y tipos predeterminados, ConfigObj proporciona una manera de hacerlo a través de la validación de configspec.

Código simple para leer un archivo ini con ConfigObj:

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

Maneja automáticamente los valores de la lista por usted y permite valores de varias líneas. Si modifica el archivo de configuración, puede volver a escribirlo mientras conserva el orden y los comentarios.

Consulte estos artículos para obtener más información, incluidos ejemplos de la validación de tipo:

Depende de lo que quieras almacenar en tus archivos de configuración y de cómo los uses.

  • Si realiza un disparo redondo (yaml → código → yaml) y quiere que se conserven los comentarios, no puede usar PyYAML o ConfigParser .

  • Si desea conservar el orden de sus claves (por ejemplo, cuando PyYAML sus archivos de configuración), PyYAML no lo hace a menos que especifique !!omap (lo que hace que sea menos fácil de actualizar que un mapeo normal)

  • Si desea tener estructuras complejas con listas de elementos sin nombre que contengan asignaciones / ConfigParser , ConfigParser y ConfigObj no lo ayudarán, ya que los pares de clave-valor de los archivos INI tienen que ir a las secciones y las listas solo pueden ser valores.

La implementación ruamel.yaml del lector YAML es compatible con todo lo anterior ¹. He utilizado el excelente ConfigObj de Fuzzyman para la conservación de comentarios de viaje redondo durante mucho tiempo, así como PyYAML para estructuras más complejas y esto combina lo mejor de ambos mundos. ruamel.yaml incluye la utilidad yaml que puede convertir archivos INI de ConfigObj a YAML


¹ ruamel.yaml es una biblioteca YAML que admite YAML 1.2 (recomiendo usar eso, pero luego soy el autor del paquete). PyYAML solo admite (la mayoría de) YAML 1.1.

ConfigParser tiene una API realmente mala, se supone que ConfigObj es bueno, pero nunca lo he usado, para los archivos ini por lo general implemento mi propio analizador.

Sin embargo, los formatos ini-like no manejan diferentes tipos, secuencias o mapeos recursivos bien, así que solo usaría yaml. Es fácil de leer y editar con un editor, existe un estándar para analizar esos archivos y usted no tiene ninguno de los inconvenientes mencionados anteriormente que tienen los formatos tipo ini.