Примечание: в примерах ниже предполагается, что у вас уже есть файл с содержимым и именем, описанным в начале раздела "Определение модуля и его импорт"
Когда интерпретатор выполняет инструкцию import md
, то начинается поиск файла md.py
в списке каталогов, собранных из следующих источников:
PYTHONPATH
, если она задана. Формат PYTHONPATH
зависит от операционной системы и чаще всего имитирует переменную среды PATH
.Результирующий путь поиска доступен в переменной 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 и наверняка будет выглядеть немного иначе на вашем компьютере.
Чтобы быть уверенным, что модуль будет найден, нужно сделать одно из следующих действий:
md.py
в директорию, в которой находится запускаемый скрипт или расположить в текущей директории, из которой запущен интерпретатор.PYTHONPATH
, чтобы она содержала каталог, где находится файл mod.py
md.py
в один из каталогов, уже содержащихся в переменной PYTHONPATH
.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
.