下面是一套**在 PyCharm 里用 `uv` 管理 Python 环境的最佳实践(2025 版)**,尽量做到“IDE 原生支持 + 项目可复现 + 团队可落地”。
---
# TL;DR(结论先行)
- **用 PyCharm 自带的 `uv` 解释器类型**建/选环境,不要混用 pip/conda 的新建方式。自 2024.3.2 起 PyCharm 原生支持 `uv`,2025.1/2025.2 又补上了 Jupyter 与锁文件的 UI 按钮。([The JetBrains Blog](https://blog.jetbrains.com/pycharm/2025/01/pycharm-2024-3-2/?utm_source=chatgpt.com "PyCharm 2024.3.2: uv Package Management Support and More!"), [JetBrains](https://www.jetbrains.com/pycharm/whatsnew/2025-1/?utm_source=chatgpt.com "What's New in PyCharm 2025.1 - JetBrains"))
- **项目用 `pyproject.toml` + `uv.lock` 做“单一事实来源”**,把这两个文件提交到仓库,`.venv/` 忽略。([Astral Docs](https://docs.astral.sh/uv/guides/projects/?utm_source=chatgpt.com "Working on projects | uv - Astral Docs"))
- **新增依赖用 `uv add`,安装/同步用 `uv sync`**(开发依赖用 `--dev` 或分组 `--group`),不要在环境里临时 `pip install`。([Astral Docs](https://docs.astral.sh/uv/concepts/projects/dependencies/?utm_source=chatgpt.com "Managing dependencies | uv - Astral Docs"))
- **运行和调试用 “Run/Debug Configuration: uv”**;脚本也可用 `uv run` 与 PEP 723 **内联依赖**(适合一次性脚本/工具)。([JetBrains](https://www.jetbrains.com/help/pycharm/run-debug-configuration-uv.html "Run/Debug Configuration: uv | PyCharm Documentation"), [Astral Docs](https://docs.astral.sh/uv/guides/scripts/?utm_source=chatgpt.com "Running scripts | uv - Astral Docs"))
- **CI/生产**:克隆后 `uv sync --frozen`;若环境不得不用 pip,可从锁文件导出 `requirements.txt`。([Astral Docs](https://docs.astral.sh/uv/guides/projects/?utm_source=chatgpt.com "Working on projects | uv - Astral Docs"))
---
# 一、准备工作
1. **升级 PyCharm**:建议使用 2025.1 及以上(含 `uv` 解释器、Jupyter with uv),2025.2 还在 `.toml` 编辑器里提供了“Sync/Lock/Update”持久按钮来操作依赖与锁文件。([JetBrains](https://www.jetbrains.com/pycharm/whatsnew/2025-1/?utm_source=chatgpt.com "What's New in PyCharm 2025.1 - JetBrains"))
2. **安装 `uv`**(一次性):按官方安装脚本或包管理器安装;如需同时管理 Python 版本,可用 `uv python install`(可加 `--default` 暴露 `python/python3` 可执行文件)。([Astral Docs](https://docs.astral.sh/uv/getting-started/installation/?utm_source=chatgpt.com "Installation | uv - Astral Docs"))
---
# 二、在 PyCharm 正确配置 `uv` 解释器
> 目标:让 PyCharm 的“项目解释器”直接指向 `uv` 环境,这样 IDE 的包管理与运行都走 `uv`。
- **新建/现有项目绑定 `uv`**
打开 _Settings → Python | Interpreter_ → **Add Interpreter → Add Local Interpreter → 选择 `uv`**。
- **New uv environment**:选择基准 Python(可以是 `uv` 安装的版本),由 PyCharm 直接创建 `.venv`。
- **Existing uv environment**:先在项目根目录 `uv venv`(或 `uv sync` 自动创建 `.venv`),再在 PyCharm 里选这个现成环境。
完成后,你可以在解释器页用 IDE 的“安装/升级包”入口,后台会通过 `uv` 执行。([JetBrains](https://www.jetbrains.com/help/pycharm/uv.html "Configure a uv environment | PyCharm Documentation"))
> 备注:**新建项目时直接选 `uv`**,PyCharm 会自动生成 `pyproject.toml` 作为项目配置的起点。([JetBrains](https://www.jetbrains.com/help/pycharm/uv.html "Configure a uv environment | PyCharm Documentation"))
---
# 三、依赖管理(项目级,推荐工作流)
- **新增依赖**
```bash
uv add fastapi
uv add --dev pytest ruff # 开发依赖
uv add --group lint ruff # 自定义分组
```
以上操作会更新 `pyproject.toml` 并刷新 `uv.lock`。推荐把分组用于拆分“运行时 vs. 开发/工具”。([Astral Docs](https://docs.astral.sh/uv/concepts/projects/dependencies/?utm_source=chatgpt.com "Managing dependencies | uv - Astral Docs"))
- **安装/同步(全仓一致)**
```bash
uv sync # 按锁文件安装
uv sync --frozen # CI/生产:严格按锁文件,不解新依赖
```
`uv sync`/`uv run` 会确保锁与环境一致,避免“装了但没记”的漂移。([Astral Docs](https://docs.astral.sh/uv/guides/projects/?utm_source=chatgpt.com "Working on projects | uv - Astral Docs"))
- **IDE 内操作**
2025.2 开始,编辑 `pyproject.toml` 时右上角会出现 **Sync / Lock / Update** 固定按钮;点击即可让 IDE 通过 `uv` 同步或更新。([JetBrains](https://www.jetbrains.com/pycharm/whatsnew/ "What’s New in PyCharm 2025.2"))
- **为什么要提交 `uv.lock`**
`uv.lock` 记录**精确**解析结果(跨平台可复现),应随代码提交;`.venv/` 忽略。([Astral Docs](https://docs.astral.sh/uv/guides/projects/?utm_source=chatgpt.com "Working on projects | uv - Astral Docs"))
---
# 四、运行与调试
- **使用 `uv` 专用的 Run/Debug**
打开 _Run → Edit Configurations_,新建 **uv** 模板,填写 _Script path / Module name_、参数、环境变量等;选择你的 **uv 解释器** 即可。常见用法:
- 以模块运行:`Module name = uvicorn`,参数 `app:app --reload`。
- 普通脚本:填 `Script path = path/to/main.py`。
还可以在 “Before launch” 里加一个外部工具:`uv sync --frozen`,确保起跑前环境一致。([JetBrains](https://www.jetbrains.com/help/pycharm/run-debug-configuration-uv.html "Run/Debug Configuration: uv | PyCharm Documentation"))
- **脚本内联依赖(PEP 723)**
对一次性脚本很香:
```python
#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.12"
# dependencies = ["httpx>=0.27"]
# ///
import httpx
```
直接运行脚本或在 Run 配置里用 `uv` 运行,`uv` 会为该脚本临时准备隔离环境。([Astral Docs](https://docs.astral.sh/uv/guides/scripts/?utm_source=chatgpt.com "Running scripts | uv - Astral Docs"))
- **Jupyter(可选)**
2025.1 起,可用 `uv` 解释器启动 Jupyter 服务器/内核,Notebook 与项目依赖一致。([JetBrains](https://www.jetbrains.com/pycharm/whatsnew/2025-1/?utm_source=chatgpt.com "What's New in PyCharm 2025.1 - JetBrains"))
---
# 五、团队协作与 CI
- **开发者上手**:`git clone` → `uv sync` → 在 PyCharm 选择项目的 `uv` 解释器即可开始。`pyproject.toml` 与 `uv.lock` 必须在仓库里。([Astral Docs](https://docs.astral.sh/uv/guides/projects/?utm_source=chatgpt.com "Working on projects | uv - Astral Docs"))
- **CI**:用官方 `setup-uv` action 安装 `uv`,然后 `uv sync --frozen && pytest`。([GitHub](https://github.com/astral-sh/setup-uv?utm_source=chatgpt.com "astral-sh/setup-uv: Set up your GitHub Actions workflow ... - GitHub"))
- **与仅支持 pip 的平台集成**:从锁文件**导出** `requirements.txt`(例如 Cloud Functions/老镜像):
```bash
uv export --no-hashes --format requirements-txt > requirements.txt
```
或者使用 `uv pip compile pyproject.toml -o requirements.txt` 生成需求锁定文件。([Astral Docs](https://docs.astral.sh/uv/reference/cli/?utm_source=chatgpt.com "Commands | uv"))
---
# 六、常见问题排查
- **IDE 识别不到 `uv`**:在“添加解释器”对话框里手动指定 `uv` 可执行文件路径(Windows/Unix 路径不同);或确认 `uv` 已按官方方法正确安装。([JetBrains](https://www.jetbrains.com/help/pycharm/uv.html "Configure a uv environment | PyCharm Documentation"), [Astral Docs](https://docs.astral.sh/uv/getting-started/installation/?utm_source=chatgpt.com "Installation | uv - Astral Docs"))
- **解释器/索引异常**:偶发错误时,移除该解释器→关闭 IDE→删除项目 `.venv/`→重新 `uv venv`/`uv sync`→再添加解释器。([YouTrack](https://youtrack.jetbrains.com/issue/PY-80706/Errors-using-uv-environment?utm_source=chatgpt.com "Errors using uv environment : PY-80706 - JetBrains YouTrack"))
- **Auto‑import/索引不及时**:多数情况下是解释器没选到项目 `.venv` 或环境未同步,按上一步重新选解释器并 `uv sync` 即可(历史讨论指向同因)。([Stack Overflow](https://stackoverflow.com/questions/79452710/uv-in-pycharm-handling-local-imports?utm_source=chatgpt.com "uv in PyCharm / handling local imports - python - Stack Overflow"))
---
# 七、日常命令速查(最少记忆版)
```bash
# 初始化/引入
uv init # 生成 pyproject.toml 等
uv add <pkg> # 新增依赖
uv add --dev <pkg> # 新增开发依赖
uv sync # 按锁文件安装
uv lock # 只更新锁(不装)
uv run -m <module> ... # 在项目环境中运行模块/命令
uv export -o requirements.txt # 导出给仅支持 pip 的平台
```
(以上命令均与 PyCharm 的 `uv` 解释器/运行配置良好协作。)([Astral Docs](https://docs.astral.sh/uv/guides/projects/?utm_source=chatgpt.com "Working on projects | uv - Astral Docs"))
---
## 建议的项目结构(提交到 Git)
```Java
.
├── pyproject.toml # 依赖与元数据(手工/uv add 修改)
├── uv.lock # 锁文件(自动生成,务必提交)
├── .venv/ # 本地虚拟环境(忽略)
└── src/ tests/ ...
```
> 这样配好后,在 PyCharm 里就可以**用 GUI 装包/升级**、用 **uv Run/Debug** 运行、在 **Jupyter** 里复用同一环境,同时确保团队/CI 一致。([JetBrains](https://www.jetbrains.com/help/pycharm/uv.html "Configure a uv environment | PyCharm Documentation"))
---
如果你告诉我 **操作系统** 和 **PyCharm 版本**,我可以按你的环境给出一份带截图的**最少点击步骤**(比如如何把现有项目一键切换到 `uv` 解释器、如何在 Run 配置里加“启动前执行 `uv sync --frozen`”的小钩子)。
# Summary
是不是只要有 pyproject.toml,一跑 uv run 的命令,环境就会自动按照配置好的去构建了
UV 的优势
1. **速度**:UV 用 Rust 写的,比 Conda 快 10-100 倍
2. **自动化**:`uv run` 自动处理环境,不需要手动激活
3. **标准化**:`pyproject.toml` 是 Python 官方标准(PEP 518)
4. **锁文件**:`uv.lock` 精确锁定所有依赖版本
所以你的理解完全正确 - `pyproject.toml` 就是 UV 版本的环境配置文件,功能上等同于 Conda 的 `environment.yml`!
| 操作 | Conda | UV |
|---|---|---|
| 创建环境 | `conda create -n myenv` | `uv venv` 或自动创建 |
| 激活环境 | `conda activate myenv` | `source.venv/bin/activate` 或不需要 |
| 运行命令 | `python script.py` | `uv run python script.py` |
| 安装包 | `conda install numpy` | `uv pip install numpy` |
| 退出环境 | `conda deactivate` | `deactivate` |
为什么 UV 不强调激活?
1. **项目隔离**:UV 为每个项目创建独立的`.venv`
2. **自动检测**:`uv run` 自动找到正确的环境
3. **避免错误**:不会因忘记激活环境而使用错误的 Python
```Java
uv venv taurus --python 3.12
source taurus/bin/activate
uv pip install -r requirements.txt
```
`uv` 是由 Astral 公司开发的一款高性能 Python 包管理工具,旨在替代传统的 `pip`、`pip-tools` 和 `virtualenv` 等工具。它使用 Rust 编写,具有以下主要优势:
1. **极快的速度**:得益于 Rust 的高性能,`uv` 在依赖解析和包安装方面表现出色。在无缓存的情况下,`uv` 比 `pip` 和 `pip-tools` 快 8-10 倍;在有缓存的情况下,速度提升可达 80-115 倍。[^1]
2. **功能全面**:`uv` 提供了一站式的包管理体验,包括安装 Python 包、生成和管理锁文件、创建虚拟环境等功能。它支持可编辑安装、Git 依赖项、URL 依赖项、本地依赖项、约束文件、源码分发、自定义索引等,设计上与现有工具无缝兼容。[^2]
3. **轻量且独立**:`uv` 作为单一的静态二进制文件发布,无需预装 Python 环境即可运行,避免了在多个 Python 版本之间选择安装程序的困扰。[^3]
4. **全局缓存**:`uv` 使用全局模块缓存,避免重复下载和构建依赖项,并在支持的文件系统上利用 Copy-on-Write 和硬链接,最小化磁盘空间使用。[^4]
5. **无缝兼容**:`uv` 支持传统的 `requirements.txt` 和 `pip` 命令,可配合 `poetry`、`pdm` 等现代工具工作,生成与 `pip-compile` 兼容的锁文件。[^5]
通过这些特点,`uv` 为 Python 开发者提供了高效、可靠且易用的包管理解决方案,提升了开发体验和工作效率。
---
下面这张 **uv 常用操作 Cheat Sheet** 选取了最常用、最容易和 conda / pip 搞混的命令,按“装-建-管-跑-辅助”五大类归纳。所有示例均可直接在终端复制粘贴。
---
## 1 安装 / 升级
| 场景 | 命令 | 说明 |
|---|---|---|
| 一键安装(macOS/Linux)| `bash\ncurl -LsSf https://astral.sh/uv/install.sh \| sh\n` | 官方独立安装脚本,会把 `uv` 二进制放到 `~/.local/bin`(或 Windows 的 `%LOCALAPPDATA%\\uv`)[^turn7search1]|
| pipx 安装 | `pipx install uv` | 如果你已经在用 pipx 管理 CLI |
| 升级到最新 | `uv self update` | 自更新,可加 `--version 0.6.14` 锁定版本[^turn3view0]|
| 查看版本 | `uv version` | |
---
## 2 虚拟环境 & Python 版本
| 场景 | 命令 | 备注 |
|---|---|---|
| 在当前目录建 `.venv` | `uv venv` | 不用再手动 source 激活;uv 会自动发现并使用 `.venv`[^turn3view0]|
| 指定路径 / 名称 | `uv venv venv38` | |
| 选择 Python 版本 | `uv venv --python 3.11` | 若本机无该版本,uv 会自动下载 python-build-standalone 发行版[^turn7search0]|
| 列出已装 Python | `uv python list` | |
| 安装新版本 Python | `uv python install 3.12` | 多版本并存,互不干扰[^turn7search0]|
---
## 3 项目级工作流(“像 Cargo 一样”)
| 步骤 | 命令 | 相当于 |
|---|---|---|
| 初始化项目 | `uv init` | `poetry init` / `pipenv --three` |
| 添加依赖 | `uv add numpy pandas` | `pip install` + 写入 `pyproject.toml` + 更新 `uv.lock`[^turn5view0]|
| 移除依赖 | `uv remove pandas` | |
| 同步环境 | `uv sync` | 根据 `uv.lock` 安装 / 升级 / 移除 |
| 只刷新锁文件 | `uv lock` | 不触碰环境 |
| 导出 requirements.txt | `uv export --format requirements` | |
| 查看依赖树 | `uv tree` | `pipdeptree` 替代 |
---
## 4 一次性运行 / 工具模式
| 场景 | 命令 | 说明 |
|---|---|---|
| 运行脚本 | `uv run script.py` | 自动在当前 or 最近的虚拟环境里执行,没有就先建再跑[^turn5view0]|
| 运行并即时安装工具 | `uvx ruff check.` | `uvx` = `uv tool run`,临时环境用完即删[^turn7search4]|
| 安装持久化工具 | `uv tool install[email protected]` | pipx 的超快替代 |
| 执行已装工具 | `uv tool run mytool …` | |
---
## 5 pip-兼容接口(迁移老项目)
| 常见需求 | 命令 |
|---|---|
| 安装 | `uv pip install -r requirements.txt` |
| 卸载 | `uv pip uninstall package` |
| 列包 | `uv pip list` / `uv pip freeze` |
| 依赖树 | `uv pip tree` |
| 依赖一致性检查 | `uv pip check` |
| 用 requirements.txt 同步环境 | `uv pip sync requirements.txt` |
(全部子命令与 pip-tools / virtualenv 接口保持一致,但速度大幅提升)[^turn6view0]
---
## 6 辅助命令
| 命令 | 用途 |
|---|---|
| `uv cache dir` / `prune` | 查看或清理二进制与轮子缓存[^turn3view0]|
| `uv build` / `publish` | 构建 / 上传轮子到 PyPI |
| `--no-managed-python` | 强制使用系统 Python,禁止自动下载 |
---
### 与 conda / pipenv 的关键差异
1. **始终推荐虚拟环境**:uv 默认在项目根自动找到/创建 `.venv`,不激活也能用。
2. **锁文件 `uv.lock`**:精准固定依赖-平台-Python 版,跨平台可复现。
3. **内置 Python 版本管理**:省掉 `pyenv` / `conda install python=…`。
4. **极速解析与安装**:解析依赖用 Rust 写的 `uv-resolver`,官方基准比 pip 高阶工具快 $8-20\times$。
用这份速查表,基本可以把日常 conda + pip 的工作流整体迁移到 uv。祝你体验飞一般的依赖安装速度!