Ich habe Probleme zu verstehen, wie verschachtelte Importe in einem Python-Projekt funktionieren. Zum Beispiel:Verschachtelte `ImportError` auf Py3 aber nicht auf Py2
test.py
package/
__init__.py
package.py
subpackage/
__init__.py
test.py
:
import package
package/__init__.py
:
from .package import functionA
package/package.py
:
import subpackage
def functionA():
pass
In Python 3.5, wenn ichlaufenIch erhalte die folgenden Fehler, aber keinen Fehler in Python 2.7:
C:\Users\Patrick\Anaconda3\python.exe C:/Users/Patrick/Desktop/importtest/test.py
Traceback (most recent call last):
File "C:/Users/Patrick/Desktop/importtest/test.py", line 1, in <module>
import package
File "C:\Users\Patrick\Desktop\importtest\package\__init__.py", line 1, in <module>
from .package import functionA
File "C:\Users\Patrick\Desktop\importtest\package\package.py", line 1, in <module>
import subpackage
ImportError: No module named 'subpackage'
Allerdings, wenn ich package.py
mit Python 3.5 laufen. Ich bekomme überhaupt keinen Fehler.
Dies scheint mir fremd wie wenn package.py
auf seine eigene Linie der import subpackage
Arbeiten ausgeführt wird, aber mit ihm ‚run‘ wird (weiß nicht, ob dies die richtige Terminologie hier ist) durch die verschachtelten Import, die gleiche Linie kann subpackage
nicht finden.
Warum gibt es in diesem Fall Unterschiede zwischen Python 2.7 und 3.5 und wie kann dies auf eine Weise gelöst werden, die sowohl für 2.7.x als auch für 3.x funktioniert?
denke ich, dies auf die Tatsache zurückzuführen sein könnte, dass import subpackage
in der verschachtelten Import zählt als ein impliziter relativer Import in dem verschachtelten Import aber nicht, wenn package.py
direkt ausgeführt wird, aber wenn ich import .subpackage
stattdessen tun, bekomme ich diesen Fehler auf beide 2.7 und 3.5:
C:\Users\Patrick\Anaconda3\python.exe C:/Users/Patrick/Desktop/importtest/test.py
Traceback (most recent call last):
File "C:/Users/Patrick/Desktop/importtest/test.py", line 1, in <module>
import package
File "C:\Users\Patrick\Desktop\importtest\package\__init__.py", line 1, in <module>
from .package import functionA
File "C:\Users\Patrick\Desktop\importtest\package\package.py", line 1
import .subpackage
^
SyntaxError: invalid syntax
Sie sollten nicht versuchen, 'package.py' alleine auszuführen. – martineau
Danke. Der Punkt war nur zu versuchen zu verstehen, warum "Unterpaket" auf die eine Art und nicht auf die andere Seite importiert werden konnte. Natürlich gibt es keinen Grund, 'package.py' zu starten. – pbreach
In diesem Fall siehe [_Relative Importe zum milliardsten Mal_] (http://stackoverflow.com/questions/14132789/relative-imports-for-the-billionth-time) – martineau