October 19, 2023

Модули и пакеты

Сегодня мы разберем что такое модули и пакеты и для чего они нужны. До сих пор, код из примеров мы писали в отдельных, никак не связанных между собой файлах. Но что делать, когда мы начнём писать рабочее прикладное приложение, которое реализует сложные многофакторные задачи и имеет разветвлённую логику.

Понятие модуля

Разумеется, нам придётся разделять код на блоки и функции. И размещать наш код мы будем конечно же в отдельных файлах. Каждый файл будет отвечать за определённую задачу или модуль, в нём будут находится разные функции, решающие набор конкретных подзадач.

Затем, созданные нами файлы с функционалом будут подключаться друг к другу и использоваться в процессе работы над проектом. Так вот, в языке 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