根本原因是vscode未正确使用虚拟环境中的python解释器,而是调用了未安装django的系统python;必须通过ctrl+shift+p选择完整路径如./venv/scripts/python.exe或./venv/bin/python,并验证右下角状态栏及终端中which python输出一致。

VSCode 启动 Django 项目时报 Couldn't import Django.,根本原因不是插件没装、也不是 launch.json 写错了,而是 VSCode 没真正用上虚拟环境里的 Python 解释器——它可能在调用系统全局的 Python,而那个环境里压根没装 Django。
确认解释器是否真的指向虚拟环境
这是最常被跳过的一步。很多人点过 Python: Select Interpreter,看到路径里有 venv 就以为搞定了,但实际选中的可能是同名但不同层级的目录(比如父目录下的另一个 venv),或者路径末尾漏掉了 /Scripts/python.exe(Windows)或 /bin/python(Linux/macOS)。
- 按
Ctrl+Shift+P输入Python: Select Interpreter,回车 - 在弹出列表中,**必须看到完整路径**,例如:
G:\python\django\mysite\env\Scripts\python.exe(Windows)/home/user/mysite/env/bin/python(Linux/macOS) - 如果只看到
Python 3.12 (venv)这类模糊描述,点进去看右下角状态栏——鼠标悬停,会显示真实路径;不匹配就重新选 - 选完后,打开集成终端(
Ctrl+`),检查是否自动激活了虚拟环境:
Windows 下应看到类似(env) PS G:\python\django\mysite>的提示;
Linux/macOS 应看到(env) $前缀
launch.json 中的 django 配置依赖解释器有效性
VSCode 的 Django 调试配置模板(通过“创建 launch.json → Python → Django”生成)本身不报错,但它只是把 python manage.py runserver 包裹进调试流程。一旦解释器不对,它连 import django 都失败,自然卡在启动前。
- 生成的
launch.json里关键字段是"python"和"module",但这两项都**不替代解释器选择**;它们只是告诉调试器“用哪个 Python 执行哪个模块”,前提是那个 Python 已被正确指定 - 不要手动改
"python"字段为绝对路径——这容易写错且不可移植;坚持用解释器选择机制 - 如果仍报错,临时在
launch.json里加一行:"env": {"PYTHONPATH": "${workspaceFolder}"},避免因工作区路径未纳入导致 Django 找不到manage.py所在包
PowerShell 策略阻止 venv 激活(仅 Windows)
即使解释器选对了,Windows 用户还可能遇到终端里 Activate.ps1 被拒绝执行,导致你手动敲 env\Scripts\Activate.ps1 失败,进而误以为 VSCode 没激活环境——其实 VSCode 的集成终端在解释器选对后,是绕过 PowerShell 脚本策略直接调用 python.exe 的,所以这个错误不影响调试,但会干扰你手动验证。
- 运行
get-ExecutionPolicy,若输出Restricted,说明策略禁止所有脚本 - 只需在 PowerShell 管理员窗口中执行:
set-ExecutionPolicy RemoteSigned -Scope CurrentUser(不用改 LocalMachine,更安全) - 改完后,VSCode 终端里就能正常运行
Activate.ps1了,方便你手动测试 pip list 或 python -c "import django"
最容易被忽略的是:VSCode 的解释器选择和终端激活是两套机制。前者决定调试器用哪个 Python,后者决定你在终端里敲命令时用哪个环境。两者必须一致,但不会自动同步——你得自己确认右下角状态栏的解释器路径,并在终端里验证 which python 或 where python 输出是否匹配。











