Python Glossary English

все Python 3Модули и импортконструкция

import / from … import

импорт

Подключает модуль: import m даёт имя m, from m import x — имя x, as переименовывает. Точка в начале (from . import x) — импорт относительно своего пакета.

Синтаксис

import module [as name]
from module import name [as alias], …
from module import *
from . import sibling
from ..pkg import name

Модуль выполняется один раз — при первом импорте — и кэшируется в sys.modules: повторный import его не перечитывает, поэтому правка файла в уже запущенной программе не видна. from m import x копирует ссылку в момент импорта: если потом присвоить m.x новое значение, ваш x останется старым. from m import * берёт имена из __all__, а без него — все имена без подчёркивания в начале. При циклическом импорте второй модуль получает первый недовыполненным, и from a import x падает с ImportError «partially initialized module». Относительный импорт работает только внутри пакета: в файле, запущенном напрямую (python file.py), он падает — запускайте python -m пакет.модуль.

Примеры

import math
from math import pi
math.pi = 3  # переприсвоили имя в модуле
print(math.pi)  # → 3
print(pi)  # → 3.141592653589793 — у нас осталась старая ссылка
import sys
sys.path.insert(0, '.')  # искать модули и в текущем каталоге
with open('greet.py', 'w', encoding='utf-8') as f:
    f.write("print('модуль выполняется')\n__all__ = ['hello']\ndef hello(): return 'hi'\ndef _hidden(): pass\n")
import greet  # → модуль выполняется
import greet  # повторно не выполняется: модуль уже в sys.modules
print('greet' in sys.modules)  # → True
from greet import *
print(hello())  # → hi
print('_hidden' in dir())  # → False
# файл запущен напрямую, а не как часть пакета
from . import helper  # → ImportError: attempted relative import with no known parent package

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности