2012-01-11 11 views
5

Me gustaría importar dinámicamente varias configuraciones y configuraciones en mi programa python, lo que normalmente harías con un archivo .ini o algo similar.Usando Python como el lenguaje de configuración para un programa de Python

Empecé con JSON para la sintaxis del archivo de configuración, luego me moví a YAML, pero realmente me gustaría usar Python. Minimizará la cantidad de formatos y me permitirá usar código en el archivo de configuración, que puede ser conveniente.

Pirateé un sistema basado __import__ para permitir el uso de este código que se parece a:

account_config = __import__(settings.CONFIG_DIR + '.account_name', fromlist=[settings.CONFIG_DIR]) 

Básicamente funciona, pero me estoy quedando en todo tipo de problemas esotéricos - por ejemplo. si trato de importar "prueba", recoge alguna biblioteca interna de python que está en la ruta de Python en lugar de mi prueba.

Así que me pregunto: ¿está utilizando python como el lenguaje de configuración para un programa python o estoy pidiendo problemas? ¿Hay ejemplos de los que puedo robar?

+3

El proyecto Django hace casi exactamente esto. Es común. Es una buena idea. Solo elige un nombre mejor. La biblioteca está llena de nombres que no puedes usar. Sin embargo, hay una cantidad casi infinita de nombres que ** no ** en la biblioteca. –

+0

Gracias S.Lott. Me encontré con el problema de la "prueba" casi de inmediato, así que me asusté. Me preocupa que haya enfrentamientos de nombres aleatorios que causarán pesadillas de depuración en la producción. – Parand

+0

No son "aleatorios". Están bien documentados en la documentación de la biblioteca. –

Respuesta

6

Una manera fácil es esto.

Su archivo de configuración asigna un grupo de variables globales.

CONFIG = "some string" 
ANOTHER = [ "some", "list" ] 
MORE = "another value" 

Se utilizan importación todos estos ajustes como éste

settings = {} 
execfile('the_config.py', settings) 
settings['CONFIG'] == "some string" 

Ahora su diccionario configuración tiene todas las variables globales establecidos.

+0

Tu comentario fue en realidad la respuesta que quería aceptar; Terminé yendo con el modelo de importación anterior. – Parand

5

está utilizando python como el lenguaje de configuración para un programa python viable o estoy pidiendo problemas?

Depends; se da cuenta de que está obteniendo un formato de archivo de configuración completo de Turing con la interfaz del sistema operativo. Eso podría generar problemas de seguridad, por lo tanto, no haga esto con archivos de configuración de una fuente que no sea de confianza.

OTOH, esta configuración puede ser muy conveniente.

¿Hay ejemplos de los que puedo robar?

Django.

+0

IPython también hace esto. –

Cuestiones relacionadas