
本文详解在 VSCode 中通过配置 launch.json 设置 Python 脚本的运行工作目录(cwd)及命令行参数的方法,并补充适用于跨环境部署的代码级工作目录固化方案。
本文详解在 vscode 中通过配置 `launch.json` 设置 python 脚本的运行工作目录(cwd)及命令行参数的方法,并补充适用于跨环境部署的代码级工作目录固化方案。
在 VSCode 中运行 Python 脚本时,默认以当前工作区(workspace folder)为工作目录(cwd)。但实际开发中,脚本常依赖相对路径读取配置、数据或模块(如 ./config.yaml 或 ./data/input.csv),此时必须显式指定 cwd——幸运的是,VSCode 的 Python 扩展完全支持该能力,且配置方式与调试一致。
✅ 方法一:通过 launch.json 配置运行时工作目录(推荐)
VSCode 的「运行」(Run Python File)功能底层复用调试器配置。只需在项目根目录下创建 .vscode/launch.json(若不存在),添加或修改一个 python 类型的启动配置:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Run with custom cwd",
"type": "python",
"request": "launch",
"module": "runpy",
"args": ["-m", "main"],
"cwd": "${workspaceFolder}/src", // ← 关键:指定运行时工作目录
"console": "integratedTerminal",
"justMyCode": true
}
]
}? 说明:
- "cwd": "${workspaceFolder}/src" 表示将工作目录设为 workspaceFolder/src;你也可使用绝对路径(如 "C:/myproject/data")或变量(如 "${fileDirname}" 表示当前文件所在目录);
- "args" 支持传入脚本参数,例如 ["--verbose", "--output", "result.json"];
- 使用 Ctrl+Shift+D 打开运行面板 → 选择该配置 → 点击 ▶️ 即可按指定 cwd 运行。
⚠️ 注意:此配置仅影响 VSCode 内部运行(含终端执行),不改变系统全局工作目录,也不影响外部终端直接 python main.py 的行为。
立即学习“Python免费学习笔记(深入)”;
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
✅ 方法二:代码内固化工作目录(跨环境必备)
当脚本需被他人在任意路径下直接调用(如 python /path/to/main.py),仅靠 VSCode 配置无效。此时应在脚本开头主动切换工作目录至自身所在位置:
import os
# 将工作目录设为当前脚本所在目录(推荐)
script_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(script_dir)
print(f"Working directory set to: {os.getcwd()}")若脚本还需优先加载同目录下的自定义模块(避免与系统包冲突),可同步调整 sys.path:
import sys
import os
script_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(script_dir)
# 将脚本目录置于 sys.path 最前,确保本地模块优先导入
if script_dir not in sys.path:
sys.path.insert(0, script_dir)✅ 此方案具有强鲁棒性:无论从 VSCode、命令行、IDE 还是自动化任务触发,均能保证路径一致性。
? 总结建议
| 场景 | 推荐方案 | 说明 |
|---|---|---|
| 仅 VSCode 内开发调试 | launch.json + cwd | 配置灵活、无需改代码,适合迭代阶段 |
| 脚本需分发/他人调用 | 代码内 os.chdir(__file__) | 保障可移植性,是生产级最佳实践 |
| 混合需求(两者都要) | 双管齐下:配置 launch.json + 开头固化路径 | 兼顾开发效率与部署健壮性 |
最后提醒:避免使用 os.chdir() 后未恢复原路径的长生命周期服务(如 Flask Web 应用),但对于一次性脚本(数据处理、CLI 工具等),上述方案安全可靠。

















