2012-01-11 7 views
5

Mi piacerebbe importare dinamicamente varie impostazioni e configurazioni nel mio programma python: cosa fareste di solito con un file .ini o qualcosa di simile.Uso di Python come linguaggio di configurazione per un programma Python

Ho iniziato con JSON per la sintassi del file di configurazione, quindi spostato su YAML, ma in realtà mi piacerebbe usare Python. Minimizzerà il numero di formati e mi permetterò di usare il codice nel file di configurazione, che può essere conveniente.

ho inciso un sistema basato __import__ per consentire questo codice usando che assomiglia:

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

Funziona praticamente, ma io sono in esecuzione in tutti i tipi di problemi esoterici - ad es. se provo ad importare "test" raccoglie alcune librerie python interne che si trovano nel percorso python invece del mio test.

Quindi mi chiedo: sta usando Python come linguaggio di configurazione per un programma Python praticabile o sto chiedendo problemi? Ci sono esempi da cui posso rubare?

+3

Il progetto Django fa quasi esattamente questo. È comune. È una buona idea. Scegli un nome migliore. La libreria è piena di nomi che non puoi usare. Tuttavia, ci sono un numero quasi infinito di nomi che sono ** non ** nella libreria. –

+0

Grazie S.Lott. Ho incontrato il problema "test" quasi immediatamente, quindi mi ha spaventato - sono preoccupato che ci saranno scontri di nomi casuali che causeranno il debug degli incubi nella produzione. – Parand

+0

Non sono "casuali". Sono ben documentati nella documentazione della biblioteca. –

risposta

6

Un modo semplice è questo.

Il file di configurazione assegna un gruppo di variabili globali.

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

si utilizza importazione tutte queste impostazioni come questo

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

Ora il dizionario impostazioni ha tutte le variabili globali impostate.

+0

Il tuo commento era in realtà la risposta che volevo accettare; Ho finito per andare con il modello di importazione sopra. – Parand

5

utilizza python come linguaggio di configurazione per un programma python valido o sto chiedendo problemi?

Depends; rendi conto che stai ricevendo un formato di file di configurazione completo di Turing con interfaccia OS. Ciò potrebbe sollevare problemi di sicurezza, quindi non farlo con i file di configurazione di una fonte non attendibile.

OTOH, questa configurazione può essere molto conveniente.

Ci sono esempi da cui posso rubare?

Django.

+0

IPython fa anche questo. –

Problemi correlati