ImportError: attempted relative import beyond top-level package, jak najlepiej rozwiazac ten problem?

0

Cześć,
Mam taką strukturę plików:

foo/
  __init__.py
  fileA.py
  fileB.py
  submodule/
    __init__.py
    file1.py

file1.py

from ..fileB import fileBfun

fileBfun()

file1_var = "lol"

fileB.py

def fileBfun():
    return "Foo"

fileA.py

from submodule.file1 import file1_var

print(file1_var)

Uruchamiajac fileA.py dostaje: ImportError: attempted relative import beyond top-level package

Z tego co rozumiem to python nie traktuje katalogu z którego uruchomilismy plik .py za moduł, dlatego powstaje ten błąd.

Rozwiązanie na które sam wpadłem (a nie widziałem go na stacku, byś może ze względu na jego radykalność xD) to "Podniesienie" main.py wyżej o jeden folder, tak żeby inne pliki byly w modulach "pod" main.py. W wyżej wymienionym przypadku byłoby to:

main_is_the_boss/
  fileA.py
  foo/
    __init__.py
    fileB.py
    submodule/
      __init__.py
      file1.py

teraz wszystko działa.

Czy da się rozwiązać ten problem bez zmieniania struktury katalogów?

PS.
Czy zamierzają to zmienić żeby katalog z którego uruchamiany jest program był traktowany jak moduł i nie powstawał taki błąd xD?

0

Czy zamierzają to zmienić żeby katalog z którego uruchamiany jest program był traktowany jak moduł i nie powstawał taki błąd xD?

Raczej nie, bo importowanie kodu spoza kontekstu brzmi jak przepis na katastrofę.

Z tego co pamiętam to wystarczy to odpalić jako python -m submodule.file1.

1 użytkowników online, w tym zalogowanych: 0, gości: 1