842 Stimmen

Wie behebt man "Attempted relative import in non-package" auch mit __init__.py

Ich versuche zu folgen PEP 328 mit der folgenden Verzeichnisstruktur:

pkg/
  __init__.py
  components/
    core.py
    __init__.py
  tests/
    core_test.py
    __init__.py

Unter core_test.py Ich habe die folgende Importanweisung

from ..components.core import GameLoopEvents

Bei der Ausführung erhalte ich jedoch die folgende Fehlermeldung:

tests$ python core_test.py 
Traceback (most recent call last):
  File "core_test.py", line 3, in <module>
    from ..components.core import GameLoopEvents
ValueError: Attempted relative import in non-package

Bei meiner Suche fand ich " Relativer Pfad funktioniert auch mit __init__.py nicht " und " Importieren eines Moduls aus einem relativen Pfad ", aber sie haben nicht geholfen.

Gibt es etwas, das ich hier übersehe?

0voto

Dies ist sehr verwirrend und wenn Sie eine IDE wie Pycharm verwenden, ist es noch verwirrender.

Das hat bei mir funktioniert:

  1. Nehmen Sie die Pycharm-Projekteinstellungen vor (wenn Sie Python aus einer VE oder aus dem Python-Verzeichnis ausführen)
  2. An der Art und Weise, wie Sie definiert haben, ist nichts auszusetzen. Manchmal funktioniert es mit:

    from folder1.file1 import class

wenn es nicht funktioniert, verwenden Sie:

import folder1.file1
  1. Ihre Umgebungsvariable sollte im System korrekt angegeben sein, oder geben Sie sie in Ihrem Befehlszeilenargument an.

-2voto

rosefun Punkte 1667

Denn Ihr Code enthält if __name__ == "__main__" das nicht als Paket importiert wird, verwenden Sie besser sys.path.append() um das Problem zu lösen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X