Import eines eigenen Moduls scheitert
Verfasst: Mittwoch 8. August 2012, 15:00
Moin,
ich habe diese Verzeichnisstruktur:
Mein Problem: In der svg.py soll eine Klasse aus der base.py importiert werden:
Leider scheint Python base nicht zu finden (ImportError). Alle anderen Imports funktionieren aber. Das ändert sich auch nicht, wenn ich base in der __all__-Liste von __init__.py notiere (was ich eigentlich nicht machen möchte, damit base nicht bei einemimportiert wird).
Wo ist das Problem?
EDIT: Wenn svg.py direkt ausgeführt wird (und nicht in core.py importiert), dann funktioniert es. Liegt es vielleicht daran, dass ich in core.py importlib.import_module() benutze? Ich dachte immer, diese beiden Zeilen bewirkten das Gleiche, aber offensichtlich ist es nicht so:
Offenbar hat das mit import_module() importierte Modul einen anderen Geltungsbereich.
EDIT²:
funktioniert auch. Aber damit kann man ja nur Komponenten des Moduls importieren, nicht das Modul selbst:
EDIT³: Ich glaube, Python hasst mich:
ich habe diese Verzeichnisstruktur:
Code: Alles auswählen
src
|-- __init__.py
|-- core.py
|-- output
|-- __init__.py
|-- base.py
|-- svg.py
Code: Alles auswählen
from base import DrawBase
Code: Alles auswählen
from output import *
Wo ist das Problem?
EDIT: Wenn svg.py direkt ausgeführt wird (und nicht in core.py importiert), dann funktioniert es. Liegt es vielleicht daran, dass ich in core.py importlib.import_module() benutze? Ich dachte immer, diese beiden Zeilen bewirkten das Gleiche, aber offensichtlich ist es nicht so:
Code: Alles auswählen
import mod as name
name = importlib.import_module('mod')
EDIT²:
Code: Alles auswählen
from .base import DrawBase
Code: Alles auswählen
import .base # SyntaxError
Code: Alles auswählen
# __init.py__
# ohne Docstrings, daher weichen Zeilenangaben in den Fehlermeldungen ab
__all__ = ['core', 'output']
from core import Graphic
# bpython3
# src ist das Programmverzeichnis
>>> import src
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "src/__init__.py", line 14, in <module>
from core import Graphic
ImportError: No module named core
>>>