至暗时刻
2024 年刚开始转行到 AI 方向,做提示词工程师。
那会儿公司在做一个用 Claude 模型驱动的脚本创作工具。我每天对着 Cursor 和文档写提示词,看着后端同事用 Python 把 Agent 跑起来,心里也痒:我也想自己试着调一下模型、做个 Agent 玩玩。
结果自信满满地打开终端,第一步就卡了——依赖装不上。
我跟着一个开源教程走,敲下:
pip install openai
装好了,跑代码,报错:ImportError: cannot import name 'OpenAI' from 'openai'。
查了半天,才发现教程代码用的是新版 SDK,而我装的是 openai==0.28——老版本。升级一下:
pip install --upgrade openai
升级完,新代码能跑了,但之前那个 langchain 的教程项目突然挂了:langchain 依赖老版本 openai,我又把它升级了,依赖链直接断了。
那天晚上我在 Python 的依赖地狱里爬了三个小时,最后把整个 Python 重装了才算干净。转行第一个月,第一次怀疑人生:难道做 AI 必须先成为环境配置大师?
救命稻草:虚拟环境
后来一个前辈告诉我:每个项目都用独立的虚拟环境,不要污染全局。
虚拟环境本质上是这么个东西:
你的电脑
├── 全局 Python(系统自带,别动)
├── 项目A/.venv/ ← 独立的 Python 环境,装自己的依赖
└── 项目B/.venv/ ← 另一个独立的 Python 环境
每个 .venv 就像一个平行宇宙,里面的包互不干扰。项目 A 用 openai==1.0,项目 B 用 openai==0.28,井水不犯河水。
但传统虚拟环境工具有点笨重:
python -m venv .venv创建source .venv/bin/activate激活(Windows 是.venv\Scripts\activate)pip install xxx装包- 每次开新终端都要手动 activate,忘了一次就翻车
- 装包速度慢,下个 PyTorch 能等半小时
uv 出场
后来看到有人推荐 uv,用 Rust 写的 Python 包管理工具。试了一下,真香。
装 uv
macOS:
brew install uv
或者官方一键脚本:
curl -LsSf https://astral.sh/uv/install.sh | sh
创建项目
uv init my-ai-project
cd my-ai-project
它会生成:
pyproject.toml(项目配置和依赖列表).python-version(指定的 Python 版本).venv/(虚拟环境,自动创建)main.py(入口文件)README.md
最关键的是——虚拟环境自动建好了,不用再手动 venv。
加依赖
uv add openai
这条命令会:
- 把
openai加到pyproject.toml - 在
.venv里装好 - 更新
uv.lock(锁定所有依赖的精确版本,保证别人 clone 后能跑出一样的环境)
速度有多快?我装 openai + langchain + chromadb 一套 RAG 全家桶,3 秒钟搞定。换 pip 至少两分钟。
跑代码
uv run main.py
uv run 会自动用项目的虚拟环境,不需要手动 activate。这一点对我来说是最大的爽点——以前老忘记 activate,现在 uv 帮我记。
同步环境
同事 clone 了你的项目,怎么把环境装起来?
uv sync
一条命令,按 uv.lock 把所有依赖装好,版本一模一样。比 pip install -r requirements.txt 又快又准。
Python 版本管理
uv 还能管理 Python 版本本身:
uv python install 3.12 # 装 Python 3.12
uv python list # 看本机有哪些版本
不用再装 pyenv 了。
一个完整的 AI 项目示例
# 初始化
uv init ai-demo
cd ai-demo
# 加依赖
uv add openai
uv add chromadb langchain
# 写代码(用你喜欢的编辑器)
# main.py 里调 GPT API
# 跑
uv run main.py
就这五步,从零到一个跑起来的 AI 项目。
工欲善其事,必先利其器。uv 就是我现在写 Python 的那把”器”。