Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.python > #5260

Re: Import problem im Eigendem Module Paket

From Peter Otten <__peter__@web.de>
Newsgroups de.comp.lang.python
Subject Re: Import problem im Eigendem Module Paket
Date 2018-10-05 22:10 +0200
Organization None
Message-ID <pp8gh3$17qh$1@gioia.aioe.org> (permalink)
References <pp85j1$7e1$1@tota-refugium.de>

Show all headers | View raw


Manfred Gil wrote:

> 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 habe schon einiges probiert, sowohl ein oder auch zwei Punkte bei der
> Importzeile
> from .config import daten as da
> from ..config import daten as da
> 
> Mein Paket sieht wie folgt aus:
> ##### < Ordnerstrucktur > ###
> 
> ----my_paket
>     __init__.py #(leer)
>     config.ini
>     ablauf.py
> 
>     config (Ordner)
>         __init__.py #(leer)
>         daten.py
> 
>     daten (Ordner)
>         __init__.py #(leer)
>         import_test.py
> 
> ##### < Ordnerstrucktur > ###
> 
> Inhalt der imoprt_test.py
> 
> <code>
> 
> #!/usr/bin/env python3
> # -*- coding: utf-8 -*-
> 
> from ..config import daten as da
> 
> print(da.down)
> 
> </>
> 
> Inhalt der daten.py
> 
> <code>
> 
> #!/usr/bin/env python3
> # -*- coding: utf-8 -*-
> #
> 
> # Downloadlink
> down = 'https://example.com'
> 
> </>
> 
> 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.
> Andere schreiben wiederrum, das in dieser __init__.py
> man div. Importe machen sollte damit der import in der Modulen klappt.
> 
> Kann hier jemand licht in mein Dunkles Kämmerlein bringen.

Wenn du ein Submodul als Skript aufrufst

$ mkdir -p mein_paket/{config,daten}
$ echo 'print("CONFIG-DATEN")' > mein_paket/config/daten.py
$ echo -e 'from ..config import daten\nprint("DATEN-TEST")' > mein_paket/daten/import_test.py

$ python3 mein_paket/daten/import_test.py 
Traceback (most recent call last):
  File "mein_paket/daten/import_test.py", line 1, in <module>
    from ..config import daten
SystemError: Parent module '' not loaded, cannot perform relative import

dann "weiß" das Skript nicht, dass es Teil eines Packages ist.
Um das zu vermeiden schreibst du ein Wrapper-Skript, das das Module 
importiert (hier simuliert mit dem Interpreter):

$ python3
Python 3.4.3 (default, Nov 28 2017, 16:41:13) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mein_paket.daten.import_test
CONFIG-DATEN
DATEN-TEST
>>> 

Oder du verwendest die Option -m:

$ python3 -m mein_paket.daten.import_test
CONFIG-DATEN
DATEN-TEST

Im letzten Fall funktioniert auch ein Test

if __name__ == "__main__": ...

wie gewohnt.

PS: Wie gesehen kommt man auch komplett ohne __init__.py aus (nennt sich 
"namespace package").

Back to de.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Import problem im Eigendem Module Paket Manfred Gil <manfred-gil@t-online.de> - 2018-10-05 17:04 +0000
  Re: [Python-de] Import problem im Eigendem Module Paket Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2018-10-05 20:49 +0200
  Re: Import problem im Eigendem Module Paket Peter Otten <__peter__@web.de> - 2018-10-05 22:10 +0200
  Re: Import problem im Eigendem Module Paket Hermann Riemann <nospam.ng@hermann-riemann.de> - 2018-10-06 10:19 +0200
  Re: [Python-de] Import problem im Eigendem Module Paket Hartmut Goebel <h.goebel@goebel-consult.de> - 2018-10-07 10:52 +0200
    Re: [Python-de] Import problem im Eigendem Module Paket Manfred Gil <manfred-gil@t-online.de> - 2018-10-07 09:20 +0000

csiph-web