Code Runner 运行 Python 找不到模块因默认用系统 Python 而非项目虚拟环境,需在 settings.json 中将 "python" 执行器改为虚拟环境绝对路径;Shell 脚本 Permission denied 需 chmod +x 或改用 bash $fileName;Node.js 闪退应启用 code-runner.runInTerminal;TypeScript 需配置 tsc 编译再运行,并注意路径空格与模块设置。

Code Runner 运行 Python 脚本时找不到模块(ModuleNotFoundError)
根本原因不是插件本身问题,而是 Code Runner 默认用的是系统 PATH 里的 Python,而非你当前项目激活的虚拟环境(venv / conda)。它压根不读取你的终端激活状态。
实操建议:
- 打开 VSCode 设置(
Ctrl+,),搜索code-runner.executorMap,点击「在 settings.json 中编辑」 - 找到
"python"对应的命令行,把默认的"python -u"改成绝对路径,例如:"python": "D:\myproject\.venv\Scripts\python.exe -u"(Windows)或"python": "/Users/me/project/.venv/bin/python -u"(macOS/Linux) - 如果用 conda,路径类似
~/miniconda3/envs/myenv/bin/python,务必确认该路径下真实存在python可执行文件 - 改完保存,重启 VSCode 或重载窗口(
Ctrl+Shift+P→Developer: Reload Window)
Code Runner 执行 Shell 脚本(.sh)报错“Permission denied”
Linux/macOS 下,.sh 文件必须有可执行权限才能被直接调用,而 Code Runner 默认就是用 ./xxx.sh 方式运行的——它不会帮你 chmod +x。
实操建议:
- 终端进脚本所在目录,运行
chmod +x script.sh - 或者在
code-runner.executorMap中绕过权限检查:把"shellscript"的执行命令从"./$fileName"改成"bash $fileName"(即显式用 bash 解释,不依赖文件权限) - 注意:后者会丢失
#!/bin/bash中指定的解释器行为(比如用了#!/usr/bin/env zsh就不生效)
Node.js 脚本运行后立即退出,看不到 console 输出
Code Runner 默认使用非交互式终端运行命令,Node 进程结束后终端窗口自动关闭,导致你只看到一闪而过的输出。
实操建议:
- 在
code-runner.runInTerminal设置中启用它(设为true)——这样脚本会在 VSCode 内置终端里跑,不会闪退 - 若仍想用输出面板(Output tab),可在
code-runner.executorMap中给 Node 命令加--no-interactive或追加&& read -p "Press any key..."(仅限 Linux/macOS) - 更稳妥的做法是:写 Node 脚本时避免依赖“终端停留”,改用
process.stdin.resume()防止进程退出(适合调试用)
如何让 Code Runner 正确识别并运行 TypeScript(.ts)文件
Code Runner 自带的 typescript 执行器其实是调 tsc 编译再运行 JS,但默认没配 tsc 路径,也未指定编译目标(比如是否生成 .js、是否保留 source map)。
实操建议:
- 确保本地已全局安装 TypeScript:
npm install -g typescript;或项目本地装了,就用相对路径如./node_modules/.bin/tsc - 在
executorMap中定义"typescript"条目,例如:"typescript": "tsc $fileName && node $fileNameWithoutExt.js" - 更健壮的写法是加错误检查:
"typescript": "tsc $fileName --outDir ./dist && node ./dist/$fileNameWithoutExt.js",并提前建好./dist目录 - 注意:TS 文件若有 import/export,需确保
tsconfig.json中"module"设为"commonjs",否则生成的 JS 可能无法被node直接执行
最常被忽略的一点:Code Runner 的执行命令是字符串拼接出来的,$fileNameWithoutExt 这类变量不会自动处理路径分隔符或空格。如果你的文件在 My Project/foo.ts 这种含空格路径下,得手动加引号,比如 "tsc "$fileName" && node "$fileNameWithoutExt.js"" —— 否则大概率报错找不到文件。


















