Модуль — это один файл .py; пакет — это каталог модулей. Импорты позволяют использовать код из других модулей, организуя программу на переиспользуемые части.
Модули и импортирование
(): a + b
PI =
# main.py — different ways to import
import math_utils # import the whole module
math_utils.add(2, 3) # access via the module name
from math_utils import add, PI # import specific names
add(2, 3) # use directly
from math_utils import add as plus # import with an alias
import numpy as np # common aliasing convention
mypackage/
__init__.py ← marks it as a package (can be empty)
module_a.py
subpackage/
__init__.py
module_b.py
from mypackage.module_a import something
from mypackage.subpackage.module_b import other
Файл __init__.py помечает каталог как пакет (и может запустить код инициализации пакета или определить, что экспортирует from package import *).
if __name__ == "__main__"def main():
print("running as a script")
if __name__ == "__main__": # True only when run directly, not when imported
main()
Это позволяет файлу действовать как импортируемый модуль и как запускаемый скрипт — код под ней запускается только при прямом выполнении файла (python file.py), а не при импорте. Почти универсальная идиома Python.
import sys
sys.path # the list of directories Python searches for imports
# includes: the current directory, installed packages (site-packages), stdlib
import os, json, datetime # standard library — "batteries included"
import requests # third-party — installed via pip from PyPI
Модули и пакеты — это то, как вы организуете код Python в переиспользуемые, легко поддерживаемые единицы, а не в один гигантский файл — фундаментально для любого нетривиального проекта.
Понимание стилей импорта, структуры пакета (__init__.py), идиомы if __name__ == "__main__" (двойное поведение скрипт/модуль) и того, как Python находит модули (sys.path), необходимо для структурирования проектов, переиспользования кода и использования обширной стандартной библиотеки и экосистемы PyPI.
Ошибки импорта и путаница со структурой — это общие ранние препятствия, которые решает это знание.