news 2026/9/5 8:13:52

uv 工具管理指南:uvx 与 uv tool install 实战,5 个场景管好 Python 命令行工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
uv 工具管理指南:uvx 与 uv tool install 实战,5 个场景管好 Python 命令行工具

uv 工具管理指南:uvx 与 uv tool install 实战,5 个场景管好 Python 命令行工具

【免费下载链接】uvAn extremely fast Python package and project manager, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/uv/uv

uv 工具管理指南:带你用 uvx 运行 Python 命令行工具、用 uv tool install 安装常用工具,从 30 秒上手到团队协作、避坑清单,一篇讲全。

先跑起来:30 秒体验 uvx

在终端里直接敲这一行:

uvx pycowsay "hello from uvx"

跑完你会看到一只 ASCII 奶牛把这句话叼在嘴边。它没装进你的任何环境:uv 工具管理为每次uvx调用准备一个临时隔离环境,装完即走,系统里不留痕迹。

uvx 还是 uv tool install?

一句话分工:临时用就uvx,常驻用就uv tool install

对比项uvxuv tool install
定位临时运行,跑完即弃常驻安装,可执行文件进 PATH
装到哪临时隔离环境每个工具一个独立环境
能否不带 uv 直接敲命令不能
适用场景偶尔用一次、试新版本每天都要用的工具

两者共享同一个缓存,所以第一次uvx试过的包,之后uv tool install几乎是秒装。

三分钟上手:安装 uv 并验证

没装过 uv 的话,一行命令搞定(Linux / macOS):

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows(PowerShell)则是irm https://astral.sh/uv/install.ps1 | iex。装完验证一下:

uv --version

能输出版本号就可以继续了。

uvx 实战:按场景走

uvx 基本运行

工具名直接跟参数就行,工具名后的所有内容都会原样传给工具本身:

uvx black --check main.py

注意uvx运行的是命令,不是包。大多数情况下命令名和包名一致,不一致时用--from指定包名,例如uvx --from httpie http

uvx 指定版本运行工具

@后跟版本号,精确锁版本;范围约束则用--from

uvx ruff@0.4.0 check
uvx --from "ruff>0.3.0,<0.5.0" ruff check

锁定版本后,任何人、任何时间跑同一条命令,行为都完全一致。

用 --with-requirements 给工具注入依赖

有些工具需要额外包配合,比如给 mkdocs 装主题插件。--with可以重复,--with-requirements可以整份 requirements 文件注入:

uvx --with-requirements docs/requirements.txt mkdocs serve

注入的包和工具同处一个隔离环境,互不污染。

从 Git 仓库运行

想试主干开发版而不是已发布版本,用--from git+指向仓库,可以带分支或 tag:

uvx --from git+https://github.com/astral-sh/black@main black --help

仓库用了 Git LFS 的话,再加--lfs

uvx 指定 Python 版本

--python决定工具跑在哪个解释器上;本机没有对应版本时,uv 会自动下载:

uvx --python 3.11 pycowsay "hi"

uv tool install 实战:把工具变成常驻命令

uv tool install 基本安装

uv tool install ruff

装完直接敲ruff --version就能用。注意装进 PATH 的只是可执行文件,包本身的模块依然隔离在工具自己的环境里,python -c "import ruff"会失败——这正是防冲突的关键。

uv tool install 指定版本安装

版本约束直接写进参数,约束会被记住:

uv tool install "ruff>=0.4,<0.5"

之后每次升级都不会跳出这个范围。

uv tool install 批量安装

一条命令装多个工具,适合初始化一台新机器:

uv tool install ruff black mypy

uv tool upgrade 升级工具

升级是独立的upgrade子命令(别名update):

uv tool upgrade ruff

升级会遵守安装时的版本约束;想突破约束,重新执行一次uv tool install并给出新约束即可。全部工具一起升:

uv tool upgrade --all

uv tool uninstall 卸载

按包名卸载,--all清空所有已装工具:

uv tool uninstall ruff

uv PATH 配置与 UV_TOOL_BIN_DIR

装完工具如果提示"command not found",先查可执行文件目录:

uv tool dir --bin

最快的修复方式是让 uv 自己写 shell 配置:

uv tool update-shell

手动配置的话,Linux / macOS 加到~/.bashrc~/.zshrc

export PATH="$HOME/.local/bin:$PATH"

