Модули и пакеты
Разбейте растущую программу на файлы, которые можно переиспользовать, импортировать и распространять
.py. Пакет — это каталог модулей. Вместо одного огромного скрипта вы раскладываете связанный код по именованным файлам и подтягиваете ровно то, что нужно, в другие файлы с помощью import. Именно так устроен любой реальный проект на Python — от инструмента в 200 строк до фреймворка вроде Django.
- объяснить, что такое модуль, и написать свой собственный,
- использовать все формы импорта (
import,from ... import,as) и понимать их компромиссы, - описать, как Python находит модуль (
sys.path) и что такое__pycache__, - правильно применять защиту
if __name__ == "__main__":, - собрать пакет с
__init__.pyи выбрать между абсолютным и относительным импортом.
1. Что такое модуль на самом деле?
В начальном курсе вы писали import math и import random — модули, которые поставляются вместе с Python. Секрет приятно прост: модуль — это просто файл с кодом на Python. Любой файл, сохранённый с расширением .py, уже является модулем, а имя файла (без .py) — это имя модуля.
Допустим, вы пишете geometry.py:
# geometry.py
PI = 3.14159
def circle_area(radius):
return PI * radius * radius
def rectangle_area(width, height):
return width * height
Из другого файла в той же папке вы теперь можете переиспользовать этот код:
# main.py
import geometry
print(geometry.circle_area(2))
print(geometry.PI)
Вывод:
12.56636
3.14159
Имена, определённые на верхнем уровне geometry.py — PI, circle_area, rectangle_area — становятся атрибутами объекта модуля, к которым обращаются через точку: geometry.circle_area. Модули превращают папку с файлами в набор инструментов, из которого можно выбирать.