sublime text终端无法自动激活虚拟环境,因默认启动干净shell不继承外部激活状态;需用terminus插件在设置中配置含source venv/bin/activate或显式path的shell_cmd命令,并重启终端标签页验证。

Sublime Text 本身不提供“在内置终端里自动激活虚拟环境”的功能,必须靠插件(如 Terminus)手动配置 shell 启动命令,否则终端里 python 或 pip 仍走系统默认路径。
为什么直接打开 Terminal 插件进不去 venv?
Sublime 的终端(哪怕用了 Terminus 或 SublimeREPL)默认启动的是干净的 shell,不会继承你在外部终端里执行过的 source venv/bin/activate 或 conda activate myenv。它只认系统 PATH 和 shell 初始化脚本(如 ~/.zshrc),而虚拟环境激活本质是临时修改 PATH 和设置环境变量——这些不会自动带入 Sublime 终端。
- 现象:终端里运行
which python返回/usr/bin/python或/opt/homebrew/bin/python,不是你项目里的venv/bin/python - 根本原因:没显式执行激活命令,也没把虚拟环境的
bin目录加进 PATH - Conda 用户更要注意:
conda activate是 conda 自己的 shell function,普通 shell 进程里根本不存在这个命令
用 Terminus 插件启动带 venv 的终端(推荐)
Terminus 是目前最稳定、可配置性最强的终端插件,支持自定义 shell 启动命令。关键不是“激活”,而是让 shell 启动时就处于目标环境上下文中。
- 先确认已安装 Terminus:通过
Ctrl+Shift+P→Package Control: Install Package→ 搜Terminus安装 - 打开命令面板
Ctrl+Shift+P,输入Terminus: Open Default Shell in Panel,先试一下基础终端是否正常 - 编辑 Terminus 配置:菜单
Preferences → Package Settings → Terminus → Settings,在右侧用户设置中添加:
{
"shell_configs": [
{
"name": "Python venv terminal",
"cmd": ["zsh", "-i", "-c", "cd /path/to/your/project && source venv/bin/activate && exec zsh -i"],
"env": {}
}
]
}
-
cmd中的-i表示交互式 shell,exec zsh -i确保后续命令能用 tab 补全、历史记录等 - Windows 用户把
zsh换成cmd或powershell,激活命令换成venv\Scripts\activate.bat && cmd - 路径必须写绝对路径;
venv名称要和你项目里的一致(比如叫.venv就不能写venv)
Conda 环境怎么配进 Terminus?别用 conda activate
Conda 的 activate 在非 conda 初始化的 shell 里不可用。正确做法是绕过 activation script,直接调用环境里 Python 并设置 CONDA_DEFAULT_ENV。
- 查路径:先在终端里
conda activate myenv && which python,得到类似/opt/anaconda3/envs/myenv/bin/python - 在 Terminus 设置里新增一个 config,
cmd改为:
["zsh", "-i", "-c", "cd /path/to/project && export CONDA_DEFAULT_ENV=myenv && export PATH='/opt/anaconda3/envs/myenv/bin:$PATH' && exec zsh -i"]
- 这样
python、pip、ipython全部指向该环境,且conda list也能识别当前环境 - 避免写
conda run -n myenv zsh:它会开新进程,退出后状态不保留,不适合日常终端使用
验证终端是否真进了 venv
配完别急着写代码,先在 Terminus 里跑三行命令确认:
-
which python→ 应该输出/path/to/your/project/venv/bin/python(或 conda env 路径) -
python -c "import sys; print(sys.executable)"→ 必须和上面一致 -
python -c "import django; print(django.__version__)"→ 如果项目装了django却报ModuleNotFoundError,说明 PATH 没生效或包没装对环境
最容易被忽略的是:Terminus 配置改了之后,旧的终端标签页不会自动更新,必须关掉重开,或者用 Terminus: Open New Tab 并手动选你刚配的 shell config。另外,macOS 上如果用了 zsh + oh-my-zsh,某些插件会覆盖 PATH,得检查 ~/.zshrc 末尾有没有意外的 export PATH=... 覆盖行为。











