python '__import__' wie 'import'?
-
hallo! ich versuche gerade herauszufinden, wie ich in python
__import__(modul)so aufrufe, dass das ergebnis dem gleichen enspricht, was ich mitimport modulerhalten würde.beispiel:
>>> __import__("textwrap") <module 'textwrap' from 'D:\Python25\lib\textwrap.pyc'> >>> textwrap.wrap("niemand erwartet die spanische inquisition", 11) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'textwrap' is not defined >>>vs.
>>> import textwrap >>> textwrap.wrap("niemand erwartet die spanische inquisition", 11) ['niemand', 'erwartet', 'die', 'spanische', 'inquisition'] >>>ich nehme an, dass
importdas modul in den globalen namensraum einblendet,__import__das aber nicht tut.
ich habe mir die dokumentation von __import__ angeschaut, fand dort aber nichts, was mir weiterhilft.hintergrund ist, dass ich einen plugin-mechanismus implementieren möchte, der automatisch alle vorhandenen module aus einem verzeichnis lädt.
-
__import__gibt ein Modul-Objekt zurück. Folgendes sollte funktionieren:>>> textwrap = __import__("textwrap") >>> textwrap.wrap("hallo welt ich bin ein string", 5) ['hallo', 'welt', 'ich', 'bin', 'ein s', 'tring']
-
Xantus schrieb:
__import__gibt ein Modul-Objekt zurück. Folgendes sollte funktionieren:>>> textwrap = __import__("textwrap") >>> textwrap.wrap("hallo welt ich bin ein string", 5) ['hallo', 'welt', 'ich', 'bin', 'ein s', 'tring']schon, aber wenn ich schon vorher weiß wie das modul heißt, dann kann ich auch gleich
importnehmen.
das modul weiß doch selbst wie es heißt und unter diesem namen soll es dann auch global ansprechbar sein.
-
ich erklärs mal genauer. ich scanne ein verzeichnis nach unterverzeichnissen ab und versuche jedes unterverzeichnis als modul zu importieren. ganz grob gesagt so:
for dir in os.listdir("/mein/programm/plugins"): ... module = __import__(dir, globals(), locals(), []) ...das funktioniert auch, ich kann über
module.MeinPlugindas plugin ansprechen. ich möchte es aber lieber global alsdir.MeinPluginansprechen, was ja auch sein "natürlicher" name ist.kann ich die rückgabe von __import__ zu einer globalen variable mit einem bestimmten namen machen? wie?