¿Por qué tantas aplicaciones / frameworks mantienen sus archivos de configuración en un formato no ejecutado?

StackOverflow https://stackoverflow.com/questions/1642413

Pregunta

Muchos frameworks mantienen sus archivos de configuración en un idioma diferente del resto del programa. Por ejemplo, Appengine mantiene la configuración en formato yaml. para comparar, DJango settings.py es un módulo de Python. Hay muchas desventajas que puedo ver con esto.

Si está en el mismo idioma que el resto del programa, puedo

Haga cosas interesantes en el archivo de configuración.

 MEDIA_DIR = os.path.join(os.path.dir(__file__), 'media')
 #Or whaever the correct cals are, you get the idea.
  • No tiene que aprender un nuevo formato (ciertamente ligero)
  • Mis herramientas funcionan como se esperaba con él.
  • Solo puedo hacer import conf etc.

Puedo ver las ventajas si fuera un lenguaje pesado como C / C ++, etc., pero para Python, ¿por qué tiene sentido? Simplemente parece que le quita energía sin agregar ningún beneficio.

¿Fue útil?

Solución

Algunos diseñadores de framework creen que los archivos de configuración son lugares inapropiados para una lógica pesada. Así como el marco MVC le impide colocar la lógica donde no pertenece, el archivo de configuración le impide colocar la programación donde no pertenece.

Es una cuestión de gustos y filosofía.

Dicho esto, prefiero el método de Django.

Otros consejos

Python puede no ser siempre el único lenguaje en el que se ejecuta appengine. Por lo tanto, el mismo archivo de configuración de yaml podría impulsar una aplicación anexa escrita en, por ejemplo, java o perl

A veces necesita usar una herramienta automática / GUI para analizar y / o generar y / o modificar un archivo de configuración. Esto no es fácil si su archivo de configuración es un script de Python.

Hay una muy buena razón: si su programa se distribuye en un entorno inseguro, como la computadora del usuario, la ejecución de un archivo de texto que es tan fácil de modificar es la puerta abierta a muchos virus. Este es menos el caso con una aplicación django donde la aplicación está alojada en el servidor, un entorno seguro. Pero con una aplicación distribuida en Windows usando py2exe, debe abstenerse de hacer que su programa ejecute cosas aleatorias.

Otra razón para usar una sintaxis como YAML es que puede manipular el archivo usando otras herramientas, incluso otros idiomas, el formato es portátil y está suficientemente documentado.

Dicho esto, cuando necesito tener un archivo de configuración con un programa de Python, utilizo un diccionario de Python con algunas medidas de seguridad:

  • elimine el adjunto {} para que no se evalúe directamente en una expresión de Python
  • uso de safe_eval para descartar cualquier elemento ejecutable.

Probablemente no se les ocurrió que podrían hacerlo. Muchos programadores son de los viejos tiempos donde los lenguajes de script eran lentos y no eran realmente más simples que los lenguajes de programación (solo mira cosas como shells de Unix). Cuando aparecieron ingeniosos lenguajes dinámicos, simplemente se apegaron a los archivos de configuración de solo texto. porque eso es lo que siempre hicieron.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top