Как python находит файл модуля, если инструкция import содержит только имя файла?

везде, где я вижу код Python, импортирующий модули с помощью import sys или import mymodule

как интерпретатор находит правильный файл, если не указан каталог или путь?

4 ответов


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. Каталог, содержащий запускаемый скрипт, помещается в начале пути поиска, перед стандартным путем библиотеки. Это означает, что скрипты в этом каталоге будут загружаться вместо одноименных модулей в каталоге библиотеки. Это ошибка, если замена не предназначена. Дополнительные сведения см. В разделе стандартные модули.

для сведения об "установке по умолчанию" см. В документации по the site модуль.


кроме того, вы можете увидеть, что текущий путь с помощью sys модуль

import sys
print(sys.path)

использует PYTHONPATH, установить в качестве переменной среды, чтобы найти пакеты (папки, содержащие __init__.py файлы) и модули (или, если они уже загружены один раз, извлекает объект модуля из sys.modules).


Python имеет переменную пути, такую же, как у вас внутри вашего терминала. Питон ищет модули в папках внутри этого пути, или в папке, где программа находится.