Windows(PowerShell)加到用户环境变量:

$env:PATH += ";$env:LOCALAPPDATA\uv\tools\bin"

想换默认目录,设置UV_TOOL_BIN_DIR指定可执行文件目录、UV_TOOL_DIR指定工具环境目录,再重新安装即可。

团队协作:锁定版本 + 同步工具清单

Makefile 固定工具版本:把检查命令锁死在指定版本,谁的机器跑make lint结果都一样:

lint: uvx ruff@0.4.0 check .

CI 里同样推荐uvx按版本运行,不依赖 CI 镜像里预装的东西:

uvx mypy==1.13.0 src/

导出/导入工具清单uv tool list --show-version-specifiers会列出每个工具及安装时的版本约束,重定向到文件就是团队的工具清单;新机器按清单逐个装回去:

uv tool list --show-version-specifiers > tools.txt
xargs -L1 uv tool install < tools.txt

避坑清单

症状:安装后提示 command not found。解法:跑uv tool dir --bin确认目录,再执行uv tool update-shell写入 PATH 配置,重开终端。

症状:uvx 报依赖版本冲突。解法:给工具本身或冲突的包指定具体版本(uvx ruff@0.4.0),或用--with注入你认可的版本;确认是缓存问题就加--refresh强制重新解析。

症状:Docker 容器里装完工具找不到命令。解法:ENV里显式写死工具可执行目录的 PATH,别依赖update-shell(容器里没有交互式 shell 配置可写)。

症状:指定版本后提示找不到。解法:@语法只接受精确版本(ruff@0.4.0),范围约束必须走--from "ruff>=0.4";另确认版本写的是包名而不是命令名。

小结

  • 临时用uvx,常驻用uv tool install,共享缓存所以都快。
  • 版本约束写进参数,uv 会一直替你守着。
  • PATH 出问题先查uv tool dir --bin,再用uv tool update-shell修。

现在就去终端敲一条uvx pycowsay "上手成功",然后把你最常用的工具装起来。

更多工具用法见官方指南 docs/guides/tools.md

【免费下载链接】uvAn extremely fast Python package and project manager, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/uv/uv

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 8:13:41

生成式潜在流规划:让世界模型高效决策

做强化学习和机器人控制这两年&#xff0c;我有个特别深的体会&#xff1a;世界模型本身反而不太容易成为瓶颈&#xff0c;真正卡住落地进度的&#xff0c;往往是你拿着一个训练得很好的模型&#xff0c;却不知道该怎么高效地用它做规划。重建损失很低&#xff0c;隐空间也很干…

作者头像 李华
网站建设 2026/8/31 18:28:59

原创软件生存指南:依赖失效与成本失控下的技术加固方案

“想要杀死一个原创软件&#xff0c;有多简单&#xff1f;” 这个标题看起来像一句吐槽&#xff0c;但拆开了看&#xff0c;它其实是一道系统工程题。一个原创软件从写出来到被用户接受&#xff0c;中间隔着依赖管理、版本迭代、分发渠道、成本控制和合规风险。杀死它的方式非…

作者头像 李华
网站建设 2026/9/1 23:21:15

本地LLM+象棋引擎:构建离线人格化AI的架构与实践

如果你曾把一个云端大模型接进自己的应用&#xff0c;大概率经历过这几件事&#xff1a;响应慢、接口限流、上下文一长就“失忆”&#xff0c;以及最麻烦的——你的核心数据被发送到第三方服务器。这也是为什么越来越多人开始关注本地部署的 LLM。但本地 LLM 很容易被理解成“在…

作者头像 李华
网站建设 2026/8/31 20:13:08

PaddleOCR PP-StructureV3:从 PDF 到 Markdown 的完整文档解析指南

PaddleOCR PP-StructureV3&#xff1a;从 PDF 到 Markdown 的完整文档解析指南 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supp…

作者头像 李华
网站建设 2026/9/1 1:54:53

融合SAM提示机制的Prompt-UNet:实现高精度医学图像分割

简介&#xff1a;语义分割是计算机视觉的核心任务之一&#xff0c;旨在为图像中的每个像素分配类别标签&#xff0c;其原理是通过编码器提取特征、解码器恢复空间信息来实现像素级分类。在医学影像分析领域&#xff0c;精准的分割技术对于病灶检测、定量分析和辅助诊断具有重要…

作者头像 李华