Problem mit simplen import script

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Hallo alle zusammen.

Ich schreibe gerade an einem kleinen importscript, das mir ein paar Plugins importiert.

Aussehen tut es zur Zeit so:

Code: Alles auswählen

        root = self.ctx.cfg.get('root_path', '')
        views_path = os.path.abspath(join(root, 'shoxms', 'views'))
        sys.path.append(views_path)

        for view in os.listdir(views_path):
            if not view.endswith('~'):
                if view in sys.modules:
                    continue
                view = view.split('.')[0]
                fp, pathname, description = imp.find_module(view)
                self.mods[view] = imp.load_module(view, fp, pathname, description)
Nun gibt es ein Modul `default`, welches importiert wird, jedoch keine Klassen darin.

Das Ziel ist es, alle Klassen im Modul `default`, die von einer bestimmten Klasse `View` erben aufzuzeichnen.
Die Metaklassen und alles drum und dran existiert und funktioniert.

Aber wie mache ich es nun, das `imp` alles aus dem Modul `default` importiert, damit die Metaklasse `ViewMeta` die von `View` erbenden Klassen aufzeichnen kann?


Ich hoffe ich habe es halbwegs verständlich ausgedrückt ;)

MfG EnTeQuAk

€dit:

Vielleicht auch ganz interessant, was in `self.mods` später drinne steht:

Code: Alles auswählen

{'default': <module 'default' from '/home/ente/development/webshox-svn/shoxms/trunk/shoxms/views/default.pyc'>,
 '': <module '' from '/home/ente/development/webshox-svn/shoxms/trunk/shoxms/views/__init__.pyc'>,
 '__init__': <module '__init__' from '/home/ente/development/webshox-svn/shoxms/trunk/shoxms/views/__init__.pyc'>}
Warum wird `shoxms.views.__init__` zweimal importiert?
BlackJack

Nur so geraten: Aber wahrscheinlich hast Du einmal das Paket importiert und damit implizit `__init__.py` und einmal explizit das Modul `__init__.py`.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Gut, ich habe das Problem anders gelößt.

Nun habe ich eine Zentrale Konfigurationsdatei, wo alle Pluginklassen aufgelistet werden und nun wird einfach jedes Modul nach diesen durchkämmt.

Ist zwar nicht so wunderschön, funktioniert aber :)

Für weitere Ideen bin ich aber gerne offen!


MfG EnTeQuAk

€dit:

Mensch, da war BlackJack schneller :)
Nur so geraten: Aber wahrscheinlich hast Du einmal das Paket importiert und damit implizit `__init__.py` und einmal explizit das Modul `__init__.py`.
Jepp, das stimmt. Hab vergessen es herauszufiltern.
Antworten