You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

额外注意事项

  1. 确保项目根目录下存在docs/conf.py文件,否则Sphinx会因为找不到配置文件报错。
  2. 如果你不需要固定Sphinx的版本,把sphinx>=7.2改成sphinx==*即可,同样能避免解析错误。
  3. uv sync --group docs只会同步docs组的依赖,如果你还需要安装项目主依赖,可以额外加一句uv sync(不带参数),但文档构建一般只需要docs组的依赖就够了。

这样调整后,Read the Docs的构建流程就能正确用uv安装Sphinx,不再出现解析失败或依赖组找不到的问题了~

火山引擎 最新活动