Подключение модулей в Python

Язык программирования Python имеет много встроенных функций. Однако их не хватает для решения всех видов задач, поэтому программисты добавляют инструменты, подключая модули.

Что такое модуль

Это отдельный файл, содержащий какой-то код. Любой скрипт, написанный программистом на Python 3, можно назвать модулем. Он может быть как исполняемым, так и подключаемым. Исполняемый модуль содержит код, который самостоятельно выполняет какие-то действия, а подключаемый представляет из себя набор функций, классов и объектов, которые можно использовать для решения задач в другой программе.

Разделение программ на модули даёт ряд преимуществ:

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

Исполняемый и подключаемый модуль

Можно написать такой скрипт, который будет и выполнять какие-то действия (программа), и импортироваться в другие модули (библиотека).

Его важно правильно оформить:

  1. Весь исполняемый код помещается в функцию main().
  2. Функция main() вызывается после условия:
    if __name__ == '__main__':
        main()
В этом случае интерпретатор Python не будет запускать код, вложенный в условие, но все функции библиотеки можно будет использовать.

Подключение модуля

Это можно сделать разными способами, выбор зависит только от нужд и желаний программиста.

Модули в Python — это файлы с расширением “.py”. При импорте расширение опускается, интерпретатор и так знает, что после команды import следует имя модуля.

Программист может без проблем подключить любой модуль, который есть в стандартной библиотеке Python 3. Для подключения специфичных пользовательских инструментов сначала нужно их скачать. Обычно для этого используется пакетный менеджер pip.

Обычное подключение — import

Подключать модули желательно в самом вверху скрипта, используя ключевое слово “import”, например import random.

После подключения программа получает доступ ко всем функциям, методам и классам, содержащимся в нём.

Программист может вызвать любую функцию из подключенной библиотеки используя префикс “имя_модуля.“.  Пример: random.randint(1,15) где random — это библиотека, которую мы подключили, а randint — имя функции, которая в ней описана.

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

Вот полный пример использования инструкции import в Python 3:

import random
a = random.randint(1, 15)
print(a)

Использование псевдонимов — as

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

Например, если написать “import random as rand“, то вместо длинного random для обращения к функциям библиотеки можно будет использовать короткое rand.

Импорт компонентов — from

Чтобы не захламлять программу большим количеством неиспользуемых инструментов, можно подключать не весь модуль, а какую-то его часть.

Например, программист хочет использовать только одну функцию из математической библиотеки math. Если он подключит всю библиотеку, то в скрипт добавится более 40 функций, которые будут занимать место. Чтобы добавить в проект какую-то часть, используют ключевое слово from:

from <имя подключаемого модуля> import <название функции>

Таким образом, основной скрипт получает доступ только к определённой функции. Кроме того, при таком подключении при вызове функций из подключённого модуля не используется префикс. Важно не забывать об этом, чтобы не допустить конфликта имён.

Можно подключить несколько функций сразу в одной строке. Для этого их надо перечислить через запятую.

Если после import написать символ звёздочки “*”, подключится все содержимое модуля. Это считается плохим тоном, потому что может привести к совпадению имён из основного скрипта с именами из подключаемого. Но если программист уверен, что использовал уникальные названия для функций и переменных, теоретически он может использовать этот способ.

Перезагрузка библиотеки

За один сеанс модуль можно импортировать только один раз. Если программист после импорта, изменит в файле, который импортировал что-либо, а потом снова его импортирует, основная программа не будет видеть этих изменений.

Всё потому, что при импорте библиотека кешируется, когда её пытаются импортировать снова, интерпретатор Python просто использует сохранённую в кэше копию.

Пример:

import my_name, time
print(my_name.name) # Выведет Сергей
time.sleep(10) # пауза во время которой изменяем 
# значение name в файле my_name.py
# с Сергей на Александр
import my_name
print(my_name.name) # Выведет Сергей

Если всё же необходимо перезагрузить модуль, на помощью приходит функция reload() из стандартной библиотеки importlib. Перезагрузка не влияет на объекты, ссылающиеся на импортированный модуль, и позволяет реализовать динамическую перезагрузку компонентов программы.

Вот пример:

from importlib import reload
import my_name, time 
print(my_name.name) # Выведет Сергей
time.sleep(10)# меняем значение с Сергей на Александр 
my_name = reload(my_name)
print(my_name.name) # Выведет Александр

Подключение из другой папки

Библиотеки подключаются очень просто, когда интерпретатор Python знает, где их искать. Python ищет модули:

  • В папке исполняемого скрипта.
  • Во встроенных модулях (built-in).
  • В директориях, определённых в sys.path (также содержит переменную PYTHONPATH).

 

Чтобы импортировать модуль из другой папки в Python 3, можно сделать следующее:

  • Добавить путь к папке с модулем с помощью команды библиотеки sys
    import sys
    path.insert(0, "/путь/папка_модуля")
    import модуль
  • Или переместить модуль в папку, определённую в путях поиска интерпретатора Python.

Для того чтобы директория, содержащая файлы, определялась как пакет, в неё необходимо добавить файл __init__.py. Он показывает интерпретатору Python, что папка — это пакет с модулями.

Начиная с версии Python 3.3, добавлять файл __init__.py в директорию больше не нужно, интерпретатор Python считает все папки пакетами.

Не стоит путать понятия “пакет” и “модуль”. Модуль — это отдельный файл, а пакет — это папка, в которой содержится несколько отдельных скриптов.