2010-06-21 34 views
22

He visto personas que usan * .cfg (Python Buildout), * .xml (Gnome), * .json (extensión de Chrome), * .yaml (Google App Engine), * .ini e incluso * .py para la aplicación archivos de configuración (como Django).Pros y contras para diferentes formatos de configuración?

Mi pregunta es: ¿por qué hay tantos formatos de archivo de configuración diferentes? Puedo ver una ventaja desde un enfoque xml vs json (mucho menos detallado) o uno de Python (a veces tienes una aplicación Python y no quieres usar un módulo específico solo para analizar un archivo de configuración), pero ¿qué pasa con el otro? ¿enfoques?

Sé que hay incluso más formatos que los archivos de configuración que ejemplifiqué. ¿Cuáles son realmente sus ventajas en comparación entre sí? Razones históricas? Compatibilidad con diferentes sistemas?

Si inicias una aplicación para leer algún tipo de archivo de configuración (con un ecosistema de plugins), ¿cuál usarías?

¿Cuáles de las que di como ejemplo son las más antiguas? ¿Sabes que es historia?

Respuesta

12

Es sobre todo preferencia personal, propósito y bibliotecas disponibles. Personalmente creo que xml es demasiado detallado para los archivos de configuración, pero es popular y tiene grandes bibliotecas.

.cfg, .ini son formatos heredados que funcionan bien y muchos idiomas tienen una biblioteca incluida que los lee. Lo he usado en Java, Python, C++ sin problemas. Realmente no funciona como un formato de intercambio de datos y si estoy pasando datos, probablemente use el mismo formato para el intercambio de datos y configuración.

yaml y json están entre xml y cfg/ini. Puede definir muchas estructuras de datos en ambos, o puede ser un valor-clave simple como con cfg. Ambos formatos tienen grandes bibliotecas en python y supongo que muchos otros idiomas también tienen bibliotecas. Creo que json es un subconjunto de yaml.

Nunca he usado un archivo python como config, pero parece funcionar bien para django. Le permite tener algún código en la configuración que pueda ser útil.

La última vez que elegí un formato elegí yaml. Es simple pero tiene algunas características agradables, y la biblioteca de Python fue fácil de instalar y realmente buena. Json fue un segundo cercano y desde que la biblioteca de yaml analizó json elegí yaml sobre él.

+0

Es interesante conocer sus experiencias. ¡Gracias! –

+3

JSON es realmente un objeto, parece muy incorrecto usarlo como un archivo de configuración. Y carece de la capacidad de usar comentarios, bueno, correctamente. Siempre puedes crear una clave: valor para ella. – Anders

5

Nota, esta es pura opinión y especulación por mi parte, pero sospecho que la razón más importante para la gran cantidad de formatos es probable debido a la falta de una biblioteca de análisis de archivos de configuración omnipresente y fácilmente disponible. Al carecer de eso, la mayoría de los programas tienen que escribir sus propios analizadores, por lo que a menudo se equilibraría la complejidad de la estructura de configuración (jerárquica frente a plana, puramente de datos frente a lógica integrada como sentencias if, etc.), cuánto esfuerzo realizan los desarrolladores estuvimos dispuestos a gastar en escribir un analizador de archivos de configuración, y cuánto de dolor debería ser para el usuario final. Sin embargo, probablemente todos los motivos que haya enumerado y pueda pensar probablemente hayan motivado uno o dos proyectos al elegir su formato.

Para mis propios proyectos, suelo usar .ini simplemente porque hay un analizador excelente ya incorporado en Python y ha sido "lo suficientemente bueno" para la mayoría de mis casos de uso. En el par de casos, ha sido insuficiente, he utilizado un archivo de configuración basado en XML debido, una vez más, a la relativa simplicidad de la implementación.

+0

¿Qué es el analizador ini "integrado en python"? –

+1

@mattwilkie es 'configparser', para doc: https://docs.python.org/3/library/configparser.html –

Cuestiones relacionadas