Модули и пакеты
Сегодня мы разберем что такое модули и пакеты и для чего они нужны. До сих пор, код из примеров мы писали в отдельных, никак не связанных между собой файлах. Но что делать, когда мы начнём писать рабочее прикладное приложение, которое реализует сложные многофакторные задачи и имеет разветвлённую логику.
Понятие модуля
Разумеется, нам придётся разделять код на блоки и функции. И размещать наш код мы будем конечно же в отдельных файлах. Каждый файл будет отвечать за определённую задачу или модуль, в нём будут находится разные функции, решающие набор конкретных подзадач.
Затем, созданные нами файлы с функционалом будут подключаться друг к другу и использоваться в процессе работы над проектом. Так вот, в языке Python эти файлы именуются модулями. В общем смысле модуль в Python - это файл, содержащий некоторый код, который можно включать в другие модули и
повторно использовать в различных частях приложения.
Модуль всегда определяется как файл с расширением *.ру Название файла будет одновременно и названием модуля. Допустим, мы пишем собственный блог и нам нужен модуль для работы с пользователями. Например, авторизация, регистрация или блокировка пользователя. Для этого разумно создать модуль user.ру и разместить в нём функции для работы с пользователем.
Для начала, в корневой директории нашего проекта (который мы создали через IDE PyCharm) создадим файл user.py:
После создания файла можно считать, что мы создали новый модуль. Теперь давайте объявим в нём несколько функций:
def new(login, password): return "Пользователь успешно создан!" def auth(login, password): return "Вы успешно авторизовались!" def block(login): return "Пользователь заблокирован"
Теперь мы имеем готовый модуль с функционалом и его можно использовать в других модулях. Повторим, для того, чтобы создать модуль, достаточно всего лишь создать файл с корректным названием и расширением *.py и разместить в нём код, в нашем случае – функции.
Воспользуемся созданным модулем, подключив его к другому модулю. Для этого в той же корневой директории нашего проекта создадим новый файл, например, с названием index.py:
Чтобы подключить модуль, необходимо воспользоваться ключевым словом import, после него указывая название нашего файла с модулем, но без расширения *.py:
import user
Далее, мы можем получить доступ к функциям этого модуля при помощи синтаксиса: название_модуля.название_функции():
# file: index.py import user user.new("Mark", "dsferiof23hf") user.auth("Mark", "dsferiof23hf") user.block("Mark")
Псевдонимы для модулей
Когда мы импортируем модуль, обращение к его членам производится через имя файла этого модуля (в нашем случае user), но можно поменять это имя при помощи ключевого слова as:
import user as user_account user_account.new("Mark", "dsferiof23hf") user_account.auth("Mark", "dsferiof23hf") user_account.block("Mark")
Псевдоним для функций
Можно также объявить псевдоним для конкретной функции при помощи ключевого слова from:
import user as user_account from user import new new("Mark", "dsferiof23hf") user_account.auth("Mark", "dsferiof23hf") user_account.block("Mark")
Теперь для того, чтобы вызвать функцию new модуля user мы можем не указывать имя модуля, а вызывать напрямую функцию по её имени. Импортировать все функции по имени можно при помощи символа * :
from user import * new("Mark", "dsferiof23hf") auth("Mark", "dsferiof23hf") block("Mark")
Теперь можно вызывать функции без имени модуля.
Пакеты
До текущего момента мы включали функции и модули из корневой директории проекта, но что делать если мы хотим разместить наши модули по папкам? Для этого необходимо создать пакеты модулей.
Пакет модулей – это специальным образом оформленная папка в директории проекта. Для того, чтобы создать пакет, необходимо:
Создать новую папку
Внутри неё разместить пустой файл с именем __init__.py
Разместить файлы с модулями внутри этой папки
Подключение модуля из пакета к другому модулю. Перейдём в файл index.py и импортируем новый модуль из нашего пакета:
import user.admin as admin admin.new("Mark", "dsferiof23hf") admin.auth("Mark", "dsferiof23hf") admin.block("Mark")
При помощи ключевого слова import указываем вложенный модуль, сперва указываем пакет в котором размещены наши модули, и через точку указываем необходимый нам модуль. И чтобы не писать каждый раз полный путь в виде пакет.модуль мы сразу указываем для него псевдоним через ключевое слово as.
Альтернативным решением может послужить подобная конструкция:
from user import admin admin.new("Mark", "dsferiof23hf") admin.auth("Mark", "dsferiof23hf") admin.block("Mark")
Также пакет может иметь сколько угодно вложенных пакетов, для этого внутри директории пакета, размещается вложенная директория с файлом __init__.py и файлами модулей:
Подключение в файл происходит аналогичным образом, через символ «точка»:
import user.admin.new as new new.make_account("Mark", "sr345tr4f54d4")
from user.admin import new new.make_account("Mark", "sr345tr4f54d4")
Встроенные модули
Существуют также и встроенные модули, которые поставляются вместе с самим интерпретатором Python. Они включаются также, как самостоятельно созданные модули, через конструкции import и from.
Со списком встроенных модулей Python можно ознакомиться:
Документация Python (на английском): https://docs.python.org/3/library/index.html
В следующих уроках мы рассмотрим установку сторонних модулей.
Telegram: https://t.me/+_oMNR3qtAPBkZDZi