离线安装却报protocol timeout,说明sublime仍在联网——常见原因包括插件含自动更新逻辑、依赖未手动安装、package control残留文件夹、配置含远程url或ssl初始化失败。

离线安装外部依赖时不会触发协议超时——这个报错根本不是离线场景该出现的,说明你其实没真正离线,Sublime 还在试图联网请求某些资源。
为什么“离线安装”却报 protocol timeout?
Protocol timeout(比如 URLError: <urlopen error></urlopen> 或控制台显示 timeout)只会在 Sublime 尝试发起 HTTP/HTTPS 请求但连接失败时发生。如果你声称“离线安装”,却看到这个错误,大概率是以下某一种情况:
- 你把插件 ZIP 解压后放进
Packages/,但插件本身含自动更新逻辑(如AutoFileName、GitGutter),启动时仍会尝试连 GitHub 或 Git 仓库校验版本 - 插件依赖另一个未手动安装的包(比如
BracketHighlighter依赖PackageResourceViewer),而 Sublime 在加载时自动触发依赖解析请求 - 你删了
Installed Packages/Package Control.sublime-package,但Packages/Package Control/文件夹还残留着,导致它启动时仍尝试联网同步 channel - 插件配置里写了远程 URL(如某些主题或语言语法包的
settings中含"syntax_url"字段),加载时主动 fetch
如何确认并切断所有联网行为?
别只看自己有没有开网络,要让 Sublime 主动放弃所有外联尝试:
- 打开
Preferences → Package Settings → Package Control → Settings – User,确保整个配置里没有"channels"、"http_proxy"、"https_proxy"字段;如有,整行删掉或注释掉 - 运行
sublime.packages_path()和sublime.installed_packages_path()确认两个路径,然后手动清空Installed Packages/目录下所有.sublime-package文件(尤其是Package Control.sublime-package) - 检查
Packages/下是否存在名为Package Control的文件夹,有就整个删掉——它比.sublime-package优先级高,且自带联网逻辑 - 重启 Sublime 后,在控制台执行
import urllib.request; urllib.request.urlopen('https://example.com'),如果报错URLError才算真正断网成功;不报错说明系统代理或 hosts 仍在生效
手动安装时哪些依赖必须一并放入 Packages?
很多插件文档不写依赖,但实际运行时会 import 失败。常见需手动配齐的依赖有:
-
mdpopups:几乎所有带弹窗 UI 的插件(如SublimeLinter、DocBlockr)都依赖它;GitHub 仓库名就是facelessuser/mdpopups,解压重命名为mdpopups放入Packages/ -
python-jinja2:用于模板渲染的插件(如Emmet某些扩展);注意不是 PyPI 上那个,而是sublimetext-plugins/python-jinja2,命名必须为python-jinja2 -
pyyaml:配置类插件常用(如ProjectSpecificSettings);同样要找 ST 专用版,不是 pip 安装的版本 - 若插件 README 提到 “requires ST3+” 却你在 ST4 上用,可能需额外补
backports.functools_lru_cache等兼容层——这类通常以.py文件形式直接丢进插件文件夹内
Protocol timeout 报错里藏着的隐藏陷阱
最常被忽略的是证书链和系统时间——哪怕你已离线,Sublime 启动时仍会初始化 SSL 上下文。如果系统时间误差超过 5 分钟,或 cacert.pem 过期,它会在尝试任何 HTTPS 请求前就卡死并报 timeout(而非 CERTIFICATE_VERIFY_FAILED)。此时:
- 先校准系统时间(精确到秒),尤其注意 BIOS 时间是否正确
- 去
Packages/Package Control/certifi/找cacert.pem,若目录不存在,手动建好再放一份最新版(从curl.se/ca-bundle下载) - 不要设
"ssl_verification": false——这会让某些插件跳过安全校验后反而因签名失败崩溃
真正离线环境里,Sublime 不该发出任何网络请求;一旦看到 protocol timeout,说明还有某个组件在暗中伸手,得一层层剥开找那个没被你注意到的联网点。











