
本文详解 vs code 运行 python 时相对路径失效的根本原因(当前工作目录非脚本所在目录),并提供 os.getcwd() 调试、os.path.dirname(__file__) 定位脚本目录、pathlib 现代化方案等可靠解决方法,助你彻底摆脱“文件找不到”错误。
本文详解 vs code 运行 python 时相对路径失效的根本原因(当前工作目录非脚本所在目录),并提供 os.getcwd() 调试、os.path.dirname(__file__) 定位脚本目录、pathlib 现代化方案等可靠解决方法,助你彻底摆脱“文件找不到”错误。
在 VS Code 中运行 Python 脚本时,遇到 FileNotFoundError: [Errno 2] No such file or directory: 'movies.txt' 是非常典型的路径问题——关键在于:Python 的相对路径是相对于「当前工作目录(Current Working Directory, CWD)」,而非 Python 源文件所在目录。即使 movies.txt 和 main.py 物理上位于同一文件夹,若 VS Code 启动终端或调试器时的 CWD 是工作区根目录(尤其是多层嵌套项目中),open("movies.txt") 就会失败。
? 第一步:确认当前工作目录
运行以下代码,明确你实际的 CWD:
import os
print("当前工作目录:", os.getcwd())
print("脚本所在目录:", os.path.dirname(os.path.abspath(__file__)))
输出示例:
当前工作目录: /Users/you/project ← 工作区根目录(VS Code 默认 CWD) 脚本所在目录: /Users/you/project/src/utils ← 你的 .py 文件真实位置
这解释了为何 open("movies.txt") 失败:它在 /project/ 下找 movies.txt,而非 /project/src/utils/。
✅ 推荐解决方案(按优先级排序)
方案 1:基于脚本位置构建路径(最稳健,推荐新手)
使用 __file__ 获取脚本绝对路径,再拼接同级资源文件:
import os
# 获取当前 Python 文件所在目录
script_dir = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(script_dir, "movies.txt")
with open(file_path, "r", encoding="utf-8") as movies:
content = movies.read()
print(content)
方案 2:现代写法 —— 使用 pathlib(Python 3.4+,更简洁安全)
from pathlib import Path
# 构建与当前脚本同目录的文件路径
file_path = Path(__file__).parent / "movies.txt"
with open(file_path, "r", encoding="utf-8") as movies:
content = movies.read()
print(content)
方案 3:修改 VS Code 启动配置(仅限调试,不推荐用于通用部署)
在 .vscode/launch.json 中显式设置 cwd(需确保路径准确):
{
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"module": "src.utils.main", // 或直接用 "program"
"console": "integratedTerminal",
"cwd": "${fileDirname}" // ← 关键:将工作目录设为当前文件所在目录
}
]
}
⚠️ 注意:此配置仅影响 F5 调试,不影响终端中 python main.py 执行;且 ${fileDirname} 在多文件调试时可能不稳定。
? 重要注意事项与最佳实践
- 不要依赖“把文件放到工作区根目录”:虽能临时解决,但违背模块化组织原则,大型项目中不可维护。
- 嵌套层级无硬性限制:3 层甚至更深都完全可行,问题本质是路径解析逻辑,而非深度本身。
- 避免硬编码绝对路径:如 open("/full/path/to/movies.txt"),会导致代码无法跨环境迁移。
- 调试建议:始终先打印 os.getcwd() 和 Path(__file__).parent,验证路径逻辑,比盲目调整文件位置更高效。
- 扩展兼容性:部分 Python 扩展(如 Python Test Explorer)也可能覆盖 CWD,统一使用 __file__ 或 pathlib 可规避所有此类干扰。
掌握以脚本自身位置为基准的路径构造方法,你就能在任意嵌套结构、任意 IDE 配置下,写出可移植、健壮的文件读写代码——这才是专业 Python 开发者的核心基础能力。










