uv-scripts 说明如何用 uv 运行与编写独立 Python 脚本,核心是 uv run,可自动管理依赖。
用途与主要能力:运行脚本 uv run script.py;运行模块 uv run -m http.server 8000;从标准输入 uv run -;here-doc 用 uv run - <<EOF;跳过项目安装 uv run --no-project script.py;单次依赖 uv run --with requests --with rich script.py;指定 Python uv run --python 3.12 script.py;初始化元数据 uv init --script script.py --python 3.12;添加脚本依赖 uv add --script script.py requests rich;锁定脚本依赖 uv lock --script script.py。
内联元数据(推荐):脚本用 # /// script 块声明 dependencies,即使为空也必须提供。示例声明 requests<3 与 rich 后可直接 uv run,内联元数据会忽略项目依赖,因此无需 --no-project。还可用 requires-python = ">=3.12",uv run 会定位并在需要时下载对应 Python。
项目与无项目模式:在有 pyproject.toml 的目录中 uv run 会先安装项目;不需要项目代码时加 --no-project,且该标志必须在脚本名之前。
可执行脚本与可复现性:shebang 用 #!/usr/bin/env -S uv run --script,chmod +x 后可直接执行,依赖仍由内联元数据提供。uv lock --script example.py 生成 example.py.lock,后续 uv run --script、uv add --script、uv export --script 复用该锁;可加 exclude-newer 提高跨时间可复现性。
其他:uv add --index "https://example.com/simple" --script example.py 可添加替代索引;Windows 上 .pyw 用 pythonw 运行,依赖同样可用。
常见错误:手动安装依赖后仍用 python script.py;在项目目录中忘记 --no-project;把 --no-project 放在脚本名之后;想自包含却漏写 # /// script 元数据块;误以为内联元数据会使用项目依赖。