Как написать свой Python-модуль
Если вы выделили повторяющийся функционал в отдельный набор функций и хотите стабилизировать код для быстрого подключения, статья для вас.
Написание Python-модуля может быть полезным, когда нужно повторно использовать код в разных проектах или хочется создать библиотеку собственных функций и классов для облегчения разработки. Если вы кодите на Python на повседневной основе и — о чудо! — выделили повторяющийся функционал в отдельный набор функций, классов, методов и переменных, и хотите “стабилизировать” такой код для последующего быстрого подключения, то статья для вас.
Такое будет непросто повторить новичку, если нет живого примера адекватного объема под рукой, однако для вас это отличная возможность сделать сто шагов вперед в плане роста навыков.
Грубо говоря, Python-модуль представляет собой файл с расширением .py, который содержит определения функций, классов и переменных, доступных для использования в других программах. Давайте начнем с создания простого модуля под названием mymodule.
Шаг 1: Создание модуля
Создадим новый файл с именем mymodule.py и откроем его в любимом текстовом редакторе.
Кстати, если вы только начинаете писать код на Python и еще не знаете, в какой программе это делать, то вот моя подборка питонических IDE с хорошим UI / UX.
Здесь вы будете определять функции и классы для вашего модуля mymodule.py.
def greet(name): print("Hello, " + name + "!") class Person: def __init__(self, name): self.name = name def say_hello(self): print("Hello, my name is " + self.name)
Так мы определяем:
- функцию greet(), которая принимает аргумент name и выводит приветствие;
- класс Person, который имеет конструктор __init__() для установки имени;
- метод say_hello(), который выводит приветствие с использованием имени объекта класса.
Шаг 2: Использование модуля
Теперь модуль можно использовать его в других программах. Создадим новый файл с именем main.py и импортируем mymodule следующим образом:
import mymodule mymodule.greet("Alice") person = mymodule.Person("Bob") person.say_hello()
Здесь мы используем ключевое слово import и вызываем функцию greet().
API как следующая стадия развития модуля
Если ваш модуль разрастается, становится полноценным проектом и обретает, скажем, динамические данные, то самое время ему стать полноценным API (Application Programming Interface – программный интерфейс приложения). Выражаясь простыми словами, то это следующая стадия развития вашего модуля.
С разработкой полноценных API помогают сервисы вроде swagger.io, который ускоряет подгонку вашего модуля к стандартам RESTful, и создание документации. Но об этом – уже в следующей статье.
Когда в собственном модуле нет необходимости
Написание и поддержка собственного модуля отнимают немалое время, как оказалось. И да, здесь лучше не воевать в одиночку: вместе с затыками бороться всегда проще. Так и хочется посоветовать: избегайте офферов, где у вас не будет команды разработчиков, это существенно замедлит кодинг. Более того, если проект, где пригождается самописный модуль, не столь велик, возможно, в таком апгрейде нет необходимости. Иначе на отладку, вызванную несовместимостью используемых внешних библиотек, вы потратите трудовые ресурсы, которых на такое тратить пока не стоит.
Заключение
Надеюсь, статьей мне удалось показать вам, как пишется элементарный модуль. В моей практике такое пригождалось, когда необходимо обсчитать итоговую эффективность бота с помощью классов “(не)успешный диалог”. Так что веселья ради найти, куда бы прикрутить такую фишку, довольно просто. Потому написание элементарных импортируемых модулей часто входит в обучение основам Python.
Напишите в комментариях, какие самописные модули вы используете в работе.
Модули
Модуль в языке Python представляет отдельный файл с кодом, который можно повторно использовать в других программах.
Для создания модуля необходимо создать собственно файл с расширением *.py , который будет представлять модуль. Название файла будет представлять название модуля. Затем в этом файле надо определить одну или несколько функций.
Допустим, основной файл программы называется main.py . И мы хотим подключить к нему внешние модули.
Для этого сначала определим новый модуль: создадим в той же папке, где находится main.py, новый файл, который назовем message.py . По умолчанию интерпретатор Python ищет модули по ряду стандартных путей, один из которых — это папка главного, запускаемого скрипта. Поэтому, чтобы интерпретатор подхватил модуль message.py, для простоты оба файла поместим в один проект.

