Python Glossary English

все Python 3sysпонятие

sys.modules

модули

Словарь всех загруженных модулей {имя: module}. Кэш импортов Python. Можно удалить модуль для перезагрузки.

Синтаксис

sys.modules  # dict[str, ModuleType]

Именно из-за этого кэша тело модуля выполняется ровно один раз: повторный import в той же сессии не увидит правок в файле. Но удаление ключа из sys.modules модуль не выгружает — старые классы и объекты продолжают жить в уже созданных ссылках, и после нового импорта isinstance начнёт неожиданно возвращать False. Для перезагрузки берите importlib.reload(), а надёжнее всего — просто перезапустить процесс.

Примеры

import sys
import os
print('os' in sys.modules)  # → True
print(type(sys.modules['os']))  # → <class 'module'>
print(len(sys.modules))  # → кол-во загруженных модулей
del sys.modules['os']  # убрали из кэша — сам модуль из памяти не выгружен
import os as os2
print(os2 is os)  # → False — тело модуля выполнено заново, старый объект жив
import sys
import json
first = sys.modules['json']
import json  # повторный import берёт модуль из кэша
print(sys.modules['json'] is first)  # → True — тело модуля не выполнялось заново

См. также

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