The documentation stwierdza, że
Gdy moduł o nazwie spam
jest importowany, interpreter Pierwsze wyszukiwania dla wbudowanego modułu o tej nazwie. Jeśli nie zostanie znaleziony, wyszukuje dla pliku o nazwie spam.py
na liście katalogów podanych przez zmienną zmienną zmienną.
(Kopalnia nacisk)
time
nie był wbudowany moduł modułu w Pythonie 3.4, ale to się zmieniło w Pythonie 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
można zobaczyć próbkę, która wprowadzana zmień here (powiązane z issue 5309). Biorąc pod uwagę, że dziennik zmian mentions the issue 5309, ale nic nie mówi ponownie. Moduł time
, można bezpiecznie powiedzieć, że zmiana była efektem ubocznym i jest szczegółem implementacji CPython.
Od time
nie jest wbudowany moduł w CPython 3.4, a pierwszy katalog w sys.path
jest obecny katalog skrypt from time import time
próby importowania atrybut time
z pliku time.py
, ale nie powiedzie się i rzuca ImportError
.
W CPython 3.5 time
jest wbudowany moduł. Zgodnie z powyższym cytatem, uruchomienie from time import time
pomyślnie importuje wbudowany moduł, bez wyszukiwania modułów na sys.path
.
Obie wersje CPython podniesie ten sam błąd, jeśli cienia nie wbudowanego modułu z biblioteki standardowej, jak inspect
:
[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'
Jakie jest wyjście 'python -c„import sys; print (sys.path) "dla obu tłumaczy? –
W obu przypadkach pierwsza ścieżka jest pustym ciągiem. Niemożliwe do wklejenia, za dużo znaków. –