Experimente mit imp.load_module und packages
Verfasst: Sonntag 12. Oktober 2008, 22:29
Hallo!
Es geht um eine Art Plugin-System, wobei jedes Plugin aus einer Handvoll Dateien besteht, die der Einfachheit halber jeweils als Package organisiert sind. Es ergibt sich folgende Struktur:
__init__.py(1) und so weiter heißen natürlich alle '__init__.py', ich habe sie jetzt nur mal zwecks Deutlichkeit markiert.
In __init__.py(1) möchte ich jetzt automatisch alle Unterpakete importieren lassen. Dazu existiert folgender Code:
Die Pakete werden anstandslos importiert und finden sich in sys.modules wieder. Nur im Namespace des Paketes 'plugins' findet sich nichts. Wenn ich ein 'import paketXY' durchführe bindet er einen entsprechenden Namen. Warum funktioniert das bei meiner Lösung nicht? Kann mir da vielleicht jemand mal einen erhellenden Hinweis geben?
Vielen Dank im Voraus
Es geht um eine Art Plugin-System, wobei jedes Plugin aus einer Handvoll Dateien besteht, die der Einfachheit halber jeweils als Package organisiert sind. Es ergibt sich folgende Struktur:
Code: Alles auswählen
plugins
- __init__.py(1)
- plugindir1
- __init__.py(2a)
- irgendwelche Python-Dateien
- plugindir2
- __init__.py(2b)
- irgendwelche Python-Dateien
In __init__.py(1) möchte ich jetzt automatisch alle Unterpakete importieren lassen. Dazu existiert folgender Code:
Code: Alles auswählen
import os
import imp
def register_plugins():
# Pfad aus __file__ extrahieren
path = os.path.abspath(os.path.split(__file__)[0])
for name in os.listdir(path):
# Wenn es ein Verzeichnis ist, prüfen ob es ein Package ist
# und dieses ggf. laden
if os.path.isdir(os.path.join(path, name)):
try:
f, fname, desc = imp.find_module(name, [path])
except ImportError:
continue
module = imp.load_module(name, f, fname, desc)
register_plugins()
Vielen Dank im Voraus