#python #ipython #ipython-magic
#python #ipython #ipython-магия
Вопрос:
У меня есть функция, которая использует importlib
пакет Python для динамической перезагрузки модулей, которая генерирует некоторые ошибки, когда пользователь запускает код из IPython и загружает autoreload
расширение и включает автоматическую перезагрузку (т. Е. %autoreload 2
). Что я хотел бы сделать, так это чтобы мой код определял, запущен ли пользователь IPython, загружено ли расширение и настроено ли оно на автоматическую перезагрузку. Если это так, отключите его, запустите мой блок кода, затем снова включите его.
Я полагаю, что могу использовать следующий код, чтобы определить, находимся ли мы в IPython, и запустить волшебные функции, но я не могу понять, как программно проверить, autoreload
было ли загружено и %autoreload 2
установлено ли.
from IPython import get_ipython
ipy = get_ipython()
if not ipy is None:
# Need to check for %autoreload 2 here
ipy.magic("%autoreload 0")
# Run some code
ipy.magic("%autoreload 2")
Ответ №1:
После просмотра исходного кода автоматической загрузки выясняется, что должно сработать следующее
from IPython import get_ipython
ipy = get_ipython()
if not ipy is None:
if 'autoreload' in sys.modules:
check_all = ipy.magics_manager.magics['line']['autoreload'].__self__._reloader.check_all
enabled = ipy.magics_manager.magics['line']['autoreload'].__self__._reloader.enabled
parameter = 0
if check_all is False and enabled is True:
parameter = 1
elif check_all is True and enabled is True:
parameter = 2