sys.path
)..py
, он компилируется в байт-код (.pyc
или .pyo
) при первом импорте или если исходный файл новее, чем байт-код.sys.path
. Этот список обычно включает:
PYTHONPATH
(если она задана)..py
, .pyc
(скомпилированный байт-код), .pyo
(оптимизированный байт-код) или другие расширения, соответствующие модулям расширения (например, .so
или .dll
). Если модуль является пакетом, он ищет подкаталог с именем модуля и файлом __init__.py
внутри него..py
, Python компилирует его в байт-код, создавая файл .pyc
(или .pyo
, если используется опция -O
или -OO
). Этот процесс оптимизирован: если .pyc
файл уже существует и он новее, чем .py
файл, то компиляция пропускается.sys.modules
- словаре, хранящем все импортированные модули. Это делается для предотвращения повторной загрузки и выполнения одного и того же модуля при последующих импортах. Если модуль уже есть в sys.modules
, Python просто возвращает ссылку на существующий объект модуля, не выполняя поиск, компиляцию и выполнение заново.import module_name
) или через имена, явно импортированные с помощью from module_name import name1, name2
.Важные моменты:
sys.modules
- это глобальный словарь, который позволяет Python отслеживать уже импортированные модули и предотвращать повторную загрузку.sys.path
важен, так как Python ищет модуль в этих каталогах последовательно.importlib.reload(module)
, но это обычно не рекомендуется, так как может привести к непредсказуемому поведению, особенно если модуль используется в других частях программы.__init__.py
позволяет Python рассматривать каталог как пакет, содержащий модули и подпакеты.