当前位置: 首页 > news >正文

Python项目文档生成常用工具对比

写在前面:

通过阅读本片文章,你将了解:主流的Python项目文档生成工具(Sphinx,MkDocs,pydoc,Pdoc)简介及对比,本文档不涉及相关工具的使用。

概述

近期,由于工作需要,我们写了一个简单的Python项目,并需要为所写的Python项目提供接口文档,前期我们都是使用手写的方式完成,但是效率极低,为了提高效率,我们想通过代码自动提取注释的方式生成文档,由于前期没有Python开发极其相关工具链的经验,故专门花了些时间调研了生成Python项目接口文档的主流工具,以下是我们目前的主要需求:

  1. 自动提取,能够自动提取Python文件中的注释信息
  2. 支持附加信息,手册中除了自动提取的API还需手动添加一些其它内容,如概述,版权声明,快速开始等。
  3. 能生成常见格式文档,如HTML,PDF

Python项目文档生成常用工具

Sphinx

Sphinx 是一个强大的文档生成工具,最初为Python项目开发,但现在支持多种语言。它允许从代码中的文档字符串提取信息,并生成高质量的文档,支持多种格式(如HTML、PDF等)。

  • 主要特点:

    1. 多格式支持:输出HTML、LaTeX(PDF)、EPUB等多种格式。
    2. 扩展性强:通过插件扩展功能,支持自定义样式和主题。
    3. 文档层次:支持丰富的文档结构,适合大型项目的文档需求。
    4. 自动提取:通过autodoc扩展自动提取文档字符串。
  • 应用场景:

    1. 开源项目文档:Sphinx 被许多开源项目(如 Python、Django、Flask 等)广泛使用,用于撰写用户手册、API 文档和安装指南。它能够自动提取代码中的 docstring,生成 API 文档,减少手动维护的工作量。
    2. 技术文档:技术团队可以使用 Sphinx 来撰写和维护内部文档,如开发规范、架构设计文档、技术方案和项目说明书。Sphinx 的多层次结构和丰富的格式支持使得文档组织更加清晰。
    3. API 文档生成:Sphinx 特别适合用于生成 API 文档,支持多种编程语言。通过扩展(如 autodoc),可以自动从代码中提取文档,确保文档与代码保持同步。
    4. 项目报告和技术论文:Sphinx 支持 LaTeX 输出,可以用于生成技术报告、研究论文和学术文档。用户可以利用 LaTeX 的排版功能,生成高质量的 PDF 文档。
  • 主要缺点

    1. 学习曲线:Sphinx 使用 reStructuredText 作为文档编写格式,初学者可能需要一些时间来熟悉其语法和功能。
    2. 配置复杂性:对于大型项目,Sphinx 的配置文件(conf.py)可能变得复杂,尤其是在使用多个扩展和主题时。
    3. 生成速度:在处理非常大的文档集时,Sphinx 的生成速度可能较慢。
    4. 依赖性:某些功能依赖于第三方扩展,可能需要额外的安装和配置。
MkDocs

MkDocs 是一个用于创建项目文档的静态网站生成器,特别适合技术文档和开源项目的文档编写。它使用 Markdown 格式编写文档,提供简单易用的配置和美观的主题,能够快速生成和部署文档网站。。

  • 主要特点:

    1. Markdown 支持:MkDocs 使用 Markdown 格式编写文档,Markdown 是一种轻量级的标记语言,易于学习和使用,适合快速撰写文档。
    2. 简单的配置:MkDocs 的配置文件(mkdocs.yml)简单明了,用户可以轻松设置项目的基本信息、主题、导航结构等。
    3. 主题支持:MkDocs 提供多种主题,用户可以根据需要选择合适的主题来美化文档。常用的主题包括 Material for MkDocs 和 Read the Docs。
    4. 实时预览:在开发文档时,MkDocs 提供了一个内置的开发服务器,可以实时预览文档的更改,方便调试和修改。
    5. 扩展功能:MkDocs 支持插件,可以通过安装插件来扩展其功能,例如添加搜索功能、代码高亮等。
    6. 易于部署:生成的文档是静态文件,可以轻松部署到 GitHub Pages、Netlify 等静态网站托管服务上。
  • 应用场景

    1. 开源项目文档:MkDocs 非常适合用于开源项目的文档,开发者可以使用它来创建用户手册、API 文档和安装指南。
    2. 技术文档:技术团队可以使用 MkDocs 来撰写和维护内部文档,如开发规范、架构设计文档和技术方案。
  • 主要缺点

    1. 功能限制:MkDocs 主要专注于生成静态网站,功能相对简单,可能不适合需要复杂文档结构的项目。
    2. 主题和样式:虽然有多种主题可供选择,但自定义主题的灵活性可能不如 Sphinx。
    3. 扩展性:虽然支持插件,但相对于 Sphinx 的扩展生态,MkDocs 的插件数量和功能可能较少。
