VS Code调试器如何像Code Runner通过.bat文件调试Python代码
VS Code 适配bat初始化的特殊Python环境配置方案
调试器适配(解决原生调试无法加载bat环境的问题)
这类靠bat初始化的Python环境,本质是bat在启动Python进程前提前注入了专属环境变量、挂载了私有模块路径,直接选系统Python或者随便选个解释器调试,自然会因为缺环境变量报导包错。之前改launch.json/tasks.json不生效,基本是没把bat注入的环境变量正确喂给调试器,按下面步骤配:
- 先打开
C:\folder\special_stupid_python.bat,找到脚本里最终调用的真实python.exe绝对路径——这类封装bat最后一般都是call 某路径\python.exe %*的结构,把这个python.exe的完整路径复制下来。 - 按
Ctrl+Shift+P调出命令面板,执行Python: Select Interpreter,选择「Enter interpreter path」,手动粘贴刚才找到的python.exe路径,设为当前工作区的默认解释器。 - 打开工作区下
.vscode/launch.json,添加如下调试配置:
{ "version": "0.2.0", "configurations": [ { "name": "Python: 特殊环境调试", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal", "preLaunchTask": "load_special_env" } ] }
- 打开同目录下
.vscode/tasks.json,添加前置任务,作用是执行bat后把所有环境变量导出供调试器读取:
{ "version": "2.0.0", "tasks": [ { "label": "load_special_env", "type": "shell", "command": "C:\\folder\\special_stupid_python.bat -c \"import os; print('\\n'.join([f'{k}={v}' for k,v in os.environ.items()]))\" > ${workspaceFolder}\.env", "presentation": { "reveal": "silent", "panel": "dedicated" } } ] }
配完直接F5就能在bat初始化的环境里调试,不会再报special_stuff导包错。如果嫌每次启动调试都跑任务慢,可以直接把bat里设置的PYTHONPATH、PATH等和环境相关的字段手动抄到launch.json的env配置项里,跳过前置任务步骤。
补全、Linter校验、格式化问题修复
之前配extraPaths不生效,核心是两个原因:一是加错了配置字段,Pylance(Python插件默认的语言服务)只认python.analysis.extraPaths下的路径;二是选中的解释器和bat实际调用的解释器不匹配,语言服务索引错了环境。按下面步骤修:
- 先用Code Runner执行以下代码,拿到
special_stuff模块的真实存放路径:
import special_stuff as foo import os print(os.path.dirname(foo.__file__))
- 打开工作区
.vscode/settings.json,添加如下配置,注意路径替换成上一步输出的模块父目录路径:
{ "python.analysis.extraPaths": [ "上一步输出的special_stuff模块所在的父文件夹路径" ], "python.formatting.provider": "black" }
- 打开VS Code集成终端,确保终端前面的环境前缀是你之前选的那个特殊Python解释器,执行
pip install black(习惯用autopep8/yapf就替换成对应包名),装完就可以正常用代码格式化功能。 - 按
Ctrl+Shift+P调出命令面板,执行Developer: Reload Window重载窗口,等Pylance重新索引完成,再输入foo.就能正常弹出方法、对象补全,linter也能正常识别模块做校验。
内容的提问来源于stack exchange,提问作者A K.
相关产品推荐
相关产品推荐

