☰
Trae 或 VSCode 无法识别相对路径?把工作目录改到 TaoToken 前先搞懂 Execute In File Dir
2026/10/4 11:46:23 网站建设 项目流程

1. 相对路径失效的真实场景与排查思路

你打开 Trae 或者 VSCode,只拖进来一个test.py,代码里写着open("data/input.txt"),点运行,报错FileNotFoundError。你切到终端一看,pwd显示的是用户主目录,而不是脚本所在的文件夹。这不是你的代码写错了,而是编辑器默认把「工作目录」设成了它自己启动时所在的目录,而不是当前打开文件所在的目录。

这个行为在 VSCode 系编辑器里是默认的,Trae 基于 VSCode 内核修改,同样继承了这个设定。PyCharm 之所以不出现这个问题,是因为它默认就把运行配置的工作目录设成了脚本所在目录。所以从 PyCharm 迁过来的人,第一次在 Trae 或 VSCode 里跑带相对路径的脚本,几乎都会踩这个坑。

核心概念只有一个:工作目录(cwd)。进程启动时有一个当前工作目录,所有相对路径都相对于它解析。编辑器点「运行」时,如果没有额外配置,cwd 往往是编辑器进程的 cwd,而不是文件所在目录。Execute In File Dir这个设置就是让编辑器在运行当前文件时,把 cwd 切换到文件所在目录。

排查顺序建议这样走:先确认是编辑器行为还是运行配置问题。打开一个最小脚本,打印os.getcwd(),看输出目录是不是脚本所在目录。如果不是,再去改设置。如果改了设置还不对,就要看launch.json里有没有显式覆盖 cwd。最后才考虑是不是终端本身没有跟随文件切换。

我试过在 Trae 里打开一个子目录下的脚本,终端 cwd 停在项目根目录,脚本里的相对路径全部指向根目录,导致读不到子目录里的配置文件。把Execute In File Dir勾上之后,问题消失。下面把每一步拆开讲清楚。

2. TaoToken 前置:为什么先搞懂工作目录再改配置

在动手改settings.json之前,先把 TaoToken 的接入环境准备好。原因很直接:你后面验证工作目录是否生效时,大概率要跑一个调用模型接口的最小脚本,而这个脚本里会用到相对路径读取配置或提示词文件。如果 cwd 不对,脚本连配置文件都读不到,你会误以为是 API Key 或 Base URL 写错了,白白绕一圈。

TaoToken 的官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api 。这两个地址先记下来,后面配置里会用到。注意 API 地址不带 UTM 参数,直接写https://taotoken.net/api就行。

你需要准备三样东西:Base URL、API Key、Model ID。Base URL 就是上面那个 API 地址;API Key 在控制台的 API Keys 页面生成,入口是 https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite ;Model ID 根据你要用的模型填,可以在模型对话页面确认,入口是 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 。

如果你打算长期做编码或 Agent 类任务,可以了解 Coding Plan,入口是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,遇到配置格式问题可以对照。

为什么把 TaoToken 放在工作目录排查之前?因为很多人的实际场景是:写了一个脚本,用相对路径读prompt.txt,然后调用模型接口。脚本跑不起来,第一反应是 API 配置错了,其实是 cwd 不对导致prompt.txt没读到。先把工作目录搞对,再去验证 API 连通性,排查路径才清晰。

这里给一个最小验证脚本的思路,后面第 4 节会完整演示。脚本做两件事:打印当前工作目录,读取同目录下的一个文本文件。如果文件读不到,说明 cwd 有问题;如果读到了但接口报错,才是 API 配置问题。这样把两类问题隔离开。

3. 可复制配置:settings.json、Execute In File Dir 与 launch.json

这一节是重点,给出可以直接复制的配置片段。分三层:编辑器全局设置、运行配置、以及终端行为。

第一层,settings.json里的Execute In File Dir。在 Trae 或 VSCode 里按Ctrl+Shift+P(macOS 是Cmd+Shift+P),输入Open User Settings (JSON),打开用户设置文件。加入下面这行:

