[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