03. Создание собственных модулей

Создание собственных модулей

Описание: В этом уроке вы научитесь разбивать код на отдельные файлы, создавать собственные модули, использовать __init__.py и строить структуру реального Python-проекта. Это важный шаг к написанию крупных программ.

1. Что такое модуль

Модуль — это любой Python-файл с расширением [.py].

Например, файл math_utils.py:


# math_utils.py

def add(a, b): return a + b

def multiply(a, b): return a * b

Теперь вы можете использовать этот файл в другом Python-скрипте:


# main.py

import math_utils

print(math_utils.add(2, 3)) # 5 print(math_utils.multiply(4, 5)) # 20

  • Имя файла становится именем модуля.
  • import подключает код и делает функции доступными.

2. Импорт отдельных элементов

Если вам нужно импортировать только одну функцию:

from math_utils import add
print(add(10, 20))  # 30

Можно переименовать при импорте:


from math_utils import multiply as m
print(m(2, 3))  # 6

Совет: избегайте from module import * — это загрязняет пространство имён и мешает понимать, откуда взялась функция.

3. Структура проекта

Когда проект растёт, его код нужно организовывать по папкам.

project/
│
├── main.py
├── utils/
│   ├── __init__.py
│   ├── math_utils.py
│   └── string_utils.py

Теперь можно импортировать так:


from utils.math_utils import add
from utils.string_utils import capitalize_text

4. Зачем нужен __init__.py

Файл __init__.py превращает папку в модуль (пакет). Без него Python не узнает, что это «пакет».

# utils/__init__.py
print('Модуль utils загружен!')

Теперь при импорте

import utils
выполнится содержимое этого файла.

5. Пример: мини-проект «инструменты разработчика»

Создадим структуру:

dev_tools/
│
├── __init__.py
├── math_ops.py
├── text_ops.py
└── main.py

math_ops.py


def factorial(n):
    if n == 0:
        return 1
    return n * factorial(n - 1)

text_ops.py


def word_count(text):
    return len(text.split())

main.py


from math_ops import factorial
from text_ops import word_count

print('Факториал 5 =', factorial(5)) print('Количество слов =', word_count('Python makes coding fun!'))

6. Импорт из родительской папки

Если у вас вложенные модули, можно использовать относительный импорт:

from .math_ops import factorial

Точка . означает «из текущего пакета», а .. — «на уровень выше».

7. Как Python ищет модули

При импорте Python ищет модуль в:
  • Текущей директории проекта.
  • Системной переменной PYTHONPATH.
  • Стандартной библиотеке Python.

Можно посмотреть пути поиска:


import sys
print(sys.path)

8. Установка собственных модулей как пакетов

Если вы хотите, чтобы ваш модуль можно было установить через pip, добавьте файл setup.py.

from setuptools import setup, find_packages

setup( name='mytools', version='1.0.0', packages=find_packages(), install_requires=[], )

После этого можно установить ваш пакет локально:


pip install .

9. Практическое упражнение

Создайте пакет helpers со следующими файлами:
  • math_help.py — функции для вычислений (сумма, разность, среднее).
  • string_help.py — функции для работы со строками.
  • __init__.py — объединяет их и выводит приветствие при импорте.

Пример использования:


from helpers import math_help, string_help

print(math_help.average([1,2,3,4,5])) print(string_help.uppercase_words('python is cool'))

Итоги урока

Теперь вы умеете:
  • Создавать собственные модули и пакеты.
  • Использовать __init__.py для управления импортами.
  • Структурировать проекты по папкам.
  • Готовить модули для установки через pip.