Внутри я вижу код импорта кода Python с помощью import sys
или import mymodule
Как интерпретатор находит правильный файл, если не указан каталог или путь?
Внутри я вижу код импорта кода Python с помощью import sys
или import mymodule
Как интерпретатор находит правильный файл, если не указан каталог или путь?
http://docs.python.org/3/tutorial/modules.html#the-module-search-path
6.1.2. Путь поиска модуля
Когда импортируется модуль
spam
, интерпретатор сначала ищет встроенный модуль с этим именем. Если он не найден, он ищет файл с именемspam.py
в списке каталогов, заданных переменнойsys.path
.sys.path
инициализируется из следующих мест:
- Каталог, содержащий входной скрипт (или текущий каталог, когда не указан файл).
PYTHONPATH
(список имен каталогов с тем же синтаксисом, что и переменная оболочкиPATH
).- Значение по умолчанию, зависящее от установки.
Примечание. В файловых системах, которые поддерживают символические ссылки, каталог, содержащий входной скрипт, вычисляется после использования символьной ссылки. Другими словами, каталог, содержащий символическую ссылку, не добавляется в путь поиска модуля.
После инициализации программы Python могут изменять
sys.path
. Каталог, содержащий выполняемый скрипт, помещается в начало пути поиска, опережая стандартный путь к библиотеке. Это означает, что скрипты в этом каталоге будут загружены вместо модулей с тем же именем в каталоге библиотеки. Это ошибка, если не требуется замена. Дополнительную информацию см. В разделе "Стандартные модули".
Информацию о "стандартном по умолчанию" см. В документации на модуле site
.
Кроме того, вы можете видеть, что текущий путь с помощью модуля sys
import sys
print(sys.path)
Он использует PYTHONPATH, заданный как переменную среды, для поиска пакетов (папок с файлами __init__.py
) и модулей (или, если он уже загружен один раз, извлекает объект модуля из sys.modules
).
У Python есть переменная пути, точно такая же, как у вашего терминала. Python ищет модули в папках внутри этого пути или в папке, в которой находится ваша программа.