У цій статті ви навчитесь ділити свою базу коду на чисті, ефективні модулі за допомогою пакетів Python. Крім того, ви навчитеся імпортувати та використовувати власні або сторонні пакети у вашій програмі Python.
Відео: Пакети Python: упорядкуйте свій код
Що таке пакети?
Зазвичай ми не зберігаємо всі файли на своєму комп’ютері в одному і тому ж місці. Для зручності ми використовуємо добре організовану ієрархію каталогів.
Подібні файли зберігаються в одному каталозі, наприклад, ми можемо зберігати всі пісні в каталозі " музика ". Аналогічно цьому, Python має пакети для каталогів та модулі для файлів.
Оскільки наша прикладна програма збільшується в розмірі з великою кількістю модулів, ми поміщаємо подібні модулі в один пакет, а різні модулі в різні пакети. Це робить проект (програму) простим в управлінні та концептуально зрозумілим.
Так само, оскільки каталог може містити підкаталоги та файли, пакет Python може мати підпакети та модулі.
Каталог повинен містити файл із іменем __init__.py
, щоб Python розглядав його як пакет. Цей файл можна залишити порожнім, але ми зазвичай розміщуємо в ньому код ініціалізації для цього пакета.
Ось приклад. Припустимо, ми розробляємо гру. Однією з можливих організацій пакетів та модулів може бути така, як показано на малюнку нижче.

Імпорт модуля з пакета
Ми можемо імпортувати модулі з пакетів за допомогою оператора dot (.).
Наприклад, якщо ми хочемо імпортувати 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
, подібно до шляху пошуку модуля.