VSCode中Python虚拟环境未生效的三大原因:解释器选择错误、终端未激活环境、路径配置异常。需正确命名环境文件夹(如.venv)、手动指定python可执行文件路径、启用终端自动激活,并注意远程开发和Jupyter kernel需单独配置。

VSCode 里 Python 代码没跑在你想要的虚拟环境里,不是插件坏了,而是解释器选错了、终端没激活、或路径写崩了——三者缺一不可。
Python: Select Interpreter 找不到 .venv 或 conda 环境
VSCode 默认只扫描项目根目录下叫 .venv、venv、env 的文件夹,且必须包含 pyvenv.cfg 和可执行的 python(macOS/Linux)或 python.exe(Windows)。.venv 是最稳妥的命名,Git 和 VSCode 都默认忽略它。
- 用
python -m venv .venv创建,别用pipenv或poetry env直接开项目——它们生成的结构 VSCode 不一定认 - conda 环境完全不被自动发现,除非你在系统终端里运行过
conda init zsh(zsh 用户)或conda init bash,然后重启 VSCode - 手动指定路径时,必须指向
python可执行文件,不是文件夹:比如./.venv/bin/python,不是./.venv - 路径里含空格或中文?Pylance 很可能解析失败,建议把项目挪到纯英文路径下
选对了解释器,终端里 pip install 还是装到全局
选解释器只是告诉编辑器“代码用哪个 Python 跑”,但集成终端默认不激活对应环境。所以 pip list 看到的还是系统包。
- 确认
python.terminal.activateEnvironment在.vscode/settings.json中为true(它默认是 true,但可能被用户级设置覆盖) - Windows PowerShell 用户需额外配
python.terminal.launchArgs:设为[".venv\Scripts\Activate.ps1"];macOS/Linux 用["-c", "source .venv/bin/activate"] - 更简单粗暴的办法:新开终端后,手动运行
source .venv/bin/activate(bash/zsh)或.venvScriptsctivate.bat(cmd) - 加个保险:
python.terminal.executeInFileDir设为true,避免终端启动路径不对导致 activate 失败
远程开发时虚拟环境切换失效
Remote-SSH 连上去后,Python: Select Interpreter 列表里看不到远程服务器上的 .venv,是因为 VSCode 本地进程根本没去远程扫描——它只扫本地文件系统。
立即学习“Python免费学习笔记(深入)”;
- 必须先通过 SSH 终端在远程创建好环境:
python3 -m venv ~/myproject/.venv - 然后在 VSCode 命令面板里选
Python: Select Interpreter→Enter interpreter path...→ 手动输入远程路径:/home/username/myproject/.venv/bin/python - 路径必须是远程服务器上的绝对路径,不能用
~,得展开成/home/username - 远程环境的
python.defaultInterpreterPath写进的是当前工作区的.vscode/settings.json,不是本地机器的配置
Jupyter Notebook kernel 和编辑器解释器不是一回事
右上角 kernel 下拉菜单显示的选项,和底部状态栏写的“Python 3.x”完全独立。改了解释器,Notebook kernel 不会自动跟着换。
- 新建或打开
.ipynb文件后,必须点右上角 kernel 下拉框,手动选带.venv字样的那个(比如Python 3.11.6 ('.venv': venv)) - 如果列表里没有,说明该环境还没注册为 kernel:在终端里激活
.venv后运行python -m ipykernel install --user --name myproject --display-name "Python (.venv)" - 验证是否真生效?别信状态栏或 kernel 名字,直接在 Notebook 里跑
import sys; sys.executable,输出路径必须指向.venv里的python
最常被忽略的点:Pylance 类型补全缓存旧环境信息,改完解释器或 settings.json 后不重启 VSCode,补全和 import 提示大概率还是错的。


















