jsuv init [name] uv venv uv add [package] uv sync
适用工具:Astral
uv
定位:Python 包管理、虚拟环境、Python 版本、项目依赖与脚本运行工具。
适合替代或覆盖pip、venv、virtualenv、pip-tools、部分poetry/pyenv使用场景。
uv 是 Astral 推出的 Python 包和项目管理工具,使用 Rust 编写,特点是:
pyproject.toml 管理项目依赖uv.lock 锁定依赖版本pip 的命令如果是新项目,推荐优先使用:
bashuv init
uv add
uv remove
uv sync
uv run
如果是已有的传统 requirements.txt 项目,可以使用:
bashuv venv
uv pip install
uv pip sync
uv pip freeze
powershellpowershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
安装完成后检查:
powershelluv --version
如果提示找不到 uv,重新打开终端后再执行。
bashcurl -LsSf https://astral.sh/uv/install.sh | sh
检查:
bashuv --version
如果已经有 Python,也可以:
bashpip install uv
不过日常使用更推荐官方独立安装方式,因为 uv 本身并不依赖 Python 才能运行。
新建一个 Python 项目:
bashuv init my-project
cd my-project
添加依赖:
bashuv add requests
添加开发依赖:
bashuv add --dev pytest
运行 Python:
bashuv run python main.py
同步项目依赖:
bashuv sync
移除依赖:
bashuv remove requests
这基本就是日常开发最常用的一套命令。
bashuv init my-project
进入项目:
bashcd my-project
也可以直接在当前目录初始化:
bashuv init
bashuv init my-app
较新的 uv 版本默认会为应用项目配置现代 Python 项目结构。
bashuv init --lib my-lib
适合:
如果只是想写一些脚本,不需要打包:
bashuv init --no-package
或者:
bashuv init --bare
典型项目中会看到:
textmy-project/ ├─ .venv/ ├─ .python-version ├─ pyproject.toml ├─ uv.lock ├─ README.md └─ src/
主要作用:
| 文件 | 作用 |
|---|---|
pyproject.toml | 项目配置、Python 版本、依赖声明 |
uv.lock | 锁定精确依赖版本 |
.python-version | 指定项目 Python 版本 |
.venv | 项目虚拟环境 |
src/ | 项目源代码 |
uv 可以直接安装和管理 Python。
bashuv python list
例如安装 Python 3.12:
bashuv python install 3.12
安装 Python 3.13:
bashuv python install 3.13
bashuv python pin 3.12
会生成或更新:
text.python-version
之后该项目会优先使用指定版本。
bashuv python find
指定版本:
bashuv python find 3.12
bashuv python uninstall 3.12
bashuv venv
默认创建:
text.venv
指定 Python:
bashuv venv --python 3.12
PowerShell:
powershell.venv\Scripts\Activate.ps1
CMD:
cmd.venv\Scripts\activate.bat
bashsource .venv/bin/activate
使用现代 uv 项目模式时,通常不需要。
例如:
bashuv run python main.py
uv run 会自动使用项目对应的环境。
所以相比:
bash.venv\Scripts\Activate.ps1 python main.py
更推荐:
bashuv run python main.py
例如:
bashuv add requests
多个依赖:
bashuv add requests pandas numpy
指定版本:
bashuv add "requests==2.32.5"
指定最低版本:
bashuv add "fastapi>=0.115"
bashuv add --dev pytest
例如:
bashuv add --dev pytest ruff mypy
开发依赖通常用于:
bashuv remove requests
删除开发依赖同样使用:
bashuv remove pytest
uv sync 用来让本地虚拟环境与项目配置、锁文件保持一致。
bashuv sync
典型场景:
从 Git 拉下项目:
bashgit clone xxx
cd project
uv sync
即可根据:
textpyproject.toml uv.lock
创建并同步项目环境。
通常不需要再:
bashpip install -r requirements.txt
执行:
bashuv add xxx
或者:
bashuv lock
会生成:
textuv.lock
它记录解析后的依赖版本。
建议项目中提交:
textpyproject.toml uv.lock
到 Git。
例如:
bashgit add pyproject.toml uv.lock
git commit -m "update dependencies"
这是 uv 非常常用的命令。
bashuv run python main.py
bashuv run python -m pytest
例如项目安装了:
bashuv add --dev pytest
直接:
bashuv run pytest
无需手动激活 .venv。
安装:
bashuv add fastapi uvicorn
运行:
bashuv run uvicorn main:app --reload
bashuv run python manage.py runserver
uv pip 提供类似传统 pip 的低层接口。
适合:
requirements.txt 项目pyproject.toml注意:
uv pip并不是内部调用 pip,而是 uv 自己实现的一套兼容接口。
先创建环境:
bashuv venv
然后:
bashuv pip install requests
安装多个:
bashuv pip install requests flask pandas
bashuv pip install -r requirements.txt
bashuv pip uninstall requests
bashuv pip list
bashuv pip show requests
bashuv pip tree
bashuv pip freeze
保存:
powershelluv pip freeze > requirements.txt
bashuv pip freeze > requirements.txt
bashuv pip check
假设项目有:
textrequirements.txt
执行:
bashuv pip sync requirements.txt
它会让当前环境严格与 requirements.txt 保持一致。
与:
bashuv pip install -r requirements.txt
区别可以简单理解为:
textinstall = 安装文件里缺少的依赖 sync = 把环境同步成文件描述的状态
如果环境里存在 requirements 中没有的包,sync 可能将其移除。
因此 CI、部署、可复现环境中,sync 更合适。
传统 pip-tools 用户可以使用:
bashuv pip compile requirements.in -o requirements.txt
例如 requirements.in:
textfastapi uvicorn requests
生成:
textrequirements.txt
再同步:
bashuv pip sync requirements.txt
例如:
toml[project]
name = "demo"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"fastapi>=0.115",
"requests>=2.32",
]
使用:
bashuv sync
安装依赖。
通常不建议手工维护复杂依赖版本,优先:
bashuv add fastapi uv add requests
由 uv 自动修改 pyproject.toml。
例如:
bashuv run --python 3.12 python main.py
或者先:
bashuv python pin 3.12
再:
bashuv run python main.py
如果只想临时运行,不想把依赖加入项目:
bashuv run --with requests python test.py
多个临时依赖:
bashuv run --with requests --with pandas python test.py
适合临时脚本和测试。
uv tool 可以运行或安装 Python CLI 工具,类似 pipx。
例如 Ruff:
bashuvx ruff check .
uvx 可以理解为:
bashuv tool run
bashuv tool install ruff
之后:
bashruff check .
bashuv tool list
bashuv tool uninstall ruff
| 需求 | 命令 |
|---|---|
| 查看版本 | uv --version |
| 初始化项目 | uv init |
| 新建项目 | uv init demo |
| 创建库 | uv init --lib demo |
| 创建虚拟环境 | uv venv |
| 安装 Python | uv python install 3.12 |
| 查看 Python | uv python list |
| 固定 Python | uv python pin 3.12 |
| 添加依赖 | uv add requests |
| 添加开发依赖 | uv add --dev pytest |
| 删除依赖 | uv remove requests |
| 同步项目 | uv sync |
| 更新锁文件 | uv lock |
| 运行 Python | uv run python main.py |
| 运行 pytest | uv run pytest |
| pip 模式安装 | uv pip install requests |
| 安装 requirements | uv pip install -r requirements.txt |
| 同步 requirements | uv pip sync requirements.txt |
| 查看安装包 | uv pip list |
| 查看依赖树 | uv pip tree |
| 导出包列表 | uv pip freeze |
| 检查依赖 | uv pip check |
| 临时运行工具 | uvx ruff check . |
| pip / Python | uv |
|---|---|
python -m venv .venv | uv venv |
pip install requests | uv pip install requests |
pip uninstall requests | uv pip uninstall requests |
pip list | uv pip list |
pip freeze | uv pip freeze |
pip install -r requirements.txt | uv pip install -r requirements.txt |
pipx run ruff | uvx ruff |
如果使用 uv 项目模式,更推荐:
| 传统方式 | uv 项目模式 |
|---|---|
| 修改 requirements | uv add xxx |
| 删除 requirements 中依赖 | uv remove xxx |
| pip install | uv sync |
| 激活环境后运行 | uv run xxx |
bashuv init my-api
cd my-api
bashuv python pin 3.12
如果本机没有:
bashuv python install 3.12
bashuv add fastapi uvicorn
bashuv add --dev pytest ruff
bashuv run uvicorn main:app --reload
bashuv run pytest
bashuv run ruff check .
如果老项目只有:
textrequirements.txt
有两种方案。
最简单:
bashuv venv uv pip install -r requirements.txt
运行:
bashuv run python main.py
这种迁移风险最低。
初始化:
bashuv init
然后把项目依赖逐步加入:
bashuv add fastapi uv add requests uv add pandas
最终依赖由:
textpyproject.toml uv.lock
管理。
推荐新项目和长期维护项目使用这种方式。
推荐提交:
textpyproject.toml uv.lock .python-version src/ README.md
通常不要提交:
text.venv/
.gitignore:
gitignore.venv/ __pycache__/ *.pyc .pytest_cache/ .ruff_cache/
uv 不是内部或外部命令Windows 安装之后如果出现:
textuv : 无法将“uv”项识别为 cmdlet...
先:
powershelluv --version
仍然不行,再检查安装目录是否已经加入 PATH。
直接:
bashuv run python main.py
或者:
bashuv run pytest
这是 uv 推荐的项目使用方式之一。
先执行:
bashuv venv
再:
bashuv pip install requests
uv pip install 默认倾向于向虚拟环境安装,而不是直接污染系统 Python。
uv add 和 uv pip install 有什么区别?uv addbashuv add requests
属于项目管理方式。
它会维护:
textpyproject.toml uv.lock .venv
适合正式项目。
uv pip installbashuv pip install requests
更接近传统 pip,只对环境进行包安装操作。
适合:
新项目优先:
bashuv add
uv sync 和 uv pip sync 区别bashuv sync
依据:
textpyproject.toml uv.lock
同步。
bashuv pip sync requirements.txt
依据:
textrequirements.txt
同步。
如果你主要在 Windows 开发,可以直接记这一套。
powershelluv init demo cd demo uv python pin 3.12 uv add fastapi uvicorn uv add --dev pytest ruff uv run python main.py
powershellcd existing-project uv venv uv pip install -r requirements.txt uv run python main.py
powershelluv init my-api cd my-api uv add fastapi uvicorn uv run uvicorn main:app --reload
如果不想记太多,先记住:
bashuv init
uv python pin 3.12
uv add xxx
uv remove xxx
uv sync
uv run xxx
uv venv
uv pip install xxx
其中现代项目最核心的是:
textuv init ↓ uv add ↓ uv sync ↓ uv run
推荐:
textpyproject.toml + uv.lock + uv add + uv sync + uv run
先用:
textuv venv + uv pip install -r requirements.txt
稳定后再考虑迁移。
在同一个项目里长期混合:
textpip install uv pip install uv add poetry add
最好固定一种依赖管理方式,否则项目依赖状态容易混乱。
https://docs.astral.sh/uv/https://docs.astral.sh/uv/guides/projects/https://docs.astral.sh/uv/pip/https://docs.astral.sh/uv/reference/cli/https://github.com/astral-sh/uv传统 Python:
text安装 Python → 创建 venv → 激活环境 → pip install → requirements.txt → python main.py
使用 uv:
textuv python install → uv init → uv add → uv sync → uv run
对于新项目,可以把 uv 理解成:
Python 版本管理 + 虚拟环境 + pip + requirements/lock + 项目运行工具的一体化方案。
本文作者:薛祁
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!