Урок 5: Модули и пакеты в Python

Что такое модуль?

Модуль — это файл с кодом Python (обычно с расширением .py), содержащий функции, переменные и классы, которые можно переиспользовать в других программах.

Создание и подключение модуля

# В файле math_utils.py
def add(a, b):
    return a + b
# В другом файле
import math_utils
print(math_utils.add(2, 3))  # Выведет: 5

Сложные импорты из пакета

# В файле string_utils.py внутри пакета my_package
def shout(text):
    return text.upper() + "!!!"
# Основной файл
from my_package.string_utils import shout
print(shout("Привет"))  # Выведет: ПРИВЕТ!!!

Использование относительного импорта

Внутри самого пакета можно использовать относительный импорт:

# Внутри my_package/math_utils.py
from .string_utils import shout

def info():
    print(shout("Математические функции готовы"))

Точка . указывает на текущий пакет. Это полезно при работе с большими структурами.

Файл __init__.py в пакете

Если вы хотите сделать удобный доступ к модулям пакета, настройте __init__.py:

# Внутри __init__.py
from .math_utils import add
from .string_utils import shout
# Теперь можно просто написать:
from my_package import add, shout
print(add(1, 2))        # 3
print(shout("ура"))     # УРА!!!

Вложенные пакеты

Пакеты могут содержать другие пакеты. Пример структуры:

project/
└── utils/
    ├── __init__.py
    ├── math/
    │   ├── __init__.py
    │   └── algebra.py
    └── string/
        ├── __init__.py
        └── formatter.py

Импорт из вложенного пакета:

from utils.math.algebra import solve_quadratic

Импорт всего с помощью *

Можно разрешить импорт всех элементов с помощью *:

# В __init__.py
__all__ = ["add", "shout"]
from my_package import *
print(add(1, 2))
print(shout("hello"))

Но ⚠️ такой способ считается менее предпочтительным — он может "засорять" пространство имён и снижает читаемость кода.

Установка внешних пакетов

Для установки внешних библиотек используется pip:

pip install requests

Пример использования внешнего пакета

import requests

response = requests.get("https://api.github.com")
print(response.status_code)

Практика: напишите свой пакет

Создайте папку my_utils с файлами math_helpers.py и text_helpers.py. Объедините их в пакет и импортируйте в основной файл.

Домашнее задание 🏡

🔄 Перейти к задачам 🔙 Назад к списку уроков