Пакеты в Python

В этой статье вы научитесь разбивать вашу программу на компактные и элегантные модули — пакеты. Также вы узнаете как импортировать собственные и сторонние пакеты в ваши проекты. 

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

Никто из нас не хранит все файлы на компьютере в одном месте. У каждого из нас хорошо организованная иерархия папок — так проще найти нужный файл. 

Файлы одного и того же типа хранятся в одной папке. Например, песни мы храним в папке «музыка». То же самое и в Python — для разных фрагментов кода свои директории и модули. 

С ростом количества строк кода в проекте растет и количество модулей. Одни модули мы храним в одном пакете, другие — в другом. Так проектом проще управлять, он становится понятнее. 

Как папки содержат подпапки, так и пакеты Python содержит подпакеты и модули. 

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

Приведем пример — допустим, вы разрабатываете игру. На картинке представлен возможный вариант организации пакетов и модулей.

Импорт модулей из пакета

Мы можем импортировать модули из пакетов с помощью оператора-точки — ..

Допустим, нам нужно импортировать модуль 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 — точно так же, как в случае с модулями.

codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©