В этой статье вы научитесь разделять кодовую базу на чистые и эффективные модули с помощью пакетов Python. Кроме того, вы научитесь импортировать и использовать свои собственные или сторонние пакеты в своей программе Python.
Видео: Пакеты Python: систематизируйте свой код
Что такое пакеты?
Обычно мы не храним все наши файлы на нашем компьютере в одном месте. Мы используем хорошо организованную иерархию каталогов для облегчения доступа.
Подобные файлы хранятся в одном каталоге, например, мы можем хранить все песни в каталоге « музыка ». Аналогично этому в Python есть пакеты для каталогов и модули для файлов.
Поскольку размер нашей прикладной программы увеличивается с увеличением количества модулей, мы помещаем аналогичные модули в один пакет, а разные модули - в разные пакеты. Это делает проект (программу) простым в управлении и концептуально понятным.
Точно так же, как каталог может содержать подкаталоги и файлы, пакет Python может иметь подпакеты и модули.
Каталог должен содержать файл с именем, __init__.py
чтобы Python мог рассматривать его как пакет. Этот файл можно оставить пустым, но обычно мы помещаем в него код инициализации для этого пакета.
Вот пример. Допустим, мы разрабатываем игру. Одна возможная организация пакетов и модулей может быть такой, как показано на рисунке ниже.

Импорт модуля из пакета
Мы можем импортировать модули из пакетов с помощью оператора точка (.).
Например, если мы хотим импортировать start
модуль из приведенного выше примера, это можно сделать следующим образом:
import Game.Level.start
Теперь, если этот модуль содержит названную функцию select_difficulty()
, мы должны использовать полное имя для ссылки на нее.
Game.Level.start.select_difficulty(2)
Если эта конструкция кажется длинной, мы можем импортировать модуль без префикса пакета следующим образом:
from Game.Level import start
Теперь мы можем вызвать функцию просто следующим образом:
start.select_difficulty(2)
Другой способ импорта только необходимой функции (или класса, или переменной) из модуля внутри пакета будет следующим:
from Game.Level.start import select_difficulty
Теперь мы можем напрямую вызвать эту функцию.
select_difficulty(2)
Хотя это проще, этот метод не рекомендуется. Использование полного пространства имен позволяет избежать путаницы и предотвращает совпадение двух одинаковых имен идентификаторов.
При импорте пакетов Python просматривает список каталогов, определенных в sys.path
, аналогично пути поиска модуля.