Как создать и использовать собственные модули в Python
Узнайте, как создавать и использовать собственные модули в Python, чтобы организовать код и повысить его переиспользуемость.

Алексей Кодов
Автор статьи
23 июня 2023 в 18:36
Создание и использование собственных модулей в Python — важный навык для любого разработчика. В этой статье мы рассмотрим, как создать свой модуль и как его импортировать и использовать в других программах.
Создание модуля
Для создания модуля необходимо создать файл с расширением .py , в котором будут храниться все функции и классы, относящиеся к модулю. Например, создадим файл my_module.py и опишем в нем следующие функции:
def hello(name): print(f"Привет, ! ") def add(a, b): return a + b
Теперь у нас есть модуль my_module , содержащий две функции: hello() и add() .
Python-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT

Импортирование модуля
Чтобы использовать функции из модуля my_module в другой программе, нужно импортировать модуль с помощью ключевого слова import . Рассмотрим пример:
import my_module my_module.hello("Мир") result = my_module.add(2, 3) print(result) # Выведет "5"
Таким образом, мы импортировали модуль my_module и использовали его функции в нашей программе.
Импортирование отдельных функций
Если вам нужны только определенные функции из модуля, можно импортировать только их, используя конструкцию from . import . . Пример:
from my_module import hello, add hello("Мир") result = add(2, 3) print(result) # Выведет "5"
Теперь функции hello() и add() доступны без указания имени модуля перед ними.
Импортирование с другим именем
Иногда бывает полезно импортировать модуль или функцию с другим именем, чтобы избежать конфликта имен или для удобства. Для этого используется конструкция import . as . :
import my_module as mm mm.hello("Мир") result = mm.add(2, 3) print(result) # Выведет "5"
В данном случае мы импортировали модуль my_module с именем mm , что позволяет использовать его функции с коротким именем.
Вывод
Создание и использование собственных модулей в Python — удобный способ организации кода, который позволяет разделить логику на отдельные компоненты и повторно использовать код. В этой статье мы рассмотрели основные принципы работы с модулями, и теперь вы знаете, как создавать и импортировать свои собственные модули. Удачи вам в изучении Python и создании крутых проектов!
Python: Модули
Для создания модуля нужно создать файл с расширением py, содержащий функции и переменные. Другой способ – написать модуль на другом языке программирования, например, можно писать модули на языке C, которые после компиляции могут использоваться стандартным интерпретатором Python.
Модуль можно импортировать в другую программу, чтобы использовать функции из него. Посмотрим, как использовать модули стандартной библиотеки Python.
import sys print('Аргументы командной строки:') for i in sys.argv: print(i) print('\n\nПеременная PYTHONPATH содержит', sys.path, '\n')
В начале мы импортируем модуль sys командой import. Этим мы говорим Python, что хотим использовать этот модуль. Модуль sys содержит функции, относящиеся к интерпретатору Python и его среде, т.е. к системе (system).
Когда Python выполняет команду import sys, он ищет модуль sys. В данном случае это один из встроенных модулей, и Python знает, где его искать.
Если бы это был не скомпилированный модуль, т.е. модуль, написанный на Python, тогда интерпретатор Python искал бы его в каталогах, перечисленных в переменной sys.path. Если модуль найден, выполняются команды в теле модуля, и он становится доступным. Обратите внимание, что инициализация происходит только при первом импорте модуля.
Доступ к переменной argv в модуле sys предоставляется при помощи точки, т.е. sys.argv. Это явно показывает, что это имя является частью модуля sys. Ещё одним преимуществом такого обозначения является то, что имя не конфликтует с именем переменной argv, которая может использоваться в вашей программе.
Переменная sys.argv является списком строк. Она содержит список аргументов командной строки, т.е. аргументов, переданных программе из командной строки.
sys.path содержит список имён каталогов, откуда импортируются модули. Модули, расположенные в текущем каталоге, можно импортировать напрямую. В противном случае придётся поместить свой модуль в один из каталогов, перечисленных в sys.path.
Помните, что текущий каталог – это каталог, в котором была запущена программа. Чтобы узнать текущий каталог программы, выполните сценарий.
import os print(os.getcwd())
Одной инструкцией можно подключить несколько модулей, хотя так не рекомендуется делать.
import time, random
Если не удастся найти модуль для импортирования, то возбудится исключение ImportError. Если не будет найден указанный атрибут модуля, то возбудится исключение AttributeError.
Если название модуля слишком длинное, или оно вам не нравится по каким-то другим причинам, то для него можно создать псевдоним, с помощью ключевого слова as.
import math as cat print(cat.floor(4.7))
from
Для импорта всех имён, использующихся в модуле, можно выполнить команду from:
from sys import *
Следует заметить, что не все атрибуты будут импортированы. Если в модуле определена переменная __all__ (список атрибутов, которые могут быть подключены), то будут подключены только атрибуты из этого списка. Если переменная __all__ не определена, то будут подключены все атрибуты, не начинающиеся с нижнего подчёркивания. Кроме того, необходимо учитывать, что импортирование всех атрибутов из модуля может нарушить пространство имён главной программы, так как переменные, имеющие одинаковые имена, будут перезаписаны.
Можно указывать отдельные переменные из модуля.
from sys import argv
У каждого модуля есть имя, и команды в модуле могут узнать имя их модуля. Это полезно, когда нужно знать, запущен ли модуль как самостоятельная программа или импортирован. Когда модуль импортируется впервые, содержащийся в нём код исполняется. Мы можем воспользоваться этим для того, чтобы заставить модуль вести себя по-разному в зависимости от того, используется ли он сам по себе или импортируется в другую программу. Этого можно достичь с применением атрибута модуля под названием __name__.
if __name__ == '__main__': print('Эта программа запущена сама по себе.') else: print('Меня импортировали в другой модуль.')
Создание собственного модуля
Создать собственный модуль очень легко. Каждая программа на Python также является и модулем. Необходимо лишь убедиться, что у неё установлено расширение py. Создадим файл mymodule.py.
def sayhi(): print('Привет! Это говорит мой модуль.') __version__ = '0.1'
Как использовать созданный модуль в других программах? Помните, что модуль должен находиться либо в том же каталоге, что и программа, в которую мы импортируем его, либо в одном из каталогов, указанных в sys.path.
Создадим новый файл и импортируем наш модуль.
import mymodule mymodule.sayhi() print('Version', mymodule.__version__)
Другой способ импортирования.
from mymodule import sayhi, __version__ sayhi() print('Version', __version__)
Обратите внимание, что если в модуле, импортирующем данный модуль, уже было объявлено имя __version__, возникнет конфликт. Поэтому всегда рекомендуется отдавать предпочтение оператору import, хотя это и сделает программу немного длиннее.
Вариант со звёздочкой имеет свои особенности — это импортирует все публичные имена, такие как sayhi, но не импортирует __version__, потому что оно начинается с двойного подчёркивания.
from mymodule import *
Встроенная функция dir() поможет узнать список имён, определяемых объектом. Например, можно получить список функций, классов и переменных, входящих в модуль. Функция может принимать аргументы. Если в качестве аргумента указано имя модуля, она возвращает список имён, определённых в этом модуле. Если никакого аргумента не передавать, она вернёт список имён, определённых в текущем модуле.
Функция dir() применима к функциям и классам. Выполните dir(‘print’), чтобы увидеть атрибуты функции print, или dir(str), чтобы увидеть атрибуты класса str.
Пакеты
Модули можно сгруппировать в пакеты. Пакеты – это просто каталоги с модулями и специальным файлом __init__.py, который указывает, что этот каталог особый, так как содержит модули.
Импорт модуля – относительно дорогостоящее мероприятие, поэтому Python предпринимает некоторые шаги для ускорения этого процесса. Один из способов – создать байткод с расширением pyc, которые являются некой промежуточной формой, в которую Python переводит программу. Такой файл полезен при импорте модуля в следующий раз в другую программу – это произойдёт намного быстрее, поскольку значительная часть обработки, требуемой при импорте модуля, будет уже проделана. Этот байткод также является платформонезависимым. Обычно файлы pyc создаются в том же каталоге, где расположены и соответствующие им файлы py. Если Python не может получить доступ для записи файлов в этот каталог, файлы pyc созданы не будут.
Модули Python: подключение, импорт и использование сторонних библиотек | Урок №16

