Пакеты Python
Пакет — это контейнер, содержащий различные функции для выполнения определённых задач. Например, пакет math включает функцию sqrt() для извлечения квадратного корня числа.
Работая над большими проектами, нам приходится иметь дело с большим количеством кода, и запись всего в одном файле сделает наш код беспорядочным. Вместо этого мы можем разделить код на несколько файлов, храня связанный код вместе в пакетах.
Теперь мы можем использовать пакет всякий раз, когда он нам нужен в проектах. Таким образом, мы также можем повторно использовать наш код.
Структура модели пакета в программировании на Python
Предположим, мы разрабатываем игру. Одна из возможных организаций пакетов и модулей показана на рисунке ниже.
Примечание
Каталог должен содержать файл с именем __init__.py, чтобы Python считал его пакетом. Этот файл может быть пустым, но обычно в него помещают код инициализации для этого пакета.
Импорт модуля из пакета
В 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, аналогично пути поиска модулей.