Da "import file" nicht einfach geht, muss ich eval einsetzen glaube ich.
Das da unten funktioniert aber nicht - warum ?
Code: Alles auswählen
for filebase in os.listdir("."):
eval ("import " + x)
Code: Alles auswählen
for filebase in os.listdir("."):
eval ("import " + x)
Code: Alles auswählen
exec ("import %s" %filebase)
Code: Alles auswählen
modul = __import__(filebase,globals(),locals(),[])
modul.funktionA(x,y,z)
auf der Seite http://aspn.activestate.com/ASPN/Cookbo ... ipe/223972After a quick check (in sys.modules) to see if the module has already been loaded, we use the built-in function __import__() to load the module we desire. You may notice something odd about the call to __import__(): why is the last parameter a list whose only member is an empty string? This hack stems from a quirk about __import__(): if the last parameter is empty, loading class "A.B.C.D" actually only loads "A". If the last parameter is defined, regardless of what its value is, we end up loading "A.B.C". Once we have "A.B.C", we use getattr() to reference the function (or class) within the module.
When the name argument contains a dot (when it specifies a submodule of a package), the fromlist argument is set to the list ['*'] so that the return value is the named module rather than the top-level package containing it as would otherwise be the case.
Code: Alles auswählen
mod.__getattribute__(filebase)
Code: Alles auswählen
mod.__getattribute__(filebase)()
Interpreter laden und ``help(__import__)`` für eine Kurzfassung, ansonsten in der Doku bei den eingebauten Funktionen.Mad-Marty hat geschrieben:Finde leider keine Referenz dazu.
Nr. 4 ist dazu da um gezielt ein Objekt aus der Datei zu holen. s.a. http://www.python-forum.de/viewtopic.php?t=3558Mad-Marty hat geschrieben:__import__(filebase,globals(),locals(),[])
1. = package
2 = globaler namespace den das modul kennt ?
3 = lokaler namespace ?
4 = ??
Code: Alles auswählen
sys = __import__('pocoo')
Code: Alles auswählen
auth = __import__('pocoo.components.core.auth').components.core.auth
Code: Alles auswählen
auth = __import__('pocoo.components.core.auth', locals(), globals(), [''])
Code: Alles auswählen
auth = __import__('pocoo.components.core.auth', locals(), globals(), ['']).User
Und was ist wenn "components.core.auth" bzw. "User" nur als String vorliegen? Dann braucht man den letzten Platzhalter "fromlist"! Ansonsten kann man auch das Module normal importierenblackbird hat geschrieben:Code: Alles auswählen
auth = __import__('pocoo.components.core.auth').components.core.auth
Code: Alles auswählen
auth = __import__('pocoo.components.core.auth', locals(), globals(), ['']).User
Code: Alles auswählen
for file in files:
__import__(file,globals(),locals(),[])
Code: Alles auswählen
>>> dummystr = "dummy"
>>> sys.modules[dummystr] = __import__(dummystr,globals(),locals(),[])
>>> o = dummy.class1()
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
NameError: name 'dummy' is not defined
>>> import dummy
>>> o = dummy.class1()
Code: Alles auswählen
>>> import sys
>>> sys.path.append("c:\\")
>>> dummystr = "dummy"
>>> sys.modules[dummystr] = __import__(dummystr,globals(),locals(), [])
>>> o = getattr(sys.modules.get(dummystr), dummystr)()
>>> o.getname()
'dummy'
>>> o.instanciate_class1()
class1
>>>