Ваш первый модуль: шаг 11
Пришло время усложнить этот пример - мы предположили, что основной файл Python находится в той же папке/каталоге, что и импортируемый модуль.
Давайте оставим это предположение и проведем следующий мысленный эксперимент:
- мы используем операционную систему Windows ® (это предположение важно, так как от него зависит форма имени файла);
- основной скрипт Python находится в C:\Users\user\py\progs под именем main.py;
- модуль для импорта расположен в C:\Users\user\py\modules.
Как с этим работать?
Чтобы ответить на этот вопрос, нам нужно поговорить о том, как Python ищет модули. Существует специальная переменная (фактически список), в которой хранятся все местоположения (папки/каталоги), в которых выполняется поиск, чтобы найти модуль, запрошенный инструкцией импорта.
Python просматривает эти папки в том порядке, в котором они перечислены в списке - если модуль не может быть найден ни в одном из этих каталогов, импорт завершается неудачей.
В противном случае будет учитываться первая папка, содержащая модуль с нужным именем (если в какой-либо из оставшихся папок содержится модуль с таким именем, она будет проигнорирована).
Переменная называется path
и доступна через модуль с именем sys
. Вот как вы можете проверить его обычное значение:
import sys
for p in sys.path:
print(p)
Мы запустили код внутри папки C:\User\user, и вот, что мы получили:
C:\Users\user
C:\Users\user\AppData\Local\Programs\Python\Python36-32\python36.zip
C:\Users\user\AppData\Local\Programs\Python\Python36-32\DLLs
C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib
C:\Users\user\AppData\Local\Programs\Python\Python36-32
C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages
sample output
Примечание: папка, в которой начинается выполнение, указана в первом элементе path.
Еще раз обратите внимание: в качестве одного из элементов path указан zip-файл - это не ошибка. Python может обрабатывать zip-файлы как обычные папки - это может сэкономить много места для хранения.
Знаете ли Вы, как мы можем решить эту проблему?
Мы можем добавить папку, содержащую модуль, в переменную path (она полностью модифицируемая).
Ваш первый модуль: шаг 12
Одно из нескольких возможных решений выглядит следующим образом:
from sys import path
path.append('..\\modules')
import module
zeroes = [0 for i in range(5)]
ones = [1 for i in range(5)]
print(module.suml(zeroes))
print(module.prodl(ones))
main.py
Примечание:
- мы удвоили
\
внутри имени папки - знаете почему?
- мы использовали относительное имя папки - это будет работать, если Вы запустите файл main.py непосредственно из его домашней папки, и не будет работать, если текущий каталог не соответствует относительному пути; Вы всегда можете использовать абсолютный путь, например:
path.append('C:\\Users\\user\\py\\modules');
- мы использовали метод
append()
- по сути, новый путь будет занимать последний элемент в списке путей; если Вам не нравится идея, Вы можете использовать вместо него методinsert()
.