如何在VSCode中调试Jupyter Notebook调用的自定义模块?
如何在VSCode中调试Jupyter Notebook调用的自定义模块
当然可以实现,按以下步骤调整配置和操作即可触发自定义模块中的断点:
1. 解决模块缓存问题
Python会缓存已导入的模块,修改模块后如果不重新加载,调试的还是旧版本代码:
- 在Notebook单元格中执行
import importlib; importlib.reload(你的模块名),确保加载最新的模块代码。 - 确认模块所在路径已被VSCode识别:要么把模块放在当前工作目录,要么通过
import sys; sys.path.append("模块所在目录路径")添加路径。
2. 修改VSCode调试配置
默认调试配置只会追踪Notebook单元格代码,需要调整launch.json:
- 打开
.vscode/launch.json(没有则手动创建),添加如下配置:{ "version": "0.2.0", "configurations": [ { "name": "Python: Jupyter Notebook", "type": "python", "request": "launch", "program": "${file}", "justMyCode": false, "env": {"PYDEVD_WARN_EVALUATION_TIMEOUT": "1000"} } ] } justMyCode: false是关键:这个参数会让调试器进入所有用户编写的代码(包括自定义模块),而不是只局限于Notebook单元格。
3. 正确启动调试流程
- 不要直接点击Notebook的"运行单元格"按钮,而是在VSCode左侧调试面板中,选择刚才创建的
Python: Jupyter Notebook配置,按下F5启动调试。 - 调试器启动后,运行调用自定义模块函数的Notebook单元格,此时模块中的断点会正常触发,调试器会暂停并展示当前变量数据。
4. 额外排查点
- 确认VSCode的Python解释器和Notebook使用的内核一致(右下角状态栏可切换),避免因环境不一致找不到模块源码。
- 断点要设置在模块的可执行代码行上,比如函数内部的有效代码,不要放在空行、注释或函数定义的行上。
- 若仍未触发,尝试重启VSCode和Jupyter内核,清除缓存状态。
内容的提问来源于stack exchange,提问作者Владислав Черкасов
相关产品推荐
相关产品推荐

