Problem beim Zugriff auf Konfigurationsdateien in einem Python-Ei

8

Ich habe ein Python-Projekt mit folgender Struktur:

%Vor%

Ich habe eine setup.py-Datei geschrieben, die das in ein Ei mit derselben Dateistruktur konvertiert. (Wenn ich es mit einem Zip-Programm untersuche, scheint die Struktur identisch zu sein.) Das Lustige ist, wenn ich den Python-Code von meiner IDE aus starte, funktioniert es einwandfrei und kann auf die Konfigurationsdateien zugreifen; aber wenn ich versuche, es aus einem anderen Python-Skript mit dem Ei auszuführen, scheint es nicht, die Konfigurationsdateien im Ei zu finden. Wenn ich die Konfigurationsdateien in ein Verzeichnis relativ zum aufrufenden Python-Skript (außerhalb des Eies) lege, funktioniert es - aber das verhindert den Zweck, ein in sich geschlossenes Ei zu haben, das all das hat Funktionalität des Programms und kann von überall aufgerufen werden. Ich kann beliebige Klassen / Module verwenden und alle Funktionen aus dem Ei ausführen, solange sie nicht die Konfigurationsdateien verwenden ... aber wenn sie das tun, kann das Ei sie nicht finden und so funktionieren die Funktionen nicht.

Jede Hilfe wäre wirklich willkommen! Wir sind neu hier und wissen nicht, wo wir anfangen sollen.

    
froadie 18.06.2010, 16:14
quelle

2 Antworten

11

Das Problem ist, die Konfigurationsdateien sind keine Dateien mehr - sie sind in dem Ei verpackt. Es ist nicht einfach, die Antwort in den Dokumenten zu finden, aber es ist da. Im Einführungstool Entwicklerhandbuch :

  

In der Regel bearbeiten vorhandene Programme das Attribut __file__ eines Pakets, um den Speicherort von Datendateien zu ermitteln. Diese Manipulation ist jedoch nicht mit PEP 302-basierten Import-Hooks kompatibel, einschließlich des Imports aus Zip-Dateien und Python-Eiern.

Um auf sie zuzugreifen, müssen Sie den Anweisungen für die Ressourcenverwaltungs-API folgen.

In meinem eigenen Code hatte ich dieses Problem mit einer Protokollierungskonfigurationsdatei. Ich habe die API erfolgreich wie folgt verwendet:

%Vor%     
ire_and_curses 18.06.2010, 16:25
quelle
2

Siehe Einführung von Setuptools zum Zugriff auf Paced-Datendateien zur Laufzeit . Sie müssen Ihre Konfigurationsdatei auf eine andere Weise aufrufen, wenn Sie möchten, dass das Skript in einem Ei. Damit dies funktioniert, müssen Sie möglicherweise Ihr Konfigurationsverzeichnis zu einem Python-Paket machen, indem Sie eine leere __init__.py -Datei einwerfen.

    
Walter Mundt 18.06.2010 16:30
quelle

Tags und Links