Пакеты и __init__.py
Организуйте модули в пакеты с правильной структурой каталогов.
«Пакеты и __init__.py» — бесплатный урок Python Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Что такое пакет?
Пакет — это каталог, содержащий файл __init__.py и один или несколько модулей. Python считает любой такой каталог пакетом, из которого можно выполнять импорт.
mypackage/
__init__.py
utils.py
math_helpers.pyФайл __init__.py
Файл __init__.py выполняется при импорте пакета. Он может быть пустым или предоставлять вызывающему коду выбранные имена.
# mypackage/__init__.py
from .utils import helper
from .math_helpers import addИмпорт из пакета
Используйте точечную запись, чтобы импортировать подмодули или имена, определённые в __init__.py.
import mypackage
from mypackage import helper
from mypackage.math_helpers import add
print(add(2, 3))Вложенные пакеты
Пакеты могут быть вложенными: подкаталог с собственным __init__.py становится вложенным пакетом.
mypackage/
__init__.py
network/
__init__.py
http.pyОтносительный импорт
Внутри пакета используйте относительный импорт с точкой в начале, чтобы обращаться к соседним модулям без жёсткого указания имени пакета.
# mypackage/network/http.py
from ..utils import helper # two levels upАбсолютный и относительный импорт
Абсолютный импорт однозначен и предпочтителен. Относительный импорт полезен внутри больших пакетов, чтобы избегать длинных имён.
# Absolute
from mypackage.utils import helper
# Relative (inside mypackage)
from .utils import helper__all__ в __init__.py
Определите __all__, чтобы управлять тем, что экспортирует from package import *.
# mypackage/__init__.py
__all__ = ['helper', 'add']
from .utils import helper
from .math_helpers import addПакеты пространств имён (PEP 420)
Python 3.3+ поддерживает пакеты пространств имён — каталоги без __init__.py. Это удобно, когда пакет нужно разделить между несколькими каталогами.
# No __init__.py needed
# Just have the directory and import normally
import myns.moduleИнициализация пакета в __init__
Используйте __init__.py, чтобы задать константы уровня пакета, настроить ведение журнала или отложенно загружать тяжёлые подмодули.
# mypackage/__init__.py
import logging
logging.getLogger(__name__).addHandler(logging.NullHandler())
VERSION = '1.0.0'Распространение пакетов
Добавьте pyproject.toml или setup.py, чтобы сделать пакет устанавливаемым с помощью pip.
# pyproject.toml excerpt
[project]
name = "mypackage"
version = "1.0.0"
# Install locally
# pip install -e .Проверка атрибутов пакета
Используйте __file__, __path__ и __name__, чтобы во время выполнения исследовать метаданные пакета.
import mypackage
print(mypackage.__file__) # path to __init__.py
print(mypackage.__path__) # list of directory paths
print(mypackage.__name__) # 'mypackage'Быстрая проверка
Какой файл превращает каталог в пакет Python?
Повторение
Пакеты организуют модули по каталогам с помощью __init__.py. Используйте абсолютный импорт для ясности, относительный импорт внутри пакета, а __all__ — для управления общедоступными API.
Часто задаваемые вопросы
Урок «Пакеты и __init__.py» бесплатный?
Да — полный текст урока «Пакеты и __init__.py» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «Пакеты и __init__.py»?
Организуйте модули в пакеты с правильной структурой каталогов. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Пакеты и __init__.py»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание и импорт модулей
- Стандартная библиотека Python
- Пакеты и __init__.py
- Установка пакетов с помощью pip