it-swarm.com.de

Python relative-import script zwei Ebenen höher

Ich habe in der letzten Stunde mit Importen in meinem Paket zu kämpfen.

Ich habe eine Verzeichnisstruktur wie folgt:

main_package
 |
 | __init__.py
 | folder_1
 |  | __init__.py
 |  | folder_2
 |  |  | __init__.py
 |  |  | script_a.py
 |  |  | script_b.py
 |
 | folder_3
 |  | __init__.py
 |  | script_c.py

Ich möchte sowohl auf Code in script_b.py Als auch auf Code aus script_c.py In script_a.py Zugreifen. Wie kann ich das machen?

Wenn ich beim Ausführen ein einfaches import script_b In script_a.py Schreibe

from main_package.folder_1.folder_2 import script_b

Ich bin mit einem getroffen

ImportError: no module named "script_b"

Für den Zugriff auf script_c.py Habe ich keine Ahnung. Ich konnte keine Informationen über den Zugriff auf Dateien finden, die zwei Ebenen höher sind, aber ich weiß, dass ich Dateien importieren kann, die eine Ebene höher sind

from .. import some_module

Wie kann ich über script_a.py Auf beide Dateien zugreifen?

29
Luke Taylor

Um von script_a aus auf script_c und script_b zuzugreifen, verwenden Sie:

from ...folder_3 import script_c
from . import script_b

Oder wenn Sie python3 verwenden, können Sie script_b aus script_a importieren, indem Sie einfach Folgendes verwenden:

import script_b

Sie sollten jedoch wahrscheinlich absolute Importe verwenden:

from mypackage.folder_3 import script_c
from mypackage.folder1.folder2 import script_b

Siehe auch: Absolute vs Relative Importe

30
tobspr