首页 > 解决方案 > 以编程方式检查并禁用 IPython 自动重载扩展

问题描述

我有一个函数,它使用 Python包动态重新加载模块,当用户从 IPython 运行代码并加载扩展并打开自动重新加载(即)importlib时,会产生一些错误。我想做的是让我的代码检测用户是否正在运行 IPython,是否加载了扩展,并将其设置为自动重新加载。如果是这样,请禁用它,运行我的代码块,然后重新启用它。autoreload%autoreload 2

我相信我可以使用以下代码来检测我们是否在 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")

标签: pythonipythonipython-magic

解决方案


在查看 autoreload 源代码后,似乎以下内容应该有效

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

推荐阅读