Jupyter Notebook/Python如何仅获取自定义注册魔法列表而非%lsmagic全量结果
获取Jupyter自定义魔法指令的实现方案
核心思路
IPython 会将系统内置魔法、后续用户或第三方包注册的自定义魔法统一存储在内核的魔法管理器注册表中,我们只需过滤掉系统内置魔法的来源模块,即可得到仅自定义注册的魔法列表。
可直接运行的代码
在Jupyter单元格中执行以下代码,即可分别输出自定义行魔法、自定义单元格魔法:
# 获取当前Jupyter对应的IPython内核实例 ip = get_ipython() # 定义系统内置魔法所属的模块前缀,可根据环境按需扩展 builtin_module_prefix = ("IPython.", "ipykernel.") # 筛选自定义行魔法(即`%`开头的魔法) custom_line_magics = [ magic_name for magic_name, magic_func in ip.magics_manager.magics["line"].items() if not magic_func.__module__.startswith(builtin_module_prefix) ] # 筛选自定义单元格魔法(即`%%`开头的魔法) custom_cell_magics = [ magic_name for magic_name, magic_func in ip.magics_manager.magics["cell"].items() if not magic_func.__module__.startswith(builtin_module_prefix) ] # 打印结果 print("自定义行魔法列表:", custom_line_magics) print("自定义单元格魔法列表:", custom_cell_magics)
补充说明
- 若你的Jupyter发行版预装了其他系统级默认魔法,只需在
builtin_module_prefix元组中添加对应模块的前缀即可排除。 - 上述方法会同时捕获用户手动用
register_magic_function注册的魔法、以及第三方包加载后自动注册的魔法,完全符合“排除系统内置魔法”的需求。 - 若需要更精准的筛选,可提前在未加载任何第三方扩展的全新空白内核中导出所有内置魔法的集合,再与当前环境的魔法集合做差集:
# 提前在空白内核中导出内置魔法集合为builtin_magic_set,后续使用时差集即为自定义魔法 current_all_magics = set(ip.magics_manager.magics["line"].keys()) | set(ip.magics_manager.magics["cell"].keys()) custom_magics = current_all_magics - builtin_magic_set
内容的提问来源于stack exchange,提问作者veeresh patil
相关产品推荐
相关产品推荐

