You need to enable JavaScript to run this app. Jupyter Notebook/Python如何仅获取自定义注册魔法列表而非%lsmagic全量结果
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 03:06:03