新闻详情

新闻详情

首页 / 资讯中心 / 详情

深入解析 Ray 文档的 Sphinx autosummary 自定义模板:class_without_autosummary.rst 的原理与实践

发布时间:2026/9/19 8:32:44来源:尧图网络
深入解析 Ray 文档的 Sphinx autosummary 自定义模板:class_without_autosummary.rst 的原理与实践
深入解析 Ray 文档的 Sphinx autosummary 自定义模板class_without_autosummary.rst 的原理与实践【免费下载链接】rayRay is an AI compute engine. Ray consists of a core distributed runtime and a set of AI Libraries for accelerating ML workloads.项目地址: https://gitcode.com/gh_mirrors/ra/ray本指南以 Ray 开源仓库中 doc/source/_templates/autosummary/class_without_autosummary.rst 为核心系统讲解 Ray 文档系统如何借助 Sphinx 的 autosummary 扩展与 Jinja2 模板机制自动生成类级 API 参考页。读完本文你将掌握该模板的逐行语义、它与默认模板的差异、在 Ray 各模块 API 文档中的真实调用方式以及如何把同样的模式复用到自己的 Sphinx 文档项目中从而绕过继承属性告警并产出高可读性的 API 页面。模板文件的定位Ray API 文档自动化的基石Ray 的文档体量非常庞大涵盖ray.data、ray.serve、ray.train、ray.tune、ray.job_submission、ray.observability等十余个子系统的 API 参考不可能为每个类手工维护一份独立的.rst页面。解决方案是在 doc/source/conf.py 中通过templates_path [_templates]启用自定义模板目录并借助 Sphinx autosummary 扩展在构建期自动展开生成文档页。class_without_autosummary.rst正是这一体系中的类页面模板之一当一个类被.. autosummary::指令收录时Sphinx 会调用该模板渲染出这个类专属的文档页面。它的全文只有十余行却承担了标题生成、模块上下文绑定、成员与继承关系展开三件核心工作。为什么需要去掉 autosummary的模板已知 Bug 的规避在阅读模板正文之前先看它的姊妹模板 class.rst 顶部保留的设计注释这段注释正是理解本模板存在意义的关键Its a known bug (https://github.com/sphinx-doc/sphinx/issues/9884) that autosummary will generate warning for inherited instance attributes. Those warnings will fail our build. For now, we dont autosummary classes with inherited instance attributes. To opt out, use :template: autosummary/class_without_autosummary.rst也就是说Sphinx 的 autosummary 对继承自父类的实例属性inherited instance attributes会产生告警Ray 的文档 CI 把这类告警当作构建失败处理warning-is-error因此必须规避class_without_autosummary.rst放弃在类页内继续嵌套.. autosummary::来罗列成员而是直接用.. autoclass::的:members:选项一次性展开成员从而避免触发该 Bug。这是 Ray 在生产级文档工程中以模板适配已知上游缺陷的典型范例。逐行解析模板语义完整模板内容如下原文件为 class_without_autosummary.rst{{ fullname.split(.)[-1] | escape | underline}} .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} :members: :show-inheritance:1. Jinja2 标题表达式短标签 下划线标题{{ fullname.split(.)[-1] | escape | underline}}fullname是类对象的完全限定名fully-qualified path例如ray.data.Dataset.map或ray.job_submission.JobStatus.split(.)[-1]取出点分路径的最后一节即叶子名让页面 H1 与 API 侧边栏标签保持简洁而不是重复一长串完整点分路径escape过滤器对特殊字符做转义防止类名中可能出现的_、*等字符被 reStructuredText 误解析underline是 Sphinx 提供给模板的标题下划线过滤器会根据标题长度自动生成对应的、-、~下划线层级满足 reST 章节标题语法要求。从源码结构看模板中的fullname、module、objname等变量由 Sphinx autosummary 在生成每个条目时注入开发者无需手工填充。2... currentmodule::绑定模块上下文.. currentmodule:: {{ module }}该指令将后续所有对象名称解析的默认模块设为当前类的所属模块例如ray.job_submission。这样下面的.. autoclass:: {{ objname }}才能正确解析类对象同时确保页面内其他简写形式的对象引用都能落到正确的命名空间。3... autoclass::核心成员展开指令.. autoclass:: {{ objname }} :members: :show-inheritance::members:自动收集并渲染该类所有公开成员方法、属性的文档字符串是不依赖嵌套 autosummary 也能完整展开成员的关键选项也正是该模板规避 Sphinx Bug #9884 的手段:show-inheritance:在类页顶部生成继承关系树展示父类、基类链路方便读者理解 API 的继承来源。模板家族对比同一场景下的四种变体Ray 在 doc/source/_templates/autosummary/ 目录下维护了多个同类模板用于适配不同的文档场景模板文件特点适用场景class_without_autosummary.rst:members::show-inheritance:不嵌套 autosummary默认的类页模板兼容继承实例属性场景默认推荐class_without_autosummary_noindex.rst在上一模板基础上增加:noindex:需要渲染成员、但避免该条目再次进入索引避免重复索引/交叉引用冲突class_without_autosummary_noinheritance.rst仅:members:去掉继承树不希望展示基类链路、页面更聚焦自身 API 的场景class_without_init_args.rst.. autoclass:: {{ objname }}()带空括号 :members:需要展示构造函数签名显示()的场景class.rst保留.. autosummary::嵌套且使用自定义过滤器过滤未文档化成员无继承实例属性告警风险的类走完整 autosummary 路线class_v2.rst通过has_public_constructor、get_api_groups、select_api_group等自定义过滤器做 API 分组需要把成员按功能分组、构造器可控展示的高级版base.rst.. auto{{ objtype }}:: {{ objname }}的通用模板函数、类等任意对象类型的兜底模板autopydantic.rst基于.. autopydantic_model::指令展开 pydantic 模型字段与校验器摘要Ray 中以 pydantic 模型定义的配置/数据结构类其中noindex、noinheritance两个变体与目标模板的区别仅在一行指令选项上方便文档维护者按需取舍体现了 Ray 文档模板细粒度复用的设计思路。如何在文档中启用该模板:template:选项与真实用例在任意的.. autosummary::指令块中通过:template:选项即可为特定条目指定渲染模板。以 doc/source/cluster/running-applications/job-submission/jobs-package-ref.rst 为例JobStatus --------- .. autosummary:: :nosignatures: :toctree: doc/ :template: autosummary/class_without_autosummary.rst JobStatus这里:template: autosummary/class_without_autosummary.rst指示 Sphinx渲染JobStatus时使用本模板而不是默认模板从而在ray.job_submission模块下生成JobStatus的完整类参考页。在 Ray 文档全仓库中该模板被广泛用于各子系统的 API 参考可归为以下几类任务/作业 APIjobs-package-ref.rst 中的JobStatus、JobType数据 APIdata/api/checkpoint.rst、data/api/execution_options.rst、data/api/loading_data.rst 中的数据集加载与执行选项类训练 APItrain/api/api.md、train/api/deprecated.rst调优 APItune/api/result_grid.rst、tune/api/schedulers.rst、tune/api/integration.rstServe APIserve/api/index.md 等多处观测性 APIray-observability/reference/api.rst沙箱/运行时 APIray-core/api/sandboxes.md。值得注意的是data/api/llm.rst 中则使用了class_without_autosummary_noinheritance.rst说明同一类场景下维护者会针对是否展示继承关系做出差异化选择。模板与自定义过滤器的联动构建期如何保证输出质量除了:members:展开之外Ray 还在构建期对成员做了文档完整性过滤。在 doc/source/api_autogen.py 中定义了自定义过滤器def filter_out_undoc_class_members(member_name, class_name, module_name): ...并在 doc/source/api_autogen.py 中注册进 Sphinx 的 Jinja2 过滤器环境FILTERS[filter_out_undoc_class_members] filter_out_undoc_class_members该过滤器在 class.rst 中被调用用于剔除没有 docstring 的成员防止生成空白条目。结合doc/source/_templates目录中class_v2.rst使用的has_public_constructor、get_api_groups、select_api_group等过滤器定义同样位于 api_autogen.py可以看到 Ray 的模板体系已经把成员筛选、分组、构造器判断等逻辑下沉到 Python 过滤器中模板本身保持极简。这种模板负责布局、过滤器负责数据加工的分层设计值得在自建文档项目中借鉴。整个渲染链路可概括为conf.py声明templates_path [_templates]启用自定义模板目录API 参考页中的.. autosummary::指令收录类并通过:template:指定渲染模板Sphinx 构建期注入fullname、module、objname等变量模板借助currentmodule、autoclass指令与:members:、:show-inheritance:选项生成最终 reST 页面api_autogen.py中的过滤器在渲染期完成成员过滤与分组。复用指南把该模式迁移到你的 Sphinx 项目如果你在自己的项目中遇到autosummary 对继承实例属性产生告警或默认类页过于冗长的问题可按照 Ray 的做法三步迁移复制模板将 class_without_autosummary.rst 放入你项目的_templates/autosummary/目录并在conf.py中配置templates_path [_templates]按需选型若条目已由其他页面索引、希望避免重复收录改用class_without_autosummary_noindex.rst若不想展示继承树改用class_without_autosummary_noinheritance.rst启用模板在目标.. autosummary::指令块中加入:template: autosummary/class_without_autosummary.rst即可让指定类走该模板渲染。小结class_without_autosummary.rst虽然只有十余行却是 Ray 大规模 API 文档自动化体系中承上启下的关键一环它以去掉嵌套 autosummary、改用:members:展开的方式绕过了 Sphinx 上游已知 Bug同时通过fullname.split(.)[-1]、escape、underline的组合生成了简洁可读的页面标题。配合 class.rst、class_v2.rst 等变体模板以及 api_autogen.py 中的自定义过滤器Ray 文档团队在自动生成与构建质量之间取得了精细平衡。理解这份模板不仅能让你读懂 Ray 各模块 API 参考页的生成机制也能直接指导你在自己的 Sphinx 文档工程中落地同样的自动化策略。【免费下载链接】rayRay is an AI compute engine. Ray consists of a core distributed runtime and a set of AI Libraries for accelerating ML workloads.项目地址: https://gitcode.com/gh_mirrors/ra/ray创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

