当前位置: 首页 > 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;…...

python的extend和append

在Python中&#xff0c;list的append和extend方法都是用来向列表添加元素的&#xff0c;但它们之间有一些关键的区别&#xff1a; append方法&#xff1a; append方法用于将一个对象添加到列表的末尾。无论添加的对象是什么类型&#xff08;整数、字符串、列表等&#xff09;&a…...

贪心算法相关知识

目录 基础 定义 工作原理 步骤一&#xff1a;分解问题 步骤二&#xff1a;确定贪心策略 步骤三&#xff1a;求解子问题 步骤四&#xff1a;合并结果 适用场景 活动安排问题 找零问题 哈夫曼编码 局限性 高级 与动态规划的对比 决策方式 最优性保证 时间复杂度和…...

济南比较出名的人物颜廷利:全球最具影响力的思想家起名大师

颜廷利教授是一位在思想、哲学、教育、易学、国学、心理学、命名学等多个领域具有深远影响的学者。他被誉为“世界点赞第一人”&#xff0c;在国内外享有极高的声誉&#xff0c;被认为是现代易经三大泰斗之首。山东目前比较厉害的名人颜廷利教授的学术成就和影响力横跨哲学、思…...

第100+27步 ChatGPT学习:概率校准 Temperature Scaling

基于Python 3.9版本演示 一、写在前面 最近看了一篇在Lancet子刊《eClinicalMedicine》上发表的机器学习分类的文章&#xff1a;《Development of a novel dementia risk prediction model in the general population: A large, longitudinal, population-based machine-learn…...

Python知识点:如何应用Python工具,使用NLTK进行语言模型构建

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; 如何使用NLTK进行语言模型构建 在自然语言处理&#xff08;NLP&#xff09;中&a…...

深入浅出MySQL

深入浅出MySQL 以下内容参考自 《MySQL是怎样运行的&#xff1a;从根儿上理解MySQL》一书&#xff0c;强烈推荐 存储引擎 对于不同的表可以设置不同的存储引擎 CREATE TABLE tableName (xxxx ) ENGINE 引擎名称; # 修改 ALTER TABLE tableName ENGINE xxx; 编码格式 my…...

【WRF工具】cmip6-to-wrfinterm工具概述:生成WRF中间文件

cmip6-to-wrfinterm工具概述 cmip6-to-wrfinterm工具安装cmip6-to-wrfinterm工具使用快速启动&#xff08;Quick start&#xff09;情景1&#xff1a;MPI-ESM-1-2-HR&#xff08;默认&#xff09;&#xff1a;情景2&#xff1a;BCMM情景3&#xff1a;EC-Earth3 更改使用&#x…...

大厂面试真题:阿里经典双重检测DCL对象半初始化问题

阿里面试题中提到的双重检测DCL&#xff08;Double-Checked Locking&#xff09;对象半初始化问题&#xff0c;是Java多线程编程中一个经典的问题。以下是对这一问题的详细解析&#xff1a; 一、双重检测锁&#xff08;DCL&#xff09;概述 双重检测锁是一种用于实现单例模式…...

20款奔驰CLS300升级原厂抬头显示HUD 23P智能辅助驾驶 触摸屏人机交互系统

以下是为您生成的一份关于 18 款奔驰 CLS 老款改新款的改装文案&#xff1a; 18 款奔驰 CLS 老款改新款&#xff1a;科技升级&#xff0c;畅享极致驾驶体验 在汽车改装的世界里&#xff0c;每一次的升级都是对卓越的追求。今天&#xff0c;让我们一同探索 18 款奔驰 CLS 老款改…...

GoogleNet原理与实战

在2014年的ImageNet图像识别挑战赛中&#xff0c;一个名叫GoogLeNet 的网络架构大放异彩。以前流行的网络使用小到11&#xff0c;大到77的卷积核。本文的一个观点是&#xff0c;有时使用不同大小的卷积核组合是有利的。 回到他那个图里面你会发现,这里的一个通过我们最大的池化…...