TLDR В видео рассказывается, как подключать и использовать модули Python и сторонние библиотеки, включая модуль time, импортировать системы и ios, определять функции и использовать pip для установки и поиска библиотек.
Summarize any YouTube video Summarize any video by yourself
Install on Safari
Install on Chrome
Отмеченное временем резюме
Узнайте, как подключать и использовать модули и библиотеки Python от сторонних разработчиков с помощью Orc, официального сайта менеджера пакетов pip.
Модуль time позволяет работать со временем и датой, включая функцию sleep, которая приостанавливает работу программы на заданное количество секунд.
Получите текущую дату и время с помощью модуля daytime и отобразите их в терминале с определенными значениями, такими как день недели или часы до определенного времени.
Используйте модуль time и импортируйте системы и ios для работы с датами и получения пользовательской информации.
Импорт модулей в Python позволяет вам получить доступ к различным функциональным возможностям и указать, какие функции использовать, и вы можете создать свой собственный модуль с осмысленными именами и значениями.
Определяйте функции и импортируйте модули в Python для доступа к их функциям и переменным.
Используйте pip для установки сторонних библиотек, таких как usb для тестирования технологии bit и развлечения, и выполните поиск по «тренерам», чтобы найти библиотеку.
В лекции рассказывалось о библиотеке для создания забавных текстовых дисплеев и о том, как устанавливать и использовать сторонние библиотеки с помощью менеджера пакетов и официальной документации.
Просмотреть больше Программирование
- Курс C++ №51: Движение рефакторинга, этап 2
- Лучшие практики именования кода: советы по четкому и организованному программированию
- Изучите синтаксис, директивы, классы и методы C# — урок 2
- Почему написание плохого кода является необходимостью для программистов
- Python 3.12: революция или эволюция? Новые функции и повышение производительности
- Ключевые выводы из Modern C — Лука Сас [ACCU 2021]
Summarize any video by yourself
Импорт собственных модулей
На этом занятии вы узнаете как создавать и импортировать свои собственные модули. Как мы говорили на предыдущем уроке, модули представляют собой обычный текстовый файл программы на Python. Поэтому, в текущем рабочем каталоге я создам еще один файл и назову его mymodule.py. (Щелкаем правой кнопкой по вкладке mymodule и выбираем пункт «Split and Move Right»). Запишем в этом модуле следующие строчки:
NAME = 'mymodule' def floor(x): print("функция из mymodule") return int(x) if x >= 0 else int(x) – 1
В результате, в глобальном пространстве имен имеем две переменные: NAME и floor. Все локальные переменные, например, x сюда уже не попадают – только глобальные определения.
Импортируем этот модуль в нашу программу ex.py:
import mymodule
и если теперь ниже записать:
то, как раз, увидим наши определения – переменную NAME и имя функции floor. То есть, они были импортированы в нашу программу и доступны через пространство имен mymodule:
print(mymodule.floor(-5.4))
Или же, можем воспользоваться другой конструкцией:
from mymodule import floor
и напрямую вызвать эту функцию:
print(floor(-5.4))
Но что будет, если в файле mymodule тоже прописать импорт, скажем, библиотеки math, следующим образом:
import math
В этом случае, в модуле mymodule появляется глобальная переменная с именем math. Значит, при импорте уже модуля mymodule (в ex.py):
import mymodule import pprint
мы должны увидеть это имя:
pprint.pprint(dir(mymodule))
Действительно, в конце списка оно присутствует, а это значит, к модулю math можно обратиться через модуль mymodule:
a = mymodule.math.floor(-5.6) print(a)
То есть, мы здесь уже имеем иерархию модулей, сначала обращаемся к mymodule, затем к math, а потом к одной из его функций.
Конечно, чтобы не создавать таких цепочек, можно было бы импортировать библиотеку math через конструкцию:
from math import *
(Еще раз отмечу, что так делать не рекомендуется. Здесь, я лишь в учебных целях показываю, что произойдет). В итоге получаем неявное расширение модуля mymodule за счет модуля math. И все функции из math мы теперь напрямую можем вызывать из mymodule:
a = mymodule.floor(-5.6) b = mymodule.ceil(-5.6) print(a, b)
Причем, вот эта функция floor была переопределена, поэтому вызывается не библиотечный вариант, а наш. Так вот, такой импорт ни в коем случае делать не стоит, чтобы не смешивать свои и стандартные функции в одном месте. Лучше или перечислять, те элементы, что мы собираемся использовать, например:
from math import pi, ceil
или же воспользоваться простым импортом:
import math
Давайте теперь детальнее разберемся, как работает импорт модулей. Первый вопрос, откуда Python «знает», где искать импортируемые модули? Порядок поиска прописан в специальной коллекции path модуля sys:
import sys pprint.pprint(sys.path)
Здесь первые строчки – это каталог с исполняемым модулем ex.py и рабочий каталог, а далее, идут дополнительные пути поиска, например, для файлов стандартной библиотеки. Поэтому, если мы переместим файл модуля mymodule из рабочего каталога, в какую-нибудь вложенную папку, например, с именем folder (создаем и перемещаем), то при импорте получим ошибку ModuleNotFoundError, так как к этой папке не прописан путь в коллекции path. Поэтому, нам дополнительно нужно указать каталог folder, в котором находится модуль mymodule, следующим образом:
import folder.mymodule
Конечно, в список path мы можем добавить путь для поиска модулей:
sys.path.append(r"C:\PythonProjects\example\folder")
и тогда при импорте по-прежнему достаточно будет прописывать только mymodule. Но это делается крайне редко, обычно добавляют имена подкаталогов через точку.
Давайте теперь поменяем местами эти два файла (ex.py и mymodule.py). В этом случае для импорта достаточно будет также прописать:
import mymodule
так как пути поиска теперь будут включать и рабочий каталог, где находится mymodule и каталог с исполняемым файлом.
Вернем файл ex.py в рабочий каталог. И заметим, что в момент выполнения импорта модуль преобразуется интерпретатором языка Python сначала в байт-код, а затем, запускается на исполнение. Это важный момент. Смотрите, если в mymodule прописать строчку:
print(NAME)
и запустить файл ex.py на исполнение, то в консоли увидим результат срабатывания функции print(). Причем она сработала в момент импорта модуля до вызова функции pprint(). Это означает, что если в mymodule будет записана программа:
for i in range(5): print(NAME)
то она будет выполнена. Так что с этим следует быть аккуратным.
Значит, получается, что подключаемые модули должны исключительно содержать определения переменных, функций и других объектов языка Python, но не их вызовы? Не обязательно! В каждом модуле есть специальная переменная __name__, которая принимает имя модуля, если они запускается при импорте:
print(__name__)
и значение «__main__», если он запускается как самостоятельная программа (показываем). И это свойство часто используют для контроля исполнения модуля. Если в нем нужно прописать программу, выполняемую только при непосредственном запуске модуля, то ее следует поместить в следующее условие:
if __name__ == "__main__": print("самостоятельный запуск") else: print("запуски при импорте")
Такую проверку часто можно увидеть в питоновских программах и вы теперь знаете, для чего она нужна.
Давайте посмотрим, что произойдет, если в модульном файле сделать импорт проектного:
import ex
Чтобы результат был виден, в проектный файл добавим:
print("ex.py")
print("mymodule")
После запуска видим, что сначала был выполнен проектный файл, затем, модульный, а потом, снова проектный. Но почему это выполнение не пошло дальше по цепочке? Дело в том, что модуль импортируется только один раз. Например, если прописать два импорта подряд:
import mymodule import mymodule
то увидим только одно сообщение. Это, как раз, и доказывает, что модуль был выполнен только один раз. Если же нам нужно сделать повторный импорт в одной и той же программе, то для этого следует использовать специальную функцию:
importlib.reload(mymodule)
а перед этим импортируем специальный модуль
import importlib
который доступен, начиная с версии Python 3.4. В качестве аргумента этой функции передаем ранее импортированный модуль и он будет обновлен без перезапуска, поэтому второй раз функция print() в нем выполняться не будет.
Надеюсь, из этого занятия вам стало понятно, как создавать свои собственные модули, как их импортировать и как все это работает в деталях. Жду всех вас на следующем занятии!
Видео по теме