pydoc

pydoc 是Python内置的文档生成工具,旨在为Python模块和类提供简单的文档生成。它可以从代码中的文档字符串(docstring)提取信息,并生成HTML或文本格式的文档。

  • 主要特点:

    1. 简单易用:只需运行简单的命令,即可生成模块的文档,适合快速查看。
    2. 自动提取:自动提取文档字符串,生成的文档能反映最新的代码注释。
    3. 命令行接口:通过命令行可以轻松访问和查看文档,支持局部模块和整个包的文档生成。
    4. 基础格式:主要生成HTML和文本格式,适合快速查阅。
  • 应用场景:

    1. 适合小规模项目或快速原型开发时的基础文档需求。
    2. 用于临时查看模块文档,特别是在开发过程中。
  • 主要缺点

    1. 功能简单:pydoc 的功能相对简单,主要用于生成基本的模块文档,缺乏更复杂的文档生成能力。
    2. 输出格式有限:虽然可以生成 HTML 和 man 页,但不支持其他格式(如 PDF、ePub 等)。
    3. 交互性不足:虽然支持交互式帮助,但在大型项目中,交互式帮助的可用性和可读性可能不如其他工具。
Pdoc

Pdoc 是一个用于生成Python项目API文档的工具,特别强调简洁和易用性。它可以从Python模块和包中提取文档字符串(docstring),并生成友好的HTML文档。

  • 主要特点:
    1. 自动提取:能够自动提取Python代码中的文档字符串,快速生成API文档。
    2. Markdown支持:支持Markdown格式,可以在文档中使用Markdown语法,方便书写和格式化。
    3. 简洁易用:配置简单,使用方便,非常适合快速生成文档。
    4. 可定制化:虽然以简单为主,但也提供了一些定制选项,可以根据需要调整输出格式和样式。
  • 应用场景:
    1. 适合中小规模Python项目,尤其是需要快速生成API文档的情况。
    2. 当项目需要简单易懂的文档时,pdoc是一个很好的选择。
  • 主要缺点
    1. 功能有限:pdoc 主要专注于 API 文档生成,缺乏更全面的文档生成能力,可能不适合需要复杂文档结构的项目。
    2. 输出格式单一:主要生成 HTML 格式的文档,不支持其他格式(如 PDF)。
    3. 自定义选项少:相对于 Sphinx,pdoc 的自定义选项和扩展性较少,可能不满足某些高级需求。
    4. 依赖于 docstring:文档的质量和完整性高度依赖于代码中的 docstring,若 docstring 不完整或不规范,生成的文档也会受到影响。
常用工具的横向对比
工具名称文档编写格式输出格式主要应用场景主要应用语言支持的项目规模
SphinxRST,Markdown、python的docstring中提取HTML、PDF、LaTeX、EPUB等全面文档生成(用户手册、API文档)Python、C++等中到大规模项目
MkDocsMarkdown、python的docstring中提取HTML全面文档生成(用户手册、API文档)Python中小规模项目
pydocpython的docstring中提取HTML简单模块文档生成Python小规模项目
Pdocpython的docstring中提取HTML快速生成API文档Python中小规模项目

