Ich habe im selben Verzeichnis zwei Module erstellt:Warum einfacher Import von Modul in demselben Verzeichnis ist nicht erlaubt
.
├── mod1.py
├── mod2.py
Es gibt keine __init__.py
ist, ich will nicht, dies als ein Paket erstellen, I Ich erstelle nur ein einfaches Skript, das ich modularisiert habe, indem ich in verschiedene Module einbringe.
Meine Absicht ist mod1.py
mit python mod1.py
~/junk/imports$ cat mod1.py
from . import mod2
print(mod2.some_expr)
$ cat mod2.py
some_expr = 'hello world!'
läuft Obwohl ich weiß, dass import mod1
direkt mit arbeiten, aber ich bin absichtlich nicht in Gebrauch ist, so dass mein Modulname mit in Modulen nicht kollidieren (was ich fühlte mich ist eine gute Praxis)
ich erhalte die folgenden Fehler mit python2
und python3
~/junk/imports$ python3 --version
Python 3.4.3
[email protected]:~/junk/imports$ python3 mod1.py
Traceback (most recent call last):
File "mod1.py", line 1, in <module>
from . import mod2
SystemError: Parent module '' not loaded, cannot perform relative import
~/junk/imports$ python2 --version
Python 2.7.11
~/junk/imports$ python2 mod1.py
Traceback (most recent call last):
File "mod1.py", line 1, in <module>
from . import mod2
ValueError: Attempted relative import in non-package
Die meisten Fragen auf StackOverflow behandeln Pakete, aber ich verwende keine Pakete. Ich möchte es nur als einfaches Skript ausführen.
Meine Frage ist nicht darüber, wie es geht, aber ich möchte wissen, warum der oben genannte nicht funktioniert.
Warum verwenden Sie keine __init__.py-Datei? Wäre das nicht, wenn Python das überprüft? Verzeichnis, es realisiert theres keine init-Datei und wird eine Ausnahme werfen? d. h. Versuch eines relativen Imports in Nicht-Paket – AK47
Ich benutze nicht '__init __. py', weil ich kein Paket erstellen möchte. Ich erstelle nur einfache Skripte. Ich möchte verstehen, warum keine "expliziten" relativen Importe erlaubt sind. –