Read the Docs中用uv替代pip构建文档时,pyproject.toml解析失败及依赖组无法找到的问题
Read the Docs中用uv替代pip构建文档时,pyproject.toml解析失败及依赖组无法找到的问题
我来帮你一步步解决这两个问题,都是uv在Read the Docs环境下的配置细节问题,咱们逐个拆解:
第一个问题:pyproject.toml解析失败(版本规范错误)
你遇到的报错Failed to parse version: Unexpected end of version specifier, expected operator: sphinx,本质是uv的依赖解析器对无版本约束的包名产生了歧义——它误把sphinx当成了某个包的版本规范,而非包名本身。
虽然uv理论上支持纯包名的依赖声明,但部分版本的uv对这种写法的解析不够宽容,给sphinx加个显式的版本约束就能彻底解决这个问题。
修正后的pyproject.toml
[build-system] requires = ["flit_core >=3.2,<4"] build-backend = "flit_core.buildapi" [tool.uv.dependency-groups] # 给sphinx加版本约束避免解析歧义;如果不需要特定版本,用"sphinx==*"也可以 docs = ["sphinx>=7.2"] [project] name = "testProject" authors = [{name = "Me", email = "Me@real.email"}] dynamic = ["version", "description"]
第二个问题:找不到docs依赖组
原.readthedocs.yaml的环境配置有两个坑:一是用asdf安装uv依赖镜像自带asdf(但Read the Docs的Ubuntu 24.04镜像默认没有这个工具),二是UV_PROJECT_ENVIRONMENT的设置方式不够直接,导致uv没正确读取到pyproject.toml里的依赖组配置。
修正后的.readthedocs.yaml
version: 2 build: os: "ubuntu-24.04" tools: python: "3.12" jobs: pre_build: - | # 用uv官方脚本安装,比asdf更稳定可靠 curl -LsSf https://astral.sh/uv/install.sh | sh # 把uv加入系统PATH,确保后续命令能直接调用 export PATH="$HOME/.cargo/bin:$PATH" # 创建虚拟环境(指定Python版本和Read the Docs的默认虚拟环境路径) uv venv --python python3.12 $READTHEDOCS_VIRTUALENV_PATH # 激活虚拟环境,让uv能读取当前目录的pyproject.toml配置 source $READTHEDOCS_VIRTUALENV_PATH/bin/activate # 同步docs依赖组到虚拟环境 uv sync --group docs sphinx: configuration: docs/conf.py formats: all
额外注意事项
- 确保项目根目录下存在
docs/conf.py文件,否则Sphinx会因为找不到配置文件报错。 - 如果你不需要固定Sphinx的版本,把
sphinx>=7.2改成sphinx==*即可,同样能避免解析错误。 uv sync --group docs只会同步docs组的依赖,如果你还需要安装项目主依赖,可以额外加一句uv sync(不带参数),但文档构建一般只需要docs组的依赖就够了。
这样调整后,Read the Docs的构建流程就能正确用uv安装Sphinx,不再出现解析失败或依赖组找不到的问题了~




