插件冲突导致“Unable to create directory”或卡在“Loading Packages”,主因是多插件竞争写入同名目录;需临时禁用第三方插件、逐个启用定位冲突源,并检查插件中os.makedirs()等调用是否缺少exist_ok=True或异常捕获。

插件冲突时 Package Control 报错“Unable to create directory”或卡在“Loading Packages”
这不是权限问题,而是多个插件同时尝试写入 Packages/ 下同名子目录(比如都试图创建 Python/ 或 Default/),导致文件系统锁竞争。Sublime 启动时按字母序加载插件,但初始化逻辑不同步,尤其当某个插件在 plugin_loaded() 里直接调用 os.makedirs() 而不加异常捕获时就会崩。
实操建议:
- 临时禁用所有第三方插件:重命名
Packages/User/外的非官方目录(如Packages/Anaconda/、Packages/BracketHighlighter/),只留Package Control.sublime-package和Default/、Phoenix/(如有)等内置包 - 逐个启用:重启 Sublime,用
Ctrl+Shift+P→Package Control: Enable Package挨个试,触发报错即定位冲突源 - 检查插件是否硬编码路径:打开插件的
.py文件(解压.sublime-package或查 GitHub),搜索os.makedirs(、shutil.copy、open(..., 'w'),确认是否缺少exist_ok=True或try/except OSError
启动后反复弹出 ImportError: No module named 'yaml' 或类似第三方依赖缺失
Sublime 的 Python 环境是嵌入式(3.3/3.8/4.0 因版本而异),不共享系统 pip,所有依赖必须打包进插件或通过 sublime_lib / importlib_resources 动态加载。直接 import yaml 必报错,除非插件自带 lib/yaml.py 或声明了 dependencies。
实操建议:
- 别手动 pip install:在 Sublime 控制台执行
import sys; print(sys.path),你会发现没有site-packages,硬塞进去也没用 - 优先选带 vendor 的插件:比如
YAMLNav自带lib/pyyaml,而老版YAMLLint依赖外部二进制,容易挂 - 替换为纯 Python 实现:例如用
ruamel.yaml的单文件版(ruamel_yaml.py)替代原生yaml,重命名后放进插件lib/并改 import 路径
修改插件后重启无效,plugin_loaded() 根本没被调用
Sublime 缓存了插件的字节码(.pyc)和模块哈希,且对 __init__.py 有特殊处理——如果插件目录下存在空的或残缺的 __init__.py,整个包会被跳过加载,控制台也不报错。
实操建议:
- 删干净缓存:关掉 Sublime,删除
Cache/下对应插件名的文件夹(如Cache/Anaconda/),以及Packages/下同名目录里的所有.pyc和__pycache__/ - 检查
__init__.py:确保它存在且非空(哪怕只写__all__ = []),否则 Sublime 认为这不是合法包 - 强制重载:在控制台输入
sublime_plugin.reload_plugin('YourPluginName')(注意不含.py后缀),比重启更快验证改动
插件功能正常但 CPU 占用持续 30%+,subl 进程不释放内存
根本原因是插件在 on_modified_async() 或定时器里做了未节流的同步 I/O,比如每次按键都读整个文件、调用外部 shell 命令、或反复解析大 JSON。Sublime 的事件循环不阻塞,但线程池会堆积任务。
实操建议:
- 用
sublime.set_timeout_async()替代裸线程:避免阻塞 UI,也便于 Sublime 统一调度 - 加防抖:对高频事件(如
on_modified),用sublime.set_timeout(..., 200)延迟执行,取消前序定时器 - 限制资源:读文件加
max_size=1024*1024判断,外部命令加timeout=3参数,解析前先if len(text)

















