Seite 1 von 1

Was ist der sys.path_importer_cache?

Verfasst: Mittwoch 23. Mai 2007, 10:31
von Zap
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.