You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Read the Docs用旧代码构建,autodoc报gfortran不存在错误求助

解决Read the Docs (RTD) 构建时gfortran缺失及代码未更新问题

我之前也踩过类似的RTD构建坑,结合你描述的情况——注释了代码还报错、清理缓存没用,大概率是RTD默认从PyPI拉取了旧版本的wheel包,而非你GitLab仓库里的最新代码。下面是几个能快速解决的思路:

1. 强制RTD从Git仓库安装项目

RTD默认会优先从PyPI找你的项目包,哪怕你在仓库里更新了代码。要改掉这个行为,你需要在项目的.readthedocs.yaml配置文件里明确指定安装来源:

version: 2

python:
  install:
    # 强制从当前仓库目录安装,而非PyPI
    - method: pip
      path: .
    # 如果有文档专属依赖,可以加上这行
    - method: pip
      extra_requirements:
        - docs

如果还没创建.readthedocs.yaml,直接在项目根目录新建一个就行。这样RTD构建时会直接用你仓库里的最新代码,不会再去PyPI拉旧wheel。

2. 彻底清除RTD缓存,强制重建

有时候缓存会顽固残留,光清理版本缓存不够:

  • 在RTD的项目构建页面,选择Rebuild with clean选项(这个选项会完全清空之前的缓存,重新拉取代码、安装依赖);
  • 也可以在配置文件里直接禁用缓存:
    build:
      cache:
        enabled: false
    

3. 优化代码层面的规避逻辑

之前用if not 'sphinx' in sys.modules的判断可能不够可靠,因为autodoc运行时sphinx已经在sys.modules里了。换用RTD专属的环境变量判断会更准确:

import os

# 只有非RTD环境才执行需要gfortran的代码
if os.environ.get('READTHEDOCS') != 'True':
    # 这里放触发gfortran的代码,比如编译Fortran扩展等

另外,建议把需要编译的功能和文档依赖拆分,比如在setup.py或pyproject.toml里用extras_require,让RTD只安装文档所需的轻量依赖,完全跳过编译步骤。

4. 检查构建日志确认安装来源

去RTD的构建日志里找安装阶段的输出,如果看到类似Collecting your-package且指向PyPI的链接,说明还是从PyPI拉的包;如果看到Processing ./或Installing from local directory,才是正确使用了仓库代码。通过日志能快速定位问题是否真的出在安装源上。

内容的提问来源于stack exchange,提问作者Amos Egel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:49:55