Seite 1 von 1

dynamisches laden von modulen mit __import__

Verfasst: Donnerstag 7. April 2011, 16:41
von hypnoticum
Hallo,
ich versuche aus dem Package "Dev" ein Script mit __import__ dynamisch zu laden.

Code: Alles auswählen

def fun(self, Block):
        Name = "Dev." + Block + ".Param"
        Modul = __import__(Name)
        #import Dev.BlockName.Param as Modul

        print getattr(Modul, 'default')

fun(BlockName)
Es kommt dann die Fehlermeldung: "AttributeError: 'module' object has no attribute 'default' "
wenn ich den dynamischen Import durch die auskommentierte Zeile ersetze klappt es aber.
die Datei "Param.py" hat den Inhalt:

Code: Alles auswählen

default = ['Value 1\n', 'Value 2\n']

Re: dynamisches laden von modulen mit __import__

Verfasst: Donnerstag 7. April 2011, 16:57
von ms4py
Du machst mit deinem Funktionsaufruf `import Dev.Block.Param`, also musst du auch auf `Dev.Block.Param.default` zugreifen... Hier ist auch ein Beispiel wie du das mit `as` alternativ lösen kannst:
http://docs.python.org/library/functions.html#__import__

Ach ja, schau dir mal PEP-8 an, Module und Pakete sollte man nicht mit Großbuchstaben bezeichnen.

Re: dynamisches laden von modulen mit __import__

Verfasst: Donnerstag 7. April 2011, 20:34
von hypnoticum
@ms4py:
Danke für die schnelle Antwort und den Tip, nur leider verstehe ich nicht was du meinst ...
kannst du das bitte in Quelltext umsetzen? Sind ja nur ein paar Zeilen

Re: dynamisches laden von modulen mit __import__

Verfasst: Donnerstag 7. April 2011, 20:50
von deets
Der Quelltext steht in der verlinkten Seite. Muss man ja nur ein bisschen lesen.

Re: dynamisches laden von modulen mit __import__

Verfasst: Freitag 8. April 2011, 07:36
von hypnoticum
So gehts:

Code: Alles auswählen

def fun(self, Block):
        Name = "Dev." + Block + ".Param"
        Modul = __import__(Name,  globals(), locals(), ['default'])

        print getattr(Modul, 'default')

fun(BlockName)