Соответственно модуль будет называться message . Определим в нем следующий код:
hello = "Hello all" def print_message(text): print(f"Message: ")
Здесь определена переменная hello и функция print_message, которая в качестве параметра получает некоторый текст и выводит его на консоль.
В основном файле программы — main.py используем данный модуль:
import message # подключаем модуль message # выводим значение переменной hello print(message.hello) # Hello all # обращаемся к функии print_message message.print_message("Hello work") # Message: Hello work
Для использования модуля его надо импортировать с помощью оператора import , после которого указывается имя модуля: import message .
Чтобы обращаться к функциональности модуля, нам нужно получить его пространство имен . По умолчанию оно будет совпадать с именем модуля, то есть в нашем случае также будет называться message .
Получив пространство имен модуля, мы сможем обратиться к его функциям по схеме
Например, обращение к функции print_message() из модуля message:
message.print_message("Hello work")
И после этого мы можем запустить главный скрипт main.py, и он задействует модуль message.py. В частности, консольный вывод будет следующим:
Hello all Message: Hello work
Подключение функциональности модуля в глобальное пространство имен
Другой вариант настройки предполагает импорт функциональности модуля в глобальное пространство имен текущего модуля с помощью ключевого слова from :
from message import print_message # обращаемся к функии print_message из модуля message print_message("Hello work") # Message: Hello work # переменная hello из модуля message не доступна, так как она не импортирована # print(message.hello) # print(hello)
В данном случае мы импортируем из модуля message в глобальное пространство имен функцию print_message() . Поэтому мы сможем ее использовать без указания пространства имен модуля как если бы она была определена в этом же файле.
Все остальные функции, переменные из модуля недоступны (как например, в примере выше переменная hello). Если мы хотим их также использовать, то их можно подключить по отдельности:
from message import print_message from message import hello # обращаемся к функции print_message из модуля message print_message("Hello work") # Message: Hello work # обращаемся к переменной hello из модуля message print(hello) # Hello all
Если необходимо импортировать в глобальное пространство имен весь функционал, то вместо названий отдельных функций и переменных можно использовать символ зводочки * :
from message import * # обращаемся к функции print_message из модуля message print_message("Hello work") # Message: Hello work # обращаемся к переменной hello из модуля message print(hello) # Hello all
Но стоит отметить, что импорт в глобальное пространство имен чреват коллизиями имен функций. Например, если у нас том же файле определена функция с тем же именем до ее вызова, то будет вызываться функция, которая определена последней:
from message import * print_message("Hello work") # Message: Hello work - применяется функция из модуля message def print_message(some_text): print(f"Text: ") print_message("Hello work") # Text: Hello work - применяется функция из текущего файла
Таким образом, одноименная функция текущего файла скрывает функцию из подключенного модуля.
Установка псевдонимов
При импорте модуля и его функциональности мы можем установить для них псевдонимы. Для этого применяется ключевое слово as , после которого указывается псевдоним. Например, установим псевдоним для модуля:
import message as mes # модуль message проецируется на псевдоним mes # выводим значение переменной hello print(mes.hello) # Hello all # обращаемся к функии print_message mes.print_message("Hello work") # Message: Hello work
В данном случае пространство имен будет называться mes , и через этот псевдоним можно обращаться к функциональности модуля.
Подобным образом можно установить псевдонимы для отдельной функциональности модуля:
from message import print_message as display from message import hello as welcome print(welcome) # Hello all - переменная hello из модуля message display("Hello work") # Message: Hello work - функция print_message из модуля message
Здесь для функции print_message из модуля message устанавливается псевдоним display, а для переменной hello — псевдоним welcome. И через эти псевдонимы мы сможем к ним обращаться.
Псевдонимы могут быть полезны, когда нас не устраивают имена функций и переменных, например, они слишком длинные, и мы хотим их сократить, либо мы хотим дать им более описательные, с нашей точки зрения, имена. Либо если в текущем файле уже есть функциональность с теми же именами, и с помощью установки псевдонимов мы можем избежать конфликта имен. Например:
from message import print_message as display def print_message(some_text): print(f"Text: ") # функция print_message из модуля message display("Hello work") # Message: Hello work # функция print_message из текущего файла print_message("Hello work") # Text: Hello work
Имя модуля
В примере выше модуль main.py, который является главным, использует модуль message.py. При запуске модуля main.py программа выполнит всю необходимую работу. Однако, если мы запустим отдельно модуль message.py сам по себе, то ничего на консоли не увидим. Ведь модуль message просто определяет функцию и переменную и не выполняет никаких других действий. Но мы можем сделать так, чтобы модуль message.py мог использоваться как сам по себе, так и подключаться в другие модули.
При выполнении модуля среда определяет его имя и присваивает его глобальной переменной __name__ (с обеих сторон по два подчеркивания). Если модуль является запускаемым, то его имя равно __main__ (также по два подчеркивания с каждой стороны). Если модуль используется в другом модуле, то в момент выполнения его имя аналогично названию файла без расширения py. И мы можем это использовать. Так, изменим содержимое файла message.py :
hello = "Hello all" def print_message(text): print(f"Message: ") def main(): print_message(hello) if __name__ == "__main__": main()
В данном случае в модуль message.py для тестирования функциональности модуля добавлена функция main . И мы можем сразу запустить файл message.py отдельно от всех и протестировать код.
Следует обратить внимание на вызов функции main:
if __name__ == "__main__": main()
Переменная __name__ указывает на имя модуля. Для главного модуля, который непосредственно запускается, эта переменная всегда будет иметь значение __main__ вне зависимости от имени файла.
Поэтому, если мы будем запускать скрипт message.py отдельно, сам по себе, то Python присвоит переменной __name__ значение __main__ , далее в выражении if вызовет функцию main из этого же файла.
Однако если мы будем запускать другой скрипт, а этот — message.py — будем подключать в качестве вспомогательного, для message.py переменная __name__ будет иметь значение message . И соответственно метод main в файле message.py не будет работать.
Данный подход с проверкой имени модуля является более рекомендуемым подходом, чем просто вызов метода main.
В файле main.py также можно сделать проверку на то, является ли модуль главным (хотя в прицнипе это необязательно):
import message def main(): message.print_message("Hello work") # Message: Hello work if __name__ == "__main__": main()
Python предоставляет ряд встроенных модулей, которые мы можем использовать в своих программах. В следующих статьях рассмотрим основные из них.
Как создать и использовать модули в Python
Узнайте, как создать и использовать модули в Python для организации и повторного использования кода, улучшая структуру вашей программы.

