[Python-de] Import problem im Eigendem Module Paket
Stefan Schwarzer
sschwarzer at sschwarzer.net
Fr Okt 5 14:49:31 EDT 2018
On 05/10/2018 19.04, Manfred Gil wrote:
> ich Arbeite gerade mit einem selbsterstellten Module.
>
> Mein Problem ist das ich kein Module aus einem Übergeordnetem
> Ordner importieren kann.
>
> Ich bekomme stets die Fehlermeldung:
>
> File "import_test.py", line 4, in <module>
> from ..config import daten as da
> SystemError: Parent module '' not loaded, cannot perform relative import
Ich verstehe das so, dass du erst `my_paket` (der
Parent von `config`) `import`ieren musst.
> Ich hab gelesen das man die __init__.py eigendlich leer lassen sollte,
> jedoch schreiben andere das mit einem
> __all__ = ['auflistung der Ordner']
> es gehen sollte, was bei mir noch nicht der fall ist.
Die Definition von `__all__` bestimmt nur, was bei
einem `from module import *` in den Namensraum des
importierenden Moduls importiert werden soll.
> Andere schreiben wiederrum, das in dieser __init__.py
> man div. Importe machen sollte damit der import in der Modulen klappt.
Kommt drauf an, was man unter "klappen" versteht. ;-)
Nimm an, du hast folgende Paket-Struktur:
a
b
c
sowie dein Modul `my_module`.
Wenn in `a/__init__.py` keine Imports stehen, musst du in
`my_module`
import a.b
schreiben, wenn du auf Attribute in `a.b` zugreifen willst.
Wenn in `a/__init__.py` der Import
import a.b
steht, reicht in Modul `my_module` schon der Import
import a
um auf `a.b` und seine Attribute zugreifen zu können, weil
`a.b` bereits mit dem Import von `a` importiert wurde. Das
passiert nicht implizit ohne `import`-Anweisungen.
Ich würde allerdings eher explizite Imports in `my_module`
verlangen, das erscheint mir sauberer. Also nicht in
`a/__init__.py` Imports irgendwelcher "Unter-Module"
vornehmen, sondern den Nutzer deiner Bibliothek alle
nötigen Module explizit importieren lassen.
Ich hoffe, ich konnte etwas helfen.
Viele Grüße
Stefan
Mehr Informationen über die Mailingliste python-de