能,uv run 可直接执行 Python 脚本,但必须显式指定解释器(如 uv run python script.py),不支持省略 python 前缀;它默认在隔离环境中运行,自动解析并安装 pyproject.toml 中 [project] 定义的依赖,否则可能报 ModuleNotFoundError。

uv run 能直接执行 Python 脚本吗?
能,但不是像 python script.py 那样无感运行——uv run 的核心职责是「在隔离环境中运行命令」,它默认会查找并激活项目依赖(基于 pyproject.toml 或 requirements.txt),再执行目标命令。如果你只是想跑一个没依赖的单文件脚本,uv run python script.py 可以工作,但它仍会创建临时环境、解析依赖、启动新进程,开销比原生 python 大。
不写 python 前缀会报错:command not found
uv run script.py 会失败,错误类似 error: command 'script.py' not found in PATH。因为 uv run 不自动推断解释器,它只负责调用 shell 命令。你必须显式指定解释器或可执行命令:
-
uv run python script.py—— 最常用,等价于在干净虚拟环境中执行python script.py -
uv run python3.11 script.py—— 指定 Python 版本(需本地已安装该二进制) -
uv run --python 3.11 python script.py—— 强制 uv 下载并使用 3.11 运行时(即使系统没装)
依赖没生效?检查 pyproject.toml 的 [project] 和 [build-system]
uv run 是否自动安装依赖,取决于当前目录是否存在有效的 pyproject.toml,且其中包含 [project] 表。如果只有 [build-system](比如纯构建配置),uv 不认为这是个可运行的 Python 项目,也就不会安装 dependencies。
确保你的 pyproject.toml 至少有:
立即学习“Python免费学习笔记(深入)”;
仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...
[project] dependencies = ["requests", "click"] requires-python = ">=3.9"
否则 uv run python script.py 会运行成功,但脚本里 import requests 仍报 ModuleNotFoundError。
想跳过依赖安装?用 --no-deps 或切到非项目目录
有时候你只是临时测试一段代码,不想触发依赖解析。两个办法:
- 加
--no-deps:例如uv run --no-deps python script.py,uv 会跳过读取和安装依赖,仅执行命令 - 换路径:cd 到一个没有
pyproject.toml或requirements.txt的空目录再运行,uv 就不会尝试管理依赖
注意:--no-deps 不影响 Python 解释器本身的选择逻辑,--python 仍有效。
真正容易被忽略的是:uv 的“运行时缓存”行为。它会复用已下载的 Python 版本和已构建的依赖轮子,但如果你在不同项目中混用 --python 3.11 和 --python 3.11.9,uv 会当成两个不同运行时分别下载——磁盘空间可能悄悄涨得很快。

