Алексей Кодов
Автор статьи
23 июня 2023 в 18:49
В этой статье мы рассмотрим, как создавать и использовать модули в Python. Модули — это файлы, содержащие определения и выражения Python, которые можно использовать в других скриптах для повторного использования кода и улучшения структуры программы.
Создание модуля
Для создания модуля вам нужно создать файл с расширением .py , например my_module.py . В этом файле вы можете определить функции, классы и переменные, которые вы хотите использовать в других скриптах.
# my_module.py def hello(name): print(f"Hello, !") class MyClass: def __init__(self, name): self.name = name def say_name(self): print(f"My name is ")
Использование модуля
Чтобы использовать модуль, который вы создали, вам нужно импортировать его в другой скрипт. Для этого используйте ключевое слово import , за которым следует имя модуля без расширения .py .
# main.py import my_module my_module.hello("John") my_obj = my_module.MyClass("Jane") my_obj.say_name()
Будьте внимательны при выборе имен модулей, чтобы избежать конфликтов с именами существующих модулей и пакетов.
Python-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT

Импорт определенных функций и классов
Если вы хотите импортировать только определенные функции или классы из модуля, используйте ключевое слово from , после которого указывается имя модуля, а затем ключевое слово import и имена функций или классов.
# main.py from my_module import hello, MyClass hello("John") my_obj = MyClass("Jane") my_obj.say_name()
Изменение имени импортированного модуля или объекта
В некоторых случаях вы можете захотеть импортировать модуль или объект с другим именем. Для этого используйте ключевое слово as .
# main.py import my_module as mm mm.hello("John") my_obj = mm.MyClass("Jane") my_obj.say_name()
Вложенные модули
Если у вас есть большой проект с множеством модулей, вы можете структурировать их, создавая пакеты. Пакет — это каталог, содержащий файл __init__.py (могут быть пустым) и другие модули.
my_package/ __init__.py module_a.py module_b.py
Чтобы импортировать модули из пакета, используйте точечную нотацию.
# main.py import my_package.module_a import my_package.module_b
Теперь вы знаете, как создавать и использовать модули в Python для организации и повторного использования кода. Это основной инструмент, который помогает делать ваш код более читабельным и управляемым. Удачи вам в изучении Python!
Работа с модулями: создание, подключение инструкциями import и from