写在最后

基于此,我们选择了Sphinx作为文档生成工具,Sphinx是主流且强大的生成工具,如Python、PySide、NumPy、Pandas文档都是由Sphinx生成,Sphinx符合我们目前的需求,且随着产品的演进后期对文档有更高级的需求也可通过Sphinx满足。

当然,大家可以根据自己的需要选择合适自己项目的工具,上面介绍工具的Sphinx和pydoc我都有简单的试用,Sphinx确实很强大,但是生成pdf时,如果存在表格会有些格式问题(我使用latex方式生成pdf,rst的表格宽度无法控制,生成的表格无法全部显示,或者格式混乱),我还没有解决,后期如果有时间我再补充一下Sphinx的基本使用方式和常见问题。

相关文章:

Python项目文档生成常用工具对比

写在前面: 通过阅读本片文章,你将了解:主流的Python项目文档生成工具(Sphinx,MkDocs,pydoc,Pdoc)简介及对比,本文档不涉及相关工具的使用。 概述 近期,由于…...

教育领域的技术突破:SpringBoot系统实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...

RabbitMQ入门3—virtual host参数详解

在 RabbitMQ 中,创建 Virtual Host 时会涉及到一些参数配置,比如 tags 和 Default Queue Type。下面是对这两个参数的详细解释: 1. Tags Tags 是 Virtual Host 的标记,用来为 Virtual Host 添加元数据,帮助你管理和组…...

【Nacos入门到实战十四】Nacos配置管理:集群部署与高可用策略

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…...

UE5+ChatGPT实现3D AI虚拟人综合实战

第11章 综合实战:UE5ChatGPT实现3D AI虚拟人 通过结合Unreal Engine 5(UE5)的强大渲染能力和ChatGPT的自然语言处理能力,我们可以实现一个高度交互性的AI虚拟人。本文将详细介绍如何在UE5中安装必要的插件,配置OpenAI…...

[图形学]smallpt代码详解(2)

一、简介 本文紧接在[图形学]smallpt代码详解(1)之后,继续详细讲解smallpt中的代码,包括自定义函数(第41到47行)和递归路径跟踪函数(第48到74行)部分。 二、smallpt代码详解 1.自…...

vmstat命令:系统性能监控

一、命令简介 ​vmstat​ 是一种在类 Unix 系统上常用的性能监控工具,它可以报告虚拟内存统计信息,包括进程、内存、分页、块 IO、陷阱(中断)和 CPU 活动等。 ‍ 二、命令参数 2.1 命令格式 vmstat [选项] [ 延迟 [次数] ]2…...

linux部署NFS和autofs自动挂载

目录 (一)NFS: 1. 什么是NFS 2. NFS守护进程 3. RPC服务 4. 原理 5. 部署 5.1 安装NFS服务 5.2 配置防火墙 5.3 创建服务端共享目录 5.4 修改服务端配置文件 (1). /etc/exports (2). nfs.conf 5.5 启动nfs并加入自启 5.6 客户端…...

WPF RadioButton 绑定boolean值

<RadioButtonMargin"5"Content"替换"IsChecked"{Binding CorrectionOption.ReCorrectionMode}" /> <RadioButtonMargin"5"Content"平均"IsChecked"{Binding CorrectionOption.ReCorrectionMode, Converter{St…...

2024 ciscn WP

一、MISC 1.火锅链观光打卡 打开后连接自己的钱包&#xff0c;然后点击开始游戏&#xff0c;答题八次后点击获取NFT&#xff0c;得到有flag的图片 没什么多说的&#xff0c;知识问答题 兑换 NFT Flag{y0u_ar3_hotpot_K1ng} 2.Power Trajectory Diagram 方法1&#xff1a; 使用p…...

代码随想录--字符串--重复的子字符串

