VS Code中IPython脚本使用# %%运行单元格时出现会话/行号不唯一错误及代码冻结问题求助
解决VS Code中IPython单元格运行时的Session历史冲突问题
我太懂这种随机报错又冻结的痛苦了!之前在VS Code里用# %%分割单元格跑Python脚本时,也频繁碰到这个Session/line number was not unique in database的错误,折腾了好一阵才找到几个靠谱的解决办法,你可以挨个试试:
1. 清理IPython历史数据库(最常用的解决办法)
这个错误大概率是IPython的历史记录数据库损坏或者冲突了。你可以直接找到这个数据库文件并删除/重命名:
- Windows路径:
%USERPROFILE%\.ipython\profile_default\history.sqlite - macOS/Linux路径:
~/.ipython/profile_default/history.sqlite
删掉之后重启VS Code,再重新运行单元格,IPython会自动生成新的干净数据库,大概率能解决问题。
2. 临时禁用IPython历史记录
如果清理数据库后还是偶尔出现,可以直接禁用历史记录功能,避免数据库冲突:
- 方法一:在VS Code设置里搜索
Python > Data Science: IPython Kernel Args,添加参数--no-history - 方法二:在脚本的第一个单元格开头加入这段代码:
from IPython import get_ipython ip = get_ipython() ip.run_line_magic('config', 'HistoryManager.enabled = False')
3. 更新所有相关组件
旧版本的VS Code、Python扩展或者Jupyter扩展可能存在兼容性bug,导致Session冲突:
- 把VS Code升级到最新版本
- 在扩展商店里更新Python和Jupyter扩展
- 同时确保你的IPython是最新版:
pip install --upgrade ipython
4. 切换IPython内核版本
有时候是特定版本的IPython有问题,你可以试试切换到一个稳定版本,比如:
# 安装指定稳定版 pip install ipython==8.12.0
安装完成后重启VS Code,选择新的内核运行脚本。
5. 检查单元格代码的隐性冲突
如果你的脚本里有多个单元格操作同一个全局变量,或者用到了多线程/多进程代码,可能会干扰IPython的Session追踪:
- 尝试把复杂的单元格拆分成更小的单元,减少全局变量的跨单元格使用
- 可以在每个单元格开头加入
%reset -f(注意:会清空所有全局变量,谨慎使用)来隔离单元格环境
如果以上方法都不行,你可以试试创建一个全新的VS Code工作区,把脚本复制进去再运行,排除旧工作区设置的干扰。
内容的提问来源于stack exchange,提问作者Carlos Mougan
相关产品推荐
相关产品推荐