#1. Первое знакомство с Python Установка на компьютер

#2. Варианты исполнения команд. Переходим в PyCharm

#3. Переменные, оператор присваивания, функции type и id

#4. Числовые типы, арифметические операции

#5. Математические функции и работа с модулем math

#6. Функции print() и input(). Преобразование строк в числа int() и float()

#7. Логический тип bool. Операторы сравнения и операторы and, or, not

#8. Введение в строки. Базовые операции над строками

#9. Знакомство с индексами и срезами строк

#10. Основные методы строк

#11. Спецсимволы, экранирование символов, row-строки

#12. Форматирование строк: метод format и F-строки

#13. Списки — операторы и функции работы с ними

#14. Срезы списков и сравнение списков

#15. Основные методы списков

#16. Вложенные списки, многомерные списки

#17. Условный оператор if. Конструкция if-else

#18. Вложенные условия и множественный выбор. Конструкция if-elif-else

#19. Тернарный условный оператор. Вложенное тернарное условие

#20. Оператор цикла while

#21. Операторы циклов break, continue и else

#22. Оператор цикла for. Функция range()

#23. Примеры работы оператора цикла for. Функция enumerate()

#24. Итератор и итерируемые объекты. Функции iter() и next()

#25. Вложенные циклы. Примеры задач с вложенными циклами

