← Маршрут ML-инженерии

Урок · 2 мин чтения · упражнения и самопроверка

Модули и зависимости

После урока: объяснить импорт и выполнить упражнение «Разделить скрипт на пакет», обосновав выбранный подход..

Перед началом

Граница файла

Модуль — файл Python, который можно импортировать. Пусть stats.py содержит функцию подсчёта, а main.py читает ввод и вызывает её. Команда from stats import count_even делает имя функции доступным в main. При первом импорте выполняются инструкции верхнего уровня stats.py.

Чтобы демонстрационный запуск не сработал при импорте, поместите его под условие if __name__ == "__main__":. Когда файл запускается напрямую, условие истинно; при импорте — нет. Вычисляющие функции и определения остаются доступными в обоих случаях.

Пакет и зависимости

Для первого локального пакета создайте каталог study с __init__.py, stats.py и __main__.py. Команда python -m study запускает __main__.py. Импорт внутри пакета можно записать явно: from .stats import count_even. Сохраните команды запуска в README, чтобы они не зависели от случайно выбранной папки.

Внешние зависимости устанавливайте в отдельное окружение и фиксируйте в конфигурации проекта. Импорт стандартных json и csv не требует установки через pip. Не называйте свой файл json.py или random.py: он может затенить одноимённый модуль стандартной библиотеки.

Проверка структуры

Импорт stats не должен читать stdin, создавать отчёт или отправлять запрос. Это делает тесты безопасными и воспроизводимыми. На первом этапе достаточно двух файлов: не добавляйте слои и пакеты без ясной ответственности.

В примере определения можно импортировать без побочного вывода. При прямом запуске вызывается main и выводится результат.

Пошаговый пример

python
def count_even(values):
    return sum(1 for x in values if x % 2 == 0)

def main():
    print(count_even([1, 2, 4]))

if __name__ == "__main__":
    main()

Ожидаемый вывод

text
2

При прямом запуске main вызывается; при импорте остаётся только определение функций.

Сделайте самостоятельно

Разделите count_even и чтение ввода по двум файлам. Проверьте, что import stats ничего не выводит.

Ответ и критерии проверки

Функция находится в stats.py. main.py импортирует её, читает список и печатает результат внутри main. Запуск main защищён условием __name__ == "__main__".

Проверьте понимание

1. Нужно ли устанавливать json через pip?
2. Для чего проверка __name__ == "__main__"?