{ "python.terminal.executeInFileDir": true }

这个设置的作用是:当你在终端里运行 Python 文件时,终端的工作目录切换到该文件所在目录。注意它只影响 Python 扩展在终端里的执行行为,不影响调试器。

如果你用的是 Code Runner 扩展,它有自己的配置项。在settings.json里加:

{ "code-runner.fileDirectoryAsCwd": true }

这一项让 Code Runner 把文件所在目录作为 cwd。很多人装了 Code Runner 却不知道这个开关,导致点右上角运行按钮时相对路径失效。

第二层,launch.json里的 cwd。调试(F5)走的是launch.json,和上面两个设置是独立的。在项目根目录的.vscode/launch.json里配置:

{ "version": "0.2.0", "configurations": [ { "name": "Python: 当前文件", "type": "debugpy", "request": "launch", "program": "${file}", "console": "integratedTerminal", "cwd": "${fileDirname}" } ] }

关键在"cwd": "${fileDirname}"。${fileDirname}是 VSCode 的变量,表示当前打开文件所在目录。这样调试时 cwd 就是脚本目录,相对路径正常解析。如果你希望 cwd 固定在项目根目录,改成"cwd": "${workspaceFolder}"。

第三层,终端本身的工作目录。VSCode 和 Trae 有一个设置控制新终端打开时的 cwd:

{ "terminal.integrated.cwd": "${fileDirname}" }

这一项让新开的集成终端直接落在当前文件目录。注意它只影响新开的终端,已经开着的终端不会自动切换。所以改完设置后,关掉旧终端再开一个新的。

把三层配置放在一起,一个完整的settings.json片段长这样:

{ "python.terminal.executeInFileDir": true, "code-runner.fileDirectoryAsCwd": true, "terminal.integrated.cwd": "${fileDirname}" }

launch.json单独放,因为它是项目级配置,路径在.vscode/launch.json。如果你用 Trae,路径一样,Trae 兼容 VSCode 的配置目录结构。

这里要提醒一点:Execute In File Dir在设置界面里的搜索关键词就是Execute In File Dir,勾选后对应python.terminal.executeInFileDir。如果你在设置 UI 里搜不到,说明 Python 扩展没装或没激活。先确认扩展装好,再改 JSON。

4. 验证请求:用最小脚本确认工作目录是否生效

配置改完,必须验证。不要凭感觉,用脚本打印实际 cwd。

第一步,建一个测试目录结构:

project/ sub/ test_cwd.py data.txt

data.txt里随便写一行内容,比如hello cwd。

第二步,test_cwd.py内容:

import os print("当前工作目录:", os.getcwd()) print("脚本所在目录:", os.path.dirname(os.path.abspath(__file__))) with open("data.txt", "r", encoding="utf-8") as f: print("读取到:", f.read().strip())

第三步,在 Trae 或 VSCode 里只打开test_cwd.py,不要打开整个project文件夹。点运行。如果配置生效,输出应该是:

当前工作目录: /path/to/project/sub 脚本所在目录: /path/to/project/sub 读取到: hello cwd

如果输出里 cwd 是用户主目录或别的路径,且open("data.txt")报FileNotFoundError,说明Execute In File Dir没生效。检查是不是改错了设置文件(用户设置 vs 工作区设置),或者 Python 扩展没装。

第四步,验证调试配置。按 F5,如果launch.json里cwd设成了${fileDirname},输出应该和上面一致。如果报错说找不到launch.json,按提示创建一个,选 Python 调试配置,然后把cwd那行加进去。

第五步,验证 API 调用场景。把test_cwd.py改成读同目录的prompt.txt,然后调用 TaoToken 接口:

import os import json import urllib.request with open("prompt.txt", "r", encoding="utf-8") as f: prompt = f.read().strip() payload = { "model": "你的Model ID", "messages": [{"role": "user", "content": prompt}] } req = urllib.request.Request( "https://taotoken.net/api/v1/chat/completions", data=json.dumps(payload).encode("utf-8"), headers={ "Content-Type": "application/json", "Authorization": "Bearer 你的API Key" } ) with urllib.request.urlopen(req) as resp: result = json.loads(resp.read().decode("utf-8")) print(result["choices"][0]["message"]["content"])

