Программная проверка и отключение расширения автоматической загрузки IPython

#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