WRF模式Linux环境搭建全攻略:CentOS分区、PGI编译器与NetCDF配置 2026/9/19 9:20:51

WRF模式Linux环境搭建全攻略:CentOS分区、PGI编译器与NetCDF配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
QMK 固件中 Clueboard 17% 数字小键盘的完整移植指南:矩阵、自定义背光驱动与默认键位解析 2026/9/19 9:20:51

QMK 固件中 Clueboard 17% 数字小键盘的完整移植指南:矩阵、自定义背光驱动与默认键位解析

QMK 固件中 Clueboard 17% 数字小键盘的完整移植指南:矩阵、自定义背光驱动与默认键位解析 【免费下载链接】qmk_firmware Open-source keyboard firmware for Atmel AVR and Arm USB families 项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware …

阅读更多 →
slime 后训练框架:拆解 Megatron + SGLang 的 RL 数据闭环 2026/9/19 9:20:51

slime 后训练框架:拆解 Megatron + SGLang 的 RL 数据闭环

slime 后训练框架:拆解 Megatron SGLang 的 RL 数据闭环 【免费下载链接】slime slime is an LLM post-training framework for RL Scaling. 项目地址: https://gitcode.com/GitHub_Trending/slime12/slime 做 RL 训练的人大多卡在 rollout(推理…

阅读更多 →
海康工业相机SDK开发实战:从环境搭建到实时图像采集避坑指南 2026/9/19 9:20:51

海康工业相机SDK开发实战:从环境搭建到实时图像采集避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
高速铁路接触网弓网耦合设计原理与参数优化 2026/9/19 9:20:51

高速铁路接触网弓网耦合设计原理与参数优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
PV-RCNN实战解析:从KITTI数据准备到3D目标检测模型训练与部署 2026/9/19 9:17:50

PV-RCNN实战解析:从KITTI数据准备到3D目标检测模型训练与部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