Модулем в Python называется любой файл с программой (да-да, все те программы, которые вы писали, можно назвать модулями). В этой статье мы поговорим о том, как создать модуль, и как подключить модуль, из стандартной библиотеки или написанный вами.
Каждая программа может импортировать модуль и получить доступ к его классам, функциям и объектам. Нужно заметить, что модуль может быть написан не только на Python, а например, на C или C++.
Подключение модуля из стандартной библиотеки
Подключить модуль можно с помощью инструкции import. К примеру, подключим модуль os для получения текущей директории:
import указывается название модуля. Одной инструкцией можно подключить несколько модулей, хотя этого не рекомендуется делать, так как это снижает читаемость кода. Импортируем модули time и random.
Использование псевдонимов
Если название модуля слишком длинное, или оно вам не нравится по каким-то другим причинам, то для него можно создать псевдоним, с помощью ключевого слова as.
Инструкция from
Подключить определенные атрибуты модуля можно с помощью инструкции from. Она имеет несколько форматов:
Первый формат позволяет подключить из модуля только указанные вами атрибуты. Для длинных имен также можно назначить псевдоним, указав его после ключевого слова as.
Следует заметить, что не все атрибуты будут импортированы. Если в модуле определена переменная __all__ (список атрибутов, которые могут быть подключены), то будут подключены только атрибуты из этого списка. Если переменная __all__ не определена, то будут подключены все атрибуты, не начинающиеся с нижнего подчёркивания. Кроме того, необходимо учитывать, что импортирование всех атрибутов из модуля может нарушить пространство имен главной программы, так как переменные, имеющие одинаковые имена, будут перезаписаны.
Создание своего модуля на Python
Теперь пришло время создать свой модуль. Создадим файл mymodule.py, в которой определим какие-нибудь функции:
Теперь в этой же папке создадим другой файл, например, main.py:
Выведет:
Поздравляю! Вы сделали свой модуль! Напоследок отвечу ещё на пару вопросов, связанных с созданием модулей:
Как назвать модуль?
Помните, что вы (или другие люди) будут его импортировать и использовать в качестве переменной. Модуль нельзя именовать также, как и ключевое слово (их список можно посмотреть тут). Также имена модулей нельзя начинать с цифры. И не стоит называть модуль также, как какую-либо из встроенных функций. То есть, конечно, можно, но это создаст большие неудобства при его последующем использовании.
Куда поместить модуль?
Туда, где его потом можно будет найти. Пути поиска модулей указаны в переменной sys.path. В него включены текущая директория (то есть модуль можно оставить в папке с основной программой), а также директории, в которых установлен python. Кроме того, переменную sys.path можно изменять вручную, что позволяет положить модуль в любое удобное для вас место (главное, не забыть в главной программе модифицировать sys.path).
Можно ли использовать модуль как самостоятельную программу?
Можно. Однако надо помнить, что при импортировании модуля его код выполняется полностью, то есть, если программа что-то печатает, то при её импортировании это будет напечатано. Этого можно избежать, если проверять, запущен ли скрипт как программа, или импортирован. Это можно сделать с помощью переменной __name__, которая определена в любой программе, и равна "__main__", если скрипт запущен в качестве главной программы, и имя, если он импортирован. Например, mymodule.py может выглядеть вот так:
Для вставки кода на Python в комментарий заключайте его в теги