装了两个 Python 的同学大概率都遇过这一幕:py --list明明把 3.12 标成了星号,python --version回你的却是 3.10;再敲一次where.exe python,屏幕上冒出两三行路径,谁也不肯承认自己是那个「默认版本」。这类问题的根因基本都落在 PATH 顺序上,而不是 Python 装坏了,更不是卸载重装能解决的。TaoToken 在这里帮得上的忙,是给 Codex 一条稳定的 API 通道,让你把where.exe python的原始输出和 Path 列表整段贴进对话,让它对照py/python的版本表格,指出到底是哪一条安装路径抢在了前面。第一步先去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content= 注册并创建一把 API Key,后面 Codex 的 Base URL 填成https://taotoken.net/api就能接上。
1. py --list 的星号和 python --version 对不上,先别急着卸载
1.1 三个命令各自只说了一部分真话
很多人一看版本不对,第一反应是「装乱了」,于是去控制面板卸载重装。可你注意观察一下:py --list列出来的版本列表里,带星号的那个通常是你想用的;where.exe python却会按 PATH 顺序把所有叫python.exe的路径从上往下倒出来;而python --version只认当前这个终端会话里第一个被命中的那一个。这三个命令的信息来源根本不同,所以它们「各说各话」并不矛盾。
py --list:由 Python Launcher(py.exe)维护,读的是注册表和 launcher 自己登记的版本,星号代表py不带参数时会选谁。where.exe python:纯粹按当前进程的PATH顺序找,先命中的排第一。python --version:就是where.exe python里排第一的那个python.exe报出来的版本。
换句话说,py --list的星号说的是「launcher 的偏好」,python --version说的是「PATH 的偏好」。这两套偏好不共享数据,所以星号在 3.12、python却是 3.10 完全可能同时成立。要修的从来不是 Python 本身,而是 PATH 顺序,或者干脆统一用py来调用。
1.2 让 Codex 看两段原始输出,比翻系统设置快
知道原理之后,动作就明确了:不需要动注册表,也不需要先卸载哪个版本。先把两段原始输出攒齐——where.exe python的完整结果,以及系统环境变量里 Path 条目的顺序。把这两段原样交给 Codex,让它做「对照阅读」,它才能告诉你哪条路径在抢默认版本、以及调整顺序之后会变成谁。这一步的关键是「原样」,不要自己总结成「我有两个 Python」,那样模型拿不到行序信息,也就无法定位抢占者。
Codex 要跑起来,需要先有一条能用的 API 通道。打开 TaoToken 注册账号,在控制台创建 API Key,记下占位符YOUR_API_KEY对应的真实值(本文里一律用YOUR_API_KEY演示)。Key 的用途很单纯:让 Codex 能连上模型,PATH 该改还是你在 Windows 里改,TaoToken 只提供 API 通道,不参与也不修改你的环境变量。
2. Codex 走 TaoToken 的 config.toml:base_url 只写到 /api
2.1 在 ~/.codex/config.toml 声明一个 provider
Codex 的配置落在用户目录下的~/.codex/config.toml,Windows 上就是C:\Users\你的用户名\.codex\config.toml。要让 Codex 走 TaoToken,思路是新增一个 provider 段,把base_url指向统一接入地址,再把模型字段指向你想用的那个。配置文件长这样:
model = "YOUR_MODEL_ID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat"几个容易踩的点单独说一下。base_url写https://taotoken.net/api,末尾不要加/v1,也不要在这里挂任何查询参数,它就是给工具填的接口根地址,和官网页面是两码事。env_key指向一个环境变量名,Key 本身不放配置文件,避免误提交。model_provider的值要和下面方括号里的名字一致,比如都叫taotoken,写错一个字 Codex 就会去默认的 OpenAI provider 上找,报的错还跟 Key 无关,很难查。
2.2 模型 ID 以模型广场为准,别照抄日期后缀
YOUR_MODEL_ID不要凭印象填。模型 ID 是逐字匹配的,多一个日期后缀、少一个连字符都会 404。正确做法是打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content= 的模型广场,看你账号下当前可用的对话模型,把列表里的 ID 原样复制进配置。列表会更新,今天能用的名字明天可能换了写法,所以「以模型广场当时列表为准」是最省事的核对方式。
Key 通过环境变量注入。PowerShell 里临时设一次用于验证:
$env:TAOTOKEN_API_KEY = "YOUR_API_KEY"想长期生效,就用系统设置里的「环境变量」对话框把TAOTOKEN_API_KEY加到用户变量里,值填真实 Key。这一步和后面改 Path 是两件独立的事,别把 Key 误塞进 Path,也别把 Python 目录写进TAOTOKEN_API_KEY。
3. where.exe python 的输出怎么贴,Codex 才排得动
3.1 该贴哪几段:where.exe python、Path 列表、py --list
很多人在对话里只发一句「我 Python 版本不对」,Codex 只能给一套通用排查清单,帮不上具体忙。有效的贴法是三段一起给:
where.exe python的完整输出,按行保留,别去掉任何一行。示例可能长这样:
C:\Users\you\AppData\Local\Programs\Python\Python310\python.exe C:\Users\you\AppData\Local\Microsoft\WindowsApps\python.exe C:\Users\you\AppData\Local\Programs\Python\Python312\python.exe- 系统环境变量 Path 的条目列表,顺序照抄,一条一行,注明哪几条在「用户变量」、哪几条在「系统变量」。
py --list的输出,把带星号的那一行原样标出来。
这三段信息合在一起,模型才能重建出「终端解析python时的查找顺序」和「launcher 自己认为的默认版本」这两个视角。少了 Path 顺序,它就只能猜;少了py --list,它没法判断星号和你期望的是否一致。
3.2 让 Codex 输出一张「谁抢了默认版本」的对照表
把我上面那段示例丢给 Codex,并明确要求它输出对照表:每一行是 where 命中的路径,标出它属于哪个版本、位于哪一条 Path 条目下、在查找顺序里排第几。上面这个例子里,WindowsApps\python.exe是微软商店的占位别名,经常扮演「截胡者」——它在 3.10 之后、3.12 之前,所以python落到商店别名上,行为就更飘。把它对应到 Path 条目的位置一看,问题立刻具体了:要么把它往后挪,要么把 3.12 的目录提到它前面。
Codex 在这里的角色是解释和对照,它不是执行器。诊断命令必须在你的本机终端里由你自己跑,跑完把输出贴回对话;它负责给出顺序建议,然后由你去改环境变量。这一点在自己的脑子里要划清楚,AI 编程工具默认不能直连你的生产环境去「动手」,改 Path、删注册表这类动作只发生在你手动操作那一步。
4. 按结论调 Windows 环境变量,改的是顺序不是删文件
4.1 用户 Path 和系统 Path 的拼接顺序
Windows 里最终生效的 Path 是「系统变量 Path」在前、「用户变量 Path」在后拼起来的,同一条目重复出现时也按这个先后判定。所以想让某个 Python 目录优先,最省事的做法不是删别的装路径,而是把目标目录在对应的变量里上移。如果你把 3.12 装在用户目录下,就把...\Python312\移到用户 Path 的最上面;如果两个版本都装在系统级目录下,那就调整系统变量的顺序。
改之前先把当前两份 Path 原样复制到记事本留底,改错了还能还原。编辑时注意别顺手删掉%SystemRoot%\system32这类系统条目,Path 被破坏带来的问题比 Python 版本不对严重得多。WindowsApps那一条如果你平时不用商店版,可以整体下移,但建议保留,避免其他依赖它的组件找不到别名。
4.2 改完重开终端,py -0p 和 where.exe python 各看一遍
环境变量对已经打开的终端不生效,必须关掉重新开一个 cmd 或 PowerShell。重新开后按顺序复验:
py --list py -0p where.exe python python --versionpy -0p会列出每个已安装版本及其可执行文件路径,用来确认 launcher 这边的登记情况;where.exe python再看一遍命中的顺序,第一行应该已经换成你想要的版本目录。如果python --version对了,说明 Path 顺序调整到位;如果还是旧版本,把新的where.exe python输出再贴给 Codex,让它看看是不是有第二处 Path 覆盖,比如某个虚拟环境或 IDE 注入的目录。
需要提醒的是,调整 PATH 只影响「你在终端里敲 python 时用哪个」。以python -m venv建的虚拟环境、以及 pip 的安装目标,各自还有自己的判定逻辑,这两件事不要混为一谈。真出问题时,先把范围缩到「默认解释器」这一层。
5. Trae 内置终端还认旧 python 的两种情形
5.1 Trae 继承的是启动它那一刻的环境
就算系统终端已经改对了,Trae 里内置的终端仍可能报旧版本。原因多半是 Trae 本身是个长驻进程,它启动时把当时的环境变量快照继承了下来,之后你在系统设置里改 Path,它并不会自动刷新。最直接的验证办法是彻底退出 Trae(不是关窗口,是从托盘或任务管理器结束进程),再重新打开,让它在新的环境快照里重启。之后在 Trae 的终端里跑where.exe python,看第一行是否已经指向新目录。
另一种情形是 Trae 里配了单独的 Python 解释器路径,比如在设置里指定过某个python.exe,那么终端解释器和项目解释器就是两条线。这种情况不要指望改系统 Path 能解决,要去 Trae 的设置里把解释器指到目标版本,或者在项目里用虚拟环境隔离。
5.2 在 Trae 的终端里再跑一次 where.exe python
诊断顺序建议保持一致:重启 Trae 之后先where.exe python,再python --version,最后py --list。把这三段输出和系统终端里的输出并排放,哪个地方不一致,问题就在那一层。如果 Trae 终端始终看不到你想要的路径,把它的where.exe python输出、以及 Trae 关于 Python 解释器的设置截图文字一起整理好,再贴给 Codex,让它判断是「启动快照旧」还是「项目解释器另行指定」这两种情况里的哪一种。
6. 配完之后回控制台对一下这次调用
配置保存、终端重启之后,先在 TaoToken 模型对话 里用同一把 Key 发一条测试消息,确认模型 ID 和 Base URL 没填错。如果打算长期用它来读日志、排 PATH 这类问题,可以打开 Coding Plan 看套餐是否够用。Key 本身在 控制台 API Keys 里创建和管理,别把它写进config.toml明文,交给TAOTOKEN_API_KEY环境变量。
最后再回头看一眼那条where.exe python:如果第一行已经是 3.12 的目录,python --version也就跟着改了,py --list的星号是不是同一个版本,其实已经不影响你敲命令的结果。真正需要留意的反而是「谁改了 Path」这件事本身——装了新的工具链、换了个 IDE、开了一次商店版别名,顺序都可能被动过;下次再遇到版本漂移,把两段输出重新贴给 Codex 对照一次,几分钟就能定位到具体哪一条路径在抢位。