Пакеты Python: как их создавать и импортировать?

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

Видео: Пакеты Python: систематизируйте свой код

Что такое пакеты?

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

Подобные файлы хранятся в одном каталоге, например, мы можем хранить все песни в каталоге « музыка ». Аналогично этому в Python есть пакеты для каталогов и модули для файлов.

Поскольку размер нашей прикладной программы увеличивается с увеличением количества модулей, мы помещаем аналогичные модули в один пакет, а разные модули - в разные пакеты. Это делает проект (программу) простым в управлении и концептуально понятным.

Точно так же, как каталог может содержать подкаталоги и файлы, пакет 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, аналогично пути поиска модуля.

Интересные статьи...