Сообщить об ошибке.

Как Python ищет импортируемый модуль

Поиск импортируемого модуля

Примечание: в примерах ниже предполагается, что у вас уже есть файл с содержимым и именем, описанным в начале раздела "Определение модуля и его импорт"

Когда интерпретатор выполняет инструкцию import md, то начинается поиск файла md.py в списке каталогов, собранных из следующих источников:

  1. Каталог, из которого был запущен скрипт или текущий каталог, если интерпретатор выполняется в интерактивном режиме.
  2. Список каталогов, содержащихся в переменной окружения PYTHONPATH, если она задана. Формат PYTHONPATH зависит от операционной системы и чаще всего имитирует переменную среды PATH.
  3. Список каталогов, настроенных во время установки Python.

Результирующий путь поиска доступен в переменной Python sys.path модуля с именем sys:

>>> import sys
>>> sys.path
['', 
'/home/freeuser/python-3.7.4/docs-python/lib/python3.7', 
'/home/freeuser/python-3.7.4/docs-python/lib/python3.7/lib-dynload', 
'/opt/python-3.7.4/lib/python3.7', 
'/home/freeuser/python-3.7.4/docs-python/lib/python3.7/site-packages']

Примечание: точное содержание sys.path зависит от операционной системы и установки языка Python и наверняка будет выглядеть немного иначе на вашем компьютере.

Чтобы быть уверенным, что модуль будет найден, нужно сделать одно из следующих действий:

  1. Перенести файл md.py в директорию, в которой находится запускаемый скрипт или расположить в текущей директории, из которой запущен интерпретатор.
  2. Перед запуском интерпретатора измените переменную среды PYTHONPATH, чтобы она содержала каталог, где находится файл mod.py
  3. Положите md.py в один из каталогов, уже содержащихся в переменной PYTHONPATH.
  4. Положите md.py в каталог, который был указан при установке интерпретатора Python.

На самом деле есть еще один дополнительный вариант: вы можете поместить файл модуля в любой каталог по вашему выбору, а затем изменить sys.path во время выполнения, чтобы он содержал этот каталог. Допустим, что файл модуля находится в каталоге /home/freeuser/modules/md.py, в этом случае нужно выполнить следующий код для того, что-бы импорт модуля выполнился удачно:

>>> sys.path.append('/home/freeuser/modules')
>>> sys.path
['', 
'/home/freeuser/python-3.7.4/docs-python/lib/python3.7', 
'/home/freeuser/python-3.7.4/docs-python/lib/python3.7/lib-dynload', 
'/opt/python-3.7.4/lib/python3.7', 
'/home/freeuser/python-3.7.4/docs-python/lib/python3.7/site-packages',
'/home/freeuser/modules']
>>> import md

После импорта модуля можно определить его местоположение с помощью атрибута __file__ модуля:

>>> import md
>>> md.__file__
'/home/freeuser/modules/md.py'

>>> import re
>>> re.__file__
'/home/freeuser/python-3.7.4/docs-python/lib/python3.7/re.py'

Часть пути __file__ должна быть одним из каталогов в sys.path.