anaconda插件因使用废弃的jedi 0.17引擎导致sublime主进程rss内存持续上涨,根本原因是ast节点创建后未释放、异常状态下进入“重试-失败-再分配”循环,以及多编码缓存不清理等问题;临时缓解可关闭lint和限制补全,彻底解决应替换为pylsp。

Sublime Text 中 Anaconda 插件本身不会造成系统级内存泄漏,但它的旧版 jedi 引擎(0.17)在解析复杂类型或现代语法时会反复创建 AST 节点却未及时释放,导致 Sublime 进程 RSS 内存持续上涨——这不是 Python 进程泄漏,而是 Sublime 主进程的内存被插件长期占用。
为什么 Anaconda 插件会让 Sublime 内存越用越多
根本原因不是你代码写错了,而是插件底层用了已废弃的 jedi 0.17:
-
AttributeError: 'CompiledNode' object has no attribute 'infer'报错后,jedi 内部状态紊乱,后续补全请求仍不断分配新节点,但旧节点无法被 GC 回收 - f-string、
list[int]、int | str等语法触发 jedi 解析失败路径,进入“重试-失败-再分配”循环 - Windows 下
UnicodeDecodeError频发时,插件会缓存原始字节流并尝试多编码重试,缓存不清理 - macOS M1 上即使填对
/opt/homebrew/bin/python3,插件仍卡在 “Loading…” —— 实际是 jedi 启动后挂起,线程未终止,内存持续占位
怎么确认是 Anaconda 导致的内存增长
别直接看任务管理器总内存,要定位到 Sublime 的具体行为:
- 打开 Sublime 控制台(
Ctrl+`),输入sublime.active_window().active_view().settings().get("syntax")确认当前是 Python 文件 - 执行
view.run_command("anaconda_restart_server"),观察 Sublime 进程 RSS 是否明显下降(下降 >50MB 可判定为插件缓存堆积) - 关闭所有 .py 文件,再打开一个空的
test.py,输入def f(x: list[int]) -> None:,敲回车后立即看控制台是否刷出jedi.api.environment相关错误 —— 有即代表 jedi 已进入异常状态 - Linux/macOS 下可用
ps -o pid,rss,comm -p $(pgrep -f "subl|sublime")每隔 30 秒跑一次,连续 5 分钟,若 RSS 稳定上涨且无文件操作,基本锁定为插件问题
临时缓解:禁用 lint + 限制补全范围
如果你必须继续用 Anaconda(比如维护老项目),不要重启编辑器,先压住内存增长:
- 在
Preferences → Package Settings → Anaconda → Settings – User中设:"anaconda_linting": false(关 lint 能砍掉 60% 内存压力) - 加
"limit_completions_to_prefix": true,避免 jedi 对整个模块做全量推导 - 删掉
"complete_all_chars": true,它会让 jedi 对每个字符都触发 infer,极易卡死 - 确保
"suppress_word_completions": true和"suppress_explicit_completions": true已启用,防止 Sublime 原生补全和 jedi 双重加载
真正解决:换 pylsp,不是“升级”而是替换
强行给 Anaconda 打补丁没意义——jedi 0.17 的内存模型和 LSP 协议不兼容,修复成本远高于迁移。直接切 pylsp:
- 卸载 Anaconda:
Package Control → Remove Package → Anaconda - 装
SublimeLinter和SublimeLinter-pylsp(不是 pyls) - 终端运行:
pip install --user python-lsp-server[all](带[all]才含 jedi-language-server,比纯 pylsp 更稳) - 不用配
python_interpreter:pylsp 自动读取.venv/pyvenv.cfg或pyproject.toml中的 Python 版本 - 如果项目用了 conda,只需在根目录放
. pylsp文件,内容为{"plugins": {"jedi": {"enabled": true}},不用改任何路径
换完后,Sublime 底部状态栏显示 pylsp 且补全响应时间 ≤200ms,就说明内存不再被无效节点拖累——这不是功能降级,是把解析逻辑从 Sublime 进程里彻底移出去了。











