TLDR; пакет имеет приоритет над модулем с тем же именем, если он находится в одном каталоге.
Из документов:
"Когда импортируется модуль с именем spam
, интерпретатор ищет файл с именем spam.py
в текущем каталоге, а затем в списке каталогов, заданных переменной среды PYTHONPATH
. Он имеет такой же синтаксис в качестве переменной оболочки PATH, то есть списка имен каталогов. "
Это немного вводит в заблуждение, потому что интерпретатор также будет искать пакет с именем spam
(каталог с именем spam
, содержащий файл __init__.py
). Поскольку записи каталога сортируются перед поиском, пакеты имеют приоритет над модулями с одинаковыми именами, если они находятся в одном каталоге, поскольку spam
предшествует spam.py
.
Обратите внимание, что "текущий каталог" относится к основному пути сценария (тот, где __name__ == '__main__' is True
). Так что, если вы набираете /home/billg
и звоните /foo/bar.py
, «текущий каталог» относится к /foo
.