2010-01-08 10 views
14

Ich verwende ConfigParser zum Konfigurieren meiner Anwendung, und jetzt möchte ich es leicht verteilbar machen und gleichzeitig die Konfigurierbarkeit bewahren.Verpacken von Python-Anwendungen mit Konfigurationsdateien

Ich denke, ich brauche ein Verzeichnis mit Konfigurationsdatei Vorlagen und eine Möglichkeit, die Konfiguration zu generieren, die tatsächlich von diesen zu verwenden. Dann brauche ich einen Platz, um es zu speichern, der in virtualenv, dem Heimverzeichnis der Benutzer usw. funktioniert. Ich möchte, dass es so nah an normalen Unix-Paketen ist, d. H. Config in etc, aber mit Überschreibungen im Home-Verzeichnis. Gibt es dafür eine fertige Lösung, und wenn nicht, was sollte ich in meine setup.py etc einbauen, damit es so funktioniert, wie ich es möchte?

Antwort

9

können Sie data_files Option von distutils verwenden, um Dateien zu installieren, wo immer Sie möchten.

data_files gibt eine Folge von (directory, files) Paare auf folgende Weise:

setup(..., 
     data_files=[('/etc', ['cfg/config1.ini', 'cfg/config2.ini']), 
        ('/etc/init.d', ['bin/initscript1'])], 
     .... 
    ) 

Wenn in Ihrer App die Config-Datei zu lesen, können Sie eine /home Version zusammenführen, wenn es vorhanden ist, .read() method of ConfigParser objects mit:

files_read = cfgparserobj.read(['/etc/config1.ini', 
           os.path.expanduser('~/.config1.ini')]) 
for fname in files_read: 
    print "Reading config from", fname 

Das wird /etc/config1.ini lesen und dann die Definitionen mit Zeug aus .config1.ini im Home-Verzeichnis des Benutzers überschreiben, wenn es existiert.

+6

Gibt es eine Möglichkeit, dies mit virtualenv gut zu machen? I.e. Welchen Pfad sollte ich angeben, um Inhalte in myvirtenv/etc/myconf.ini zu speichern? –

+4

Ich weiß, das ist ein alter Post, aber kann immer noch nützlich sein. @JoakimLundborg: Sie können '' sys.prefix'' verwenden, was standardmäßig '' usr'' ist, und den Pfad Ihres virtualenv in Ihrem Fall (mit dem reellen Präfix in '' sys.real_prefix'' – linkdd

+0

Using sys .real_prefix scheint sehr vielversprechend zu sein, es würde auch eine Möglichkeit erfordern, um den gleichen Ort zur Laufzeit zu bekommen, um die Konfigurationsdatei von dort zu lesen, kann sie für diesen Zweck verwendet werden? – a1an

Verwandte Themen