uv支持跨平台确定性锁文件、隐式环境绑定的uv run、内建python版本管理、轻量级构建发布等高级特性。它通过uv.lock实现多平台一致安装,uv run免激活执行命令,uv python管理解释器,uv build/publish简化打包流程。

uv 支持哪些高级特性
uv 不是 pip 的简单加速版,它在保持接口兼容的同时,把多个 Python 开发环节收束进一个可执行文件里。真正值得用它的,是那些被依赖冲突、环境切换慢、跨平台锁文件不一致卡住的人。
uv.lock 文件的跨平台确定性解析
uv 默认生成 uv.lock,这个文件记录了每个包的完整哈希、版本、源地址和依赖图谱,且明确标注平台约束(如 platform_system == "Linux")。关键在于:同一份 uv.lock 在 Windows/macOS/Linux 上都能复现完全一致的安装结果——这在 pip + requirements.txt 里做不到,因为 pip 不做平台感知的锁定。
- 默认启用:只要运行
uv add或uv sync,就会自动生成或更新uv.lock - 手动触发:用
uv lock可强制重算并写入,适合 CI 中校验依赖变更 - 注意点:若项目含平台特化依赖(如
pywin32),uv.lock会自动按当前平台过滤,但可通过--platform参数指定目标平台生成锁文件
uv run:免激活执行命令的隐式环境绑定
uv run 是 uv 最易被低估的特性。它不依赖 shell 激活逻辑,而是直接读取项目根目录下的 pyproject.toml 或 uv.lock,启动一个临时隔离环境来运行命令——连 .venv 目录都不必存在。
- 典型用法:
uv run pytest、uv run python main.py、uv run my-cli-tool --help - 它会自动识别
[project.optional-dependencies],比如uv run --with dev pytest就能加载开发依赖 - 陷阱:如果当前目录没有项目配置(无
pyproject.toml或uv.lock),uv run会报错退出,不会 fallback 到全局 Python 环境
uv python:内建的 Python 版本管理器
uv 自带 uv python 子命令,能下载、列出、安装、卸载 Python 解释器,且所有操作仅影响用户级目录(默认 ~/.local/share/uv/python),不碰系统 Python 或 conda 环境。
- 查看可用版本:
uv python list --all(含 nightly 和预发布) - 安装指定版本:
uv python install 3.12.6,完成后uv python list即可见 - 项目绑定:
uv python pin 3.11会在pyproject.toml中写入requires-python = ">=3.11",后续uv venv或uv sync会自动选用匹配的已安装解释器 - 注意:Windows 用户需确保 PowerShell 执行策略允许脚本运行;macOS 上首次安装可能触发 Gatekeeper 提示,需手动授权
uv build / uv publish:轻量级打包发布能力
uv 能直接从 pyproject.toml 构建 wheel 或 sdist,并推送到 PyPI,省去 build、twine 等额外工具链。
-
uv build:默认构建 wheel,加--sdist可同时产出源码包 -
uv publish:需要先配置~/.pypirc或设置UV_PYPI_TOKEN环境变量,支持两次确认机制防误发 - 限制:不支持
setup.py,只认 PEP 621 标准的pyproject.toml配置;也不支持自定义构建后钩子
真正难的是让团队统一接受新范式:比如放弃手写 requirements.txt,信任 uv.lock 的完整性;又比如习惯用 uv run 替代 source .venv/bin/activate。这些不是技术障碍,而是协作惯性——一旦跨过去,就很难再回去用 pip + venv 组合了。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











