Was ist der sys.path_importer_cache?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Hallo zusammen weiß einer von euch zufällig über das dictionary sys.path_importer_cache bescheid? Oder kennt einer eine gute Doku dazu?

Ich habe folgendes Problem:
Ich habe den CPython-Interptreter 2.5 auf ein Embedded-System portiert und greife mit diesem auf ein Flashfilesystem zu.
Nun bin ich dabei ausgewählte standard module in einen Lib Ordner auf dem Flash-Filesystem abzulegen.

Um diese Module nun importieren zu können, habe ich nach der Initalisierung des Interpreters sys.path die entsprechenden Include-ordner zugwiesen:

Code: Alles auswählen

  // our working direcory is Disk1
  PyRun_SimpleString("import posix");
  PyRun_SimpleString("posix.chdir('/Disk1')");
  // for import we define our sys-path
  PyRun_SimpleString("import sys");
  PyRun_SimpleString("sys.path = ['','/Disk1/Lib']");
Anschließend start ich die Interactive Python-Shell und
wenn ich nun versuche ein Modul aus dem Lib ordner zu importieren
schlägt dies fehl, da nur im CurrentWorkDir gesucht wird.

Ein Blick in das Dictionary sys.path_importer_cache zeigt mir folgendes:

Code: Alles auswählen

>>> sys.path_importer_cache
{'': None, '/Disk1/Lib': <imp.NullImporter object at 0x010FFEA0>}
>>>
Weise ich dem Key "/Disk1/Lib" den Wert None zu, funktioniert das Importieren.
Weiß zufällig einer von euch was bei der Initialisierung der Python-Shell passiert,
dass diesem Cache-Key ein solcher Nullimporter Objekt zugewiesen wird?

Edit: Nach weiteren Tests hab ich herausgefunden das es nicht an der Initialisierung der Python Shell liegt sondern an den eigentlichen import aufrufen. Wenn ich einen weiteren path in der shell hinzufüge wird diese nach dem ersten importversuch genauso mit dem Nullimporter in den importer_cache eingetragen.
Antworten