题目 给定一个非空的字符串&#xff0c;判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母&#xff0c;并且长度不超过10000。 示例 1: 输入: "abab" 输出: True 解释: 可由子字符串 "ab" 重复两次构成。示例 2: 输入: "…...

No.5 笔记 | 网络端口协议概览:互联网通信的关键节点

1. 常用端口速览表 端口范围主要用途1-1023系统或特权端口1024-49151注册端口49152-65535动态或私有端口 远程访问类&#xff08;20-23&#xff09; 端口服务记忆技巧安全风险21FTP"File Transfer Port"爆破、嗅探、溢出、后门22SSH"Secure Shell"爆破、…...

手机地址IP显示不对?别急,这里有解决方案

在当今的数字化生活中&#xff0c;手机已成为我们连接世界的重要工具。而手机的IP地址&#xff0c;作为我们在网络上的“身份证”&#xff0c;其准确性对于网络体验至关重要。然而&#xff0c;有时我们可能会遇到手机IP地址显示不正确的问题&#xff0c;这不仅会影响网络连接质…...

人工智能对未来工作影响的四种可能性

随着人工智能&#xff08;AI&#xff09;技术的迅速发展&#xff0c;其对人类工作的影响已成为讨论的热点话题。我们经常听到有关AI威胁论的观点&#xff0c;担心它将取代人类工作&#xff0c;但也有专家认为AI将成为一种辅助工具&#xff0c;帮助人类提升工作效率。宾夕法尼亚…...

SpringBoot+ElasticSearch7.12.1+Kibana7.12.1简单使用

案例简介 本案例是把日志数据保存到Elasticsearch的索引中&#xff0c;并通过Kibana图形化界面的开发工具给查询出来添加的日志数据&#xff0c;完成从0到1的简单使用 ElasticSearch职责用法简介 ElasticSearch用在哪 ElasticSearch在我这个案例中&#xff0c;不是用来缓解增…...

RESTful风格接口+Swagger生成Web API文档

RESTful风格接口Swagger生成Web API文档 文章目录 RESTful风格接口Swagger生成Web API文档1.RESTful风格接口RESTful简介RESTful详细图示常见http状态码springboot实现RESTfulRESTful springboot设计实例demo 2.Swagger生产Web API文档Swagger简介使用Swagger1.加入依赖2.配置S…...

性能测试学习2:常见的性能测试策略(基准测试/负载测试/稳定性测试/压力测试/并发测试)

一.基准测试 1&#xff09;概念 狭义上讲&#xff1a;就是单用户测试。测试环境确定后&#xff0c;对业务模型中的重要业务做单独的测试&#xff0c;获取单用户运行时的各项性能指标。 广义上&#xff1a;是一种测量和评估软件性能指标的活动。可以在某个时刻通过基准测试建立…...

【C++】—— 继承(上)

【C】—— 继承&#xff08;上&#xff09; 1 继承的概念与定义1.1 继承的概念1.2 继承定义1.2.1 定义格式1.2.2 继承父类成员访问方式的变化 1.3 继承类模板 2 父类和子类对象赋值兼容转换3 继承中的作用域3.1 隐藏规则3.2 例题 4 子类的默认成员函数4.1 构造函数4.1.1 父类有…...

【2024保研经验帖】东南大学计算机学院夏令营

前言 背景&#xff1a;末211&#xff0c;专业计算机科学与技术&#xff0c;rk前5%&#xff0c;无科研&#xff0c;只有几个竞赛 东南大学计算机学院夏令营需要老师推荐&#xff0c;一个老师的推荐名额感觉应该挺多的&#xff0c;因为学硕和专硕都进了两百多人&#xff0c;总共…...

dz论坛可可积分商城插件价值399元

界面简洁美观大方&#xff0c;适合各类站点。支持多用户商城&#xff0c;可让商家入驻站点发布商品&#xff0c;亦可站长自己发布商品。支持向商家抽佣抽成功能&#xff0c;可设置商家在成交商品后按一定比例扣除抽成&#xff0c;达到网站盈利目的采用队列技术处理&#xff0c;…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...