#26. Треугольник Паскаля как пример работы вложенных циклов

#27. Генераторы списков (List comprehensions)

#28. Вложенные генераторы списков

#29. Введение в словари (dict). Базовые операции над словарями

#30. Методы словаря, перебор элементов словаря в цикле

#31. Кортежи (tuple) и их методы

#32. Множества (set) и их методы

#33. Операции над множествами, сравнение множеств

#34. Генераторы множеств и генераторы словарей

#35. Функции: первое знакомство, определение def и их вызов

#36. Оператор return в функциях. Функциональное программирование

#37. Алгоритм Евклида для нахождения НОД

#38. Именованные аргументы. Фактические и формальные параметры

#39. Функции с произвольным числом параметров *args и **kwargs

#40. Операторы * и ** для упаковки и распаковки коллекций

#41. Рекурсивные функции

#42. Анонимные (lambda) функции

#43. Области видимости переменных. Ключевые слова global и nonlocal

#44. Замыкания в Python

#45. Введение в декораторы функций

#46. Декораторы с параметрами. Сохранение свойств декорируемых функций

#47. Импорт стандартных модулей. Команды import и from

#48. Импорт собственных модулей

#49. Установка сторонних модулей (pip install). Пакетная установка

#50. Пакеты (package) в Python. Вложенные пакеты

#51. Функция open. Чтение данных из файла

#52. Исключение FileNotFoundError и менеджер контекста (with) для файлов

#53. Запись данных в файл в текстовом и бинарном режимах

#54. Выражения генераторы

#55. Функция-генератор. Оператор yield

#56. Функция map. Примеры ее использования

#57. Функция filter для отбора значений итерируемых объектов

#58. Функция zip. Примеры использования

#59. Сортировка с помощью метода sort и функции sorted

#60. Аргумент key для сортировки коллекций по ключу

#61. Функции isinstance и type для проверки типов данных

#62. Функции all и any. Примеры их использования

#63. Расширенное представление чисел. Системы счисления

#64. Битовые операции И, ИЛИ, НЕ, XOR. Сдвиговые операторы

#65. Модуль random стандартной библиотеки

#66. Аннотация базовыми типами

#67. Аннотации типов коллекций

#68. Аннотации типов на уровне классов

#69. Конструкция match/case. Первое знакомство

#70. Конструкция match/case с кортежами и списками

#71. Конструкция match/case со словарями и множествами

#72. Конструкция match/case. Примеры и особенности использования
© 2023 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта