The documentation besagt, dass
Wenn ein Modul mit dem Namen spam
importiert wird, der Interpreter sucht zuerst für ein eingebautes Modul mit diesem Namen. Wenn nicht gefunden, sucht es dann nach einer Datei mit dem Namen spam.py
in einer Liste der Verzeichnisse, die von Variable sys.path
angegeben werden.
(Hervorhebung von mir)
time
war nicht ein eingebautes Modul Modul in Python 3.4, aber das änderte sich in Python 3.5:
[email protected]:~$ python3.4 -c 'import sys; print("time" in sys.builtin_module_names)'
False
[email protected]:~$ python3.5 -c 'import sys; print("time" in sys.builtin_module_names)'
True
Sie den Patch sehen können, dass die eingeführte Änderung here (bezogen auf issue 5309). Bedenkt, dass das Changelog mentions the issue 5309, aber nichts zu sagen. das time
Modul, ist es sicher zu sagen, dass die Änderung ein Nebeneffekt war und ein Implementierungsdetail von CPython ist.
Da time
ist kein eingebautes Modul in CPython 3.4 und das erste Verzeichnis in sys.path
ist das aktuelle Skript-Verzeichnis, from time import time
Versuche, das time
Attribut aus time.py
-Datei zu importieren, aber fehlschlägt und führt die ImportError
.
In CPython 3.5 time
ist ein eingebautes Modul. Laut dem obigen Zitat importiert from time import time
erfolgreich das integrierte Modul, ohne nach Modulen auf sys.path
zu suchen.
Beiden CPython Versionen werden die gleichen Fehler erhöhen, wenn Sie einen nicht-builtin-Modul aus der Standardbibliothek, wie inspect
Schatten:
[email protected]:~$ cat inspect.py
from inspect import signature
[email protected]:~$ python3.4 -c 'import inspect'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/me/inspect.py", line 1, in <module>
from inspect import signature
ImportError: cannot import name 'signature'
[email protected]:~$ python3.5 -c 'import inspect'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/me/inspect.py", line 1, in <module>
from inspect import signature
ImportError: cannot import name 'signature'
Was die Ausgabe von 'python -c‚import sys ist; print (sys.path) ''für beide Interpreter? –
In beiden Fällen ist der erste Pfad eine leere Zeichenfolge. Es ist unmöglich, zu viele Zeichen einzufügen. –