RuntimeWarning: Parent module ... not found

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
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Hallo,

ich habe hier ein Stück Code, welches mit dem imp-Modul ein externes Modul einbindet (die __init__.py-Datei davon).

Die Ordnerstruktur sieht so aus:

Code: Alles auswählen

meinmodul.py
ordner
	__init__.py (wird aus meinmodul.py importiert)
Ich bekomme jetzt dauernd einen nervenden

Code: Alles auswählen

ordner/__init__.py:1: RuntimeWarning: Parent module 'ordner/__init__' not found while handling absolute import
    (ein import-Statement in __init__.py)
Ich habe es schon versucht, "ordner" dem sys.path und den Ordner, der "meinmodul.py" und "ordner" enthält dem sys.path hinzuzufügen (auch beides auf einmal), das hat aber nichts geholfen.

Was mache ich falsch?
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Mit dem imp-Modul? Wie genau sieht das aus?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Code: Alles auswählen

try:
    fobj, path, description = imp.find_module('__init__',
        [ABSOLUTER_PFAD_ZU_ordner])
except ImportError:
    return
else:
        return imp.load_module(path, fobj, path, description)
        fobj.close()
So :-)
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

Willst du wirklich nur das modul __init__ importieren?
So ein Modul gehört doch zu einem Package, evtl. willst du das package finden/importieren?
(d.h. den Ordner, in dem die __init__.py liegt suchen und importieren, was auch funktioniert, mit 2.6 auf Ubuntu getestet)

scnr, Jörg
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Hm, nachdem ich nicht mehr explizit die __init__-Datei importiere, sondern das Package, funktionierts ohne Warning. Trotzdem löst das das Originalproblem nicht, es umgeht es bloß - aber danke für den Tipp!
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Welches Originalproblem? Du importierst einfach falsch. Zum Einen importiert man nicht die __init__ direkt. Zum Anderen ist das erste Argument von `imp.load_module()` der Modul-Name. Deine geladene __init__ ist also das Modul "py" vom Package "ordner/__init__" und bei irgendeinem Import sucht er jetzt eben das Elternpaket ("ordner/__init__"), das es ja aber niemals geben kann.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Stimmt. Danke!
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Sorry dass ich den Fred noch mal aufmache, aber ich stehe wieder vor dem gleichen Symptom.

Konkret geht es um diese Funktion. Die Ordnerstruktur sieht jetzt wie folgt aus:

Code: Alles auswählen

meinmodul.py
config.py
`base_path` o.g. Funktion ist der absolute Pfad zu dem Ordner, der `meinmodul.py` ("/pfad/zu/meinem/modul/") enthält.

Die Warnung ist diese:

Code: Alles auswählen

RuntimeWarning: Parent module '/pfad/zu/meinem/modul/config' not found while handling absolute import [irgendein import-statement]
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

`imp.load_module()` nimmt immer noch den Modulnamen als erstes Argument entgegen und nicht den Pfad.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

:oops: Peinlich. Ist wohl irgendwie von der Versionsverwaltung bzw. Kollaboration verschluckt worden. Danke!
Antworten