这段脚本同时验证两件事:相对路径prompt.txt能否读到,以及 API 能否调通。如果prompt.txt读不到,是 cwd 问题;如果读到了但接口返回 401,是 Key 问题;如果返回模型不存在,是 Model ID 问题。这样把问题分层定位。

5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth

配置过程中会遇到几类典型报错,逐个对照。

401 Unauthorized。接口返回 401,通常是 API Key 没带对或格式不对。检查Authorization头是不是Bearer加 Key,中间有一个空格。Key 有没有多余空格或换行。如果 Key 是从控制台复制的,确认没有复制到前后空白。还有一种情况是 Key 被删除或过期,去 https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 重新生成一个。

local proxy failed。这个报错一般出现在你配置了本地代理或环境变量指向了不存在的地址。检查系统环境变量里有没有HTTP_PROXY、HTTPS_PROXY指向本地端口。如果有,且那个端口没有服务在跑,就会报这个。临时清掉这些环境变量再试。注意这里说的是本地环境变量排查,不涉及任何网络工具配置。

reading choices 报错。类似KeyError: 'choices'或list index out of range,说明返回的 JSON 里没有choices字段。先打印完整返回内容看结构。常见原因是接口地址写错了,比如漏了/v1,或者 Base URL 拼成了https://taotoken.net/api/v1/chat/completions之外的形式。确认地址是https://taotoken.net/api/v1/chat/completions。另外,如果返回的是错误信息 JSON,也会没有choices,先看error字段。

OAuth 相关报错。如果你在配置 Claude Code 或类似工具时看到 OAuth 报错,检查是不是把认证方式搞混了。有些工具走 OAuth 流程,有些走 API Key。TaoToken 的接入用 API Key 方式,Base URL 填https://taotoken.net/api,不需要走 OAuth。如果你在 Claude Code 里配置,参考接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 里的说明。

CC Switch / Cline MCP / Codex auth.json 三件套。如果你用这些工具,配置时三样都要写全:Base URL、API Key、Model ID。缺一个都会报错。Base URL 用https://taotoken.net/api,Key 用控制台生成的,Model ID 在模型对话页面确认。以 Codex 的auth.json为例,结构大致是:

{ "base_url": "https://taotoken.net/api", "api_key": "你的API Key", "model": "你的Model ID" }

字段名以实际工具文档为准,但三件套的逻辑不变。

相对路径仍然失效。如果配置都改了还是不行,检查是不是在设置 UI 里改了但没保存,或者改的是工作区设置而当前打开的是单文件(单文件模式下工作区设置不生效)。单文件模式要用用户设置。另外,Trae 和 VSCode 的设置是分开存储的,你在 VSCode 里改了,Trae 里不一定同步,需要在 Trae 里再改一遍。

6. 语义一致 CTA:把工作目录和接入配置一起固化

工作目录问题解决后,建议把配置固化下来,避免换项目或换编辑器时重新踩坑。用户设置里的Execute In File Dir和terminal.integrated.cwd是全局的,一次配好长期有效。launch.json是项目级的,可以在项目模板里放一份,新项目直接复制.vscode目录。

接入配置方面,把 Base URL、API Key、Model ID 三件套写进项目的环境变量或配置文件,不要硬编码在脚本里。这样换 Key 或换模型时只改一处。验证模型连通性可以用模型对话页面,入口是 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite ,直接在页面上发一条消息看返回,比写脚本快。

如果你要长期做编码或 Agent 任务,Coding Plan 的入口是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite ,可以了解额度方案。API Key 管理在 https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite ,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。

最后给一个实用技巧:在项目根目录放一个check_env.py,每次换环境先跑它,打印 cwd、检查配置文件是否存在、发一条最小请求验证 Key。三秒钟确认环境没问题,再开始写业务代码。这个脚本本身也用相对路径读配置,正好反过来验证 cwd 配置是否生效。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询