1. 为什么 2026 年还要重新搭一次 Python 环境
如果你刚接触 AI 开发,大概率会遇到这样一个场景:跟着教程敲了pip install openai,跑起来却报ModuleNotFoundError;换台电脑重新配一遍,Python 版本、依赖版本、环境变量全对不上;想同时试两个模型,结果 API Key 散落在四五个文件里,改一次要翻半天。
这不是你笨,是工具链本身在 2026 年已经换代了。Python 环境搭建这件事,核心检索词就三个:Python、AI 工具链、环境搭建。传统pip + virtualenv + requirements.txt的组合,在需要频繁切换模型、管理多套依赖的 AI 开发场景里,维护成本高得离谱。而uv这个用 Rust 写的包管理器,把 Python 版本管理、虚拟环境、依赖锁定三件事合并成了一条命令,速度比 pip 快一个数量级。
这篇文章面向的就是刚接触 AI 开发的工程师。我会从零开始,带你用uv建好 Python 环境,在 VS Code 里配好解释器和扩展,再通过 TaoToken 的统一 Key 和 API 通道把模型调用链路打通,最后用一条最小脚本验证整条链路可用。全程都是可复制的命令和配置,你跟着敲就行。
适合谁看:写过一点 Python、但没系统搭过 AI 开发环境的人;被 pip 依赖冲突折磨过的人;想用一个统一入口调用多个模型、不想每个平台单独注册的人。不适合谁:已经有一套稳定工作流、且不打算换工具链的老手。
我试过在三个不同系统上重复这套流程,Windows、macOS、Linux 都能跑通,下面按顺序来。
2. 用 uv 初始化 Python 环境与虚拟环境
2.1 安装 uv
uv的安装脚本一行搞定。Windows 用 PowerShell:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"macOS 和 Linux 用 curl:
curl -LsSf https://astral.sh/uv/install.sh | sh装完验证一下:
uv --version # 输出示例:uv 0.6.x如果提示uv: command not found,说明安装目录没进 PATH。macOS/Linux 下重新打开终端,或者手动source ~/.bashrc;Windows 下重启 PowerShell 即可。
2.2 用 uv 管理 Python 版本
以前装 Python 要单独去官网下安装包,现在 uv 直接管:
# 安装 Python 3.12 uv python install 3.12 # 查看已安装的版本 uv python list # 查看当前系统可用的 Python uv python find 3.12这一步的意义在于:你不再依赖系统自带的 Python。系统 Python 往往版本老旧,而且被系统工具占用,乱动容易出问题。uv 装的 Python 放在独立目录,项目用哪个版本就指哪个版本。
2.3 初始化项目与虚拟环境
# 创建项目目录 uv init ai-toolchain-demo --python 3.12 cd ai-toolchain-demo # 添加依赖,uv 会自动创建 .venv 虚拟环境 uv add openai anthropic python-dotenvuv init会生成pyproject.toml,这是项目的依赖声明文件。uv add做三件事:解析依赖、写入pyproject.toml、同步到.venv。整个过程通常几秒钟。
验证虚拟环境是否生效:
# 查看当前 Python 解释器路径,应该在 .venv 下 uv run python -c "import sys; print(sys.executable)" # 输出类似:/path/to/ai-toolchain-demo/.venv/bin/python # 查看已安装依赖 uv pip list这里有个关键习惯:所有 Python 命令都用uv run前缀。直接敲python script.py可能调用系统 Python,导致依赖找不到。uv run会自动激活虚拟环境,保证用的是项目里的解释器。
2.4 项目结构建议
一个干净的 AI 项目目录长这样:
ai-toolchain-demo/ ├── .env # 密钥,不提交 ├── .env.example # 密钥模板,提交 ├── .gitignore ├── pyproject.toml # uv 项目配置 ├── src/ │ ├── __init__.py │ └── config.py # 统一配置 └── scripts/ └── quick_test.py # 链路验证脚本.gitignore第一行就写.env,这是血泪教训。密钥一旦提交到公开仓库,等于把账单交给别人。
3. VS Code 解释器与扩展配置(含 TaoToken 接入)
3.1 选择正确的解释器
打开 VS Code,Ctrl+Shift+P(Mac 是Cmd+Shift+P)调出命令面板,输入Python: Select Interpreter,选择路径里带.venv的那个。选错解释器是新手最常见的坑——代码里 import 报错,但终端里跑得好好的,八成就是 VS Code 用了系统 Python。
3.2 必装扩展
在扩展市场搜这几个:
- Python(Microsoft 官方):提供解释器、调试、lint
- Pylance:类型检查和智能补全
- Continue:VS Code 里的 AI 助手,支持多模型切换
Continue 的配置文件在~/.continue/config.json。下面这份配置把模型请求统一指向 TaoToken 的 API 通道,Base URL 和 Key 都从环境变量读:
{ "models": [ { "title": "TaoToken Claude", "provider": "openai", "model": "claude-sonnet-4-20250514", "apiKey": "${TAOTOKEN_API_KEY}", "apiBase": "https://taotoken.net/api" }, { "title": "TaoToken GPT", "provider": "openai", "model": "gpt-4o", "apiKey": "${TAOTOKEN_API_KEY}", "apiBase": "https://taotoken.net/api" } ], "tabAutocompleteModel": { "title": "TaoToken Autocomplete", "provider": "openai", "model": "gpt-4o-mini", "apiKey": "${TAOTOKEN_API_KEY}", "apiBase": "https://taotoken.net/api" }, "contextProviders": [ { "name": "diff" }, { "name": "open" }, { "name": "terminal" } ] }注意apiBase填的是https://taotoken.net/api,不要加多余的路径后缀。apiKey用${TAOTOKEN_API_KEY}引用环境变量,这样配置文件可以安全地同步到其他机器。
3.3 环境变量配置
Windows PowerShell:
[System.Environment]::SetEnvironmentVariable('TAOTOKEN_API_KEY', '你的Key', 'User')macOS / Linux 加到~/.zshrc或~/.bashrc:
export TAOTOKEN_API_KEY="你的Key"改完环境变量后,必须完全退出 VS Code 再重开,不是 Reload Window。Continue 在启动时读取环境变量,热重载读不到新值。
3.4 三件套对照表
无论用 Continue、Cline 还是 Claude Code,接入任何 OpenAI 兼容通道都离不开这三个参数:
| 参数 | 值 | 说明 |
|---|---|---|
| Base URL | https://taotoken.net/api | 统一 API 入口 |
| API Key | 从控制台获取 | 环境变量注入 |
| Model ID | 如claude-sonnet-4-20250514 | 按需选择 |
Key 的获取入口在控制台的 API Keys 页面,模型列表和参数说明在接入文档里。这两个页面建议先收藏,后面调试会反复用到。
4. 最小调用脚本验证链路可用
4.1 统一配置模块
在src/config.py里集中管理配置:
import os from dotenv import load_dotenv load_dotenv() AI_CONFIG = { "base_url": os.getenv("TAOTOKEN_BASE_URL", "https://taotoken.net/api"), "api_key": os.getenv("TAOTOKEN_API_KEY", ""), "model": os.getenv("TAOTOKEN_MODEL", "claude-sonnet-4-20250514"), } def validate_config(): if not AI_CONFIG["api_key"]: raise ValueError("缺少 TAOTOKEN_API_KEY,请在 .env 中配置") print("配置校验通过") print(f"Base URL: {AI_CONFIG['base_url']}") print(f"Model: {AI_CONFIG['model']}") if __name__ == "__main__": validate_config().env文件:
TAOTOKEN_API_KEY=你的Key TAOTOKEN_BASE_URL=https://taotoken.net/api TAOTOKEN_MODEL=claude-sonnet-4-202505144.2 验证脚本
scripts/quick_test.py:
import sys import os sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "src")) from openai import OpenAI from config import AI_CONFIG, validate_config def test_connection(): validate_config() client = OpenAI( api_key=AI_CONFIG["api_key"], base_url=AI_CONFIG["base_url"], ) response = client.chat.completions.create( model=AI_CONFIG["model"], messages=[ {"role": "user", "content": "用一句话说明什么是虚拟环境。"} ], max_tokens=100, ) print("模型回复:") print(response.choices[0].message.content) if __name__ == "__main__": test_connection()4.3 运行验证
uv run python scripts/quick_test.py预期输出:
配置校验通过 Base URL: https://taotoken.net/api Model: claude-sonnet-4-20250514 模型回复: 虚拟环境是一个隔离的 Python 运行空间,让不同项目的依赖互不干扰。看到模型回复,说明从 Python 环境、依赖安装、密钥配置到 API 通道,整条链路已经打通。这一步成功之后,后面写 Agent、接 MCP、做批量任务,都只是在这个基础上加代码。
5. 常见报错排查对照
5.1 401 Unauthorized
报错原文:
openai.AuthenticationError: Error code: 401 - {'error': {'message': 'Invalid API key'}}排查顺序:先确认环境变量是否真的生效,echo $TAOTOKEN_API_KEY(Windows 用echo $env:TAOTOKEN_API_KEY);再确认 Key 有没有多余空格或换行;最后确认 Key 没有过期或被禁用。如果是在 VS Code 里报错,检查是不是没完全重启编辑器。
5.2 local proxy failed / connection error
报错原文:
openai.APIConnectionError: Connection error.这类错误通常是网络层问题。先确认base_url拼写正确,是https://taotoken.net/api而不是别的路径。再用 curl 直接测:
curl -X POST https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer 你的Key" \ -H "Content-Type: application/json" \ -d '{"model":"claude-sonnet-4-20250514","messages":[{"role":"user","content":"hi"}]}'如果 curl 通、Python 不通,检查 Python 里有没有设置HTTP_PROXY之类的环境变量干扰。
5.3 reading choices 报错
报错原文:
KeyError: 'choices'或者:
TypeError: 'NoneType' object is not subscriptable这通常说明返回体结构和你预期的不一样。打印完整响应看看:
response = client.chat.completions.create(...) print(response.model_dump_json(indent=2))常见原因是模型 ID 写错了,服务端返回了错误信息而不是正常的 choices 结构。对照接入文档里的模型列表,确认 Model ID 拼写。
5.4 OAuth / 鉴权相关报错
如果你用的是 Claude Code 这类工具,可能遇到:
OAuth token expired或者:
Invalid authentication credentials这类工具通常有自己的鉴权流程。接入统一通道时,需要在工具的配置里显式指定 Base URL 和 Key,而不是走默认的 OAuth。以 Claude Code 为例,配置里要写全三件套:Base URL 填https://taotoken.net/api,Key 填你的 Key,Model ID 填对应模型。三个参数缺一个都会鉴权失败。
5.5 ModuleNotFoundError
ModuleNotFoundError: No module named 'openai'九成是没用uv run。直接python script.py调用的是系统 Python,依赖装在.venv里,自然找不到。养成习惯:所有命令前面加uv run。
5.6 排查速查表
| 报错关键词 | 最可能原因 | 第一步动作 |
|---|---|---|
| 401 Unauthorized | Key 无效或未生效 | 检查环境变量 |
| Connection error | Base URL 错误 | curl 直测 |
| reading choices | Model ID 错误 | 打印完整响应 |
| OAuth expired | 未显式配置鉴权 | 补全三件套 |
| ModuleNotFound | 未用 uv run | 加 uv run 前缀 |
6. 把环境用起来:下一步怎么走
环境搭好只是起点。你现在手里有一套可复现的 Python 环境、一个能切换模型的 VS Code 配置、一条验证过的 API 通道。接下来可以做的事:
想快速试不同模型的效果,直接去模型对话页面,不用改代码就能对比输出。想把这套环境用在长期编码任务上,比如让 AI 帮你重构模块、写测试、做代码审查,可以了解 Coding Plan,它按周期计费,适合高频调用场景。需要管理多个 Key、查看用量,控制台里有完整的记录。
如果你打算把这套配置分享给团队,记得.env不进 Git,.env.example进 Git,新人 clone 下来复制一份填自己的 Key 就能跑。这个习惯能省掉大量「在我机器上是好的」的扯皮。
最后留一个实用技巧:uv的依赖锁定文件是uv.lock,它记录了每个依赖的精确版本和哈希。把这个文件提交到仓库,团队所有人的环境就完全一致。这比requirements.txt只写版本号要可靠得多,尤其在 AI 生态里依赖更新频繁的情况下,能避免很多「昨天还能跑今天就不行」的问题。