Хоча надані відповіді працюють для певного модуля, вони не перезавантажать підмодулі, як зазначено в цій відповіді :
Якщо модуль імпортує об’єкти з іншого модуля за допомогою from ... import ..., виклик reload()іншого модуля не переосмислює об'єкти, імпортовані з нього - один із способів цього полягає у повторному виконанні оператора from, інший - використанні importта кваліфікованих імен ( module.*name*) замість цього.
Однак якщо використовувати __all__змінну для визначення загальнодоступного API, можна автоматично перезавантажити всі загальнодоступні модулі:
# Python >= 3.5
import importlib
import types
def walk_reload(module: types.ModuleType) -> None:
if hasattr(module, "__all__"):
for submodule_name in module.__all__:
walk_reload(getattr(module, submodule_name))
importlib.reload(module)
walk_reload(my_module)
Застереження, зазначені в попередній відповіді, все ще дійсні. Зокрема, на зміну підмодулю, який не є частиною загальнодоступного API, як описано __all__змінною, перезавантаження за допомогою цієї функції не вплине. Аналогічно, видалення елемента з підмодуля не буде відображено перезавантаженням.