Ответ 1
Поскольку python проверяет каталоги в последовательном порядке, начиная с первого каталога в списке sys.path
, пока не найдет файл .py
, который он искал.
В идеале текущий каталог или каталог script является первым, всегда первым элементом в списке, если вы не измените его, как вы это делали. Из документация -
Как инициализировано при запуске программы, первым элементом этого списка является путь [0], это каталог, содержащий script, который использовался для вызова интерпретатора Python. Если каталог script недоступен (например, если интерпретатор вызывается интерактивно или если script считывается со стандартного ввода), путь [0] - это пустая строка, которая направляет Python на поиск модулей в текущем каталоге сначала, Обратите внимание, что каталог script вставлен перед вставками в результате PYTHONPATH.
Итак, скорее всего, у вас был файл .py
с тем же именем, что и модуль, из которого вы пытались импортировать, в текущем каталоге (где выполнялся script).
Кроме того, примечание о ImportError
, можно сказать, что ошибка импорта говорит -
ImportError: No module named main
- это не значит, что main.py
перезаписано, нет, если это было перезаписано, у нас не возникнут проблемы с его чтением. Его некоторый модуль выше этого, который был перезаписан с помощью. py
или другого файла.
Пример -
Моя структура каталогов выглядит как
- test
- shared
- __init__.py
- phtest.py
- testmain.py
Теперь из testmain.py
я вызываю from shared import phtest
, он отлично работает.
Теперь скажем, что я представляю shared.py в каталоге test
, например -
- test
- shared
- __init__.py
- phtest.py
- testmain.py
- shared.py
Теперь, когда я пытаюсь выполнить from shared import phtest
из testmain.py
, я получу ошибку -
ImportError: cannot import name 'phtest'
Как вы можете видеть выше, файл, вызывающий проблему, составляет shared.py
, а не phtest.py
.