为什么我开始用 uv 管理虚拟环境

至暗时刻

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

这条命令会:

  1. openai 加到 pyproject.toml
  2. .venv 里装好
  3. 更新 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 的那把”器”。

参考

← 返回文章列表