Модули и пакеты
Сегодня мы разберем что такое модули и пакеты и для чего они нужны. До сих пор, код из примеров мы писали в отдельных, никак не связанных между собой файлах. Но что делать, когда мы начнём писать рабочее прикладное приложение, которое реализует сложные многофакторные задачи и имеет разветвлённую логику.
Понятие модуля
Разумеется, нам придётся разделять код на блоки и функции. И размещать наш код мы будем конечно же в отдельных файлах. Каждый файл будет отвечать за определённую задачу или модуль, в нём будут находится разные функции, решающие набор конкретных подзадач.
Затем, созданные нами файлы с функционалом будут подключаться друг к другу и использоваться в процессе работы над проектом. Так вот, в языке 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