热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:使用sphinx快速生成PythonAPI文档

篇首语:本文由编程笔记#小编为大家整理,主要介绍了使用sphinx快速生成PythonAPI文档相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了使用sphinx快速生成Python API 文档相关的知识,希望对你有一定的参考价值。



一  简单介绍

不管是开源还是闭源,文档都是很重要的。当然理论上说,最好的文档就是代码本身,但是要让所有人都能读懂你的代码这太难了。所以我们要写文档。大部分情况,我们不希望维护一份代码再加上一份文档,这样做很容易造成文档和代码的不一致,程序员最讨厌更新文档了。所以最佳实践就是在程序员代码中加注释,然后通过构建脚本自通生成文档,包括html,latex,pdf等。
对应于Pyhon,有很多可供选择的工具:



  • sphinx 中文版介绍 Sphinx使用 reStructuredText作为标记语言(类似Markdown),可扩展,功能强大。要注意的是何有一个开源的搜索也叫Sphinx,斯芬克斯果然太受欢迎,开源的世界起个名字不容易呀。




  •  pdoc 是一个简单易用的命令行工具,可以生成Python的API文档

  •  Doxygen 是老牌的文档生成工具,可以针对各种语言生成文档,我们以前在C++的项目中曾经使用过

  •  其他还有诸如 pydoc , pydoctor 等等


二 安装



  • 要安装Sphinx,不同的操作系统有不同的安装方式,Sphinx的源代码在这里 !

  • 你也可以自己构建。我推荐使用pip install sphinx !

  • 如果你安装了Anaconda,Sphinx已经包含在内了!


三 创建一个sphinx项目

下面的命令会自动生成一个默认的Sphinx模板:


mkdir yourdir
cd yourdir
sphinx
-quickstart

执行期间,它会一步步的询问对模板的设置,除了一些必须填写的选项,大部分填写默认值就行了,你会遇到这样一条叫autodoc的,需要选择yes!


autodoc: automatically insert docstrings from modules (y/n) [n]

然后默认的目录就生成了,大概是这个样子


- yourdir/ # 刚才新建的目录
- source/ # 存放Sphinx工程源码
- build/ # 存放生成的文档
Makefile

现在执行如下指令,就会生成一份空文档,存放在/build/html里,点击index.html就可以打开一个空的网页,虽然没有内容,但是整体的结构还是在的!


sphinx-build -b html source build
make html

source/目录里有两个文件,分别是conf.pyindex.rst,下面对它们进行进一步的介绍

(1) index.rst

.rst是reStructuredText,和Markdown一样是一种标记语言,具体的语法可以看这里 reStructuredText Primer。实际上,我们在使用Sphinx的过程中最主要就是对这些rst文件进行修改,而Sphinx所做的事情就是读取这些rst文件,并转换为特定格式的文档,在前面的步骤中,index.rst实际上被转换为build/html/index.html,而实际上在rst文档内你可以写任何东西,最后这些都会被转换到输出文档中。
打开index.rst,可以看到这样的内容,这是rst的一个语法,它使用了一个toctree节点,并设置了一些参数,而这个toctree节点是必须的。


.. toctree::
:maxdepth:
2
:caption: Contents:

(2) conf.py

这是运行sphinx生成文档时会加载的配置,你可以通过对它进行修改来改变生成文档的行为。

四 一个具体的例子

假设现在我们有一个叫run.py的文件,如下


# run.py
def run(name):
"""
this is how we run
:param name name of people who runs
"""
printname, \'is running\'

那么需要如何生成文档呢?下面一步步带你完成



  1. 创建一个文件夹demo/,并将run.py放到里面

  2. 在demo里创建一个docs目录,进入docs/目录,当然这里你可以随意选定文件夹,只是这样更规范一些

  3. 生成Sphinx默认模板,设置项目名为demo,并开启autodoc(运行sphinx-quickstart

  4. 进入source目录,打开index.rst

  5. 将index.rst 修改为如下,实际上这里面可以写任何满足rst规范的内容


Welcome to demo\'s API Documentation
======================================

.. toctree::
:maxdepth:2
:caption: Contents:
Introduction
============

This is the introduction of demo。

API
===

.. automodule:: run
:members:

Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

 这个是用于自动从模块读取docstring的语句,可以自动从run模块读取文档


.. automodule:: run
:members:

但是现在还差一步,如果你现在直接生成文档,会告诉你找不到run模块,因为Sphinx默认只会从sys.path里加载模块,所以需要将demo目录加入sys.path,所以现在打开conf.py,添加如下内容


import os
import sys
sys.path.insert(0, os.path.abspath(
\'../..\'))

运行Sphinx生成html文档


cd ..
sphinx
-build -b html source build
make html

现在,打开build/html/index.html就可以看到如下界面了

注:格式进一步优化

上面的例子涵盖了大多数常用操作,但是通常文档都不是扁平的,而是层次化的,那么要如何将文档层次化的分门别类。实际上在rst文档中是可以以链接的形式引用其他rst文档的,也就是说我们可以自由的对文档结构进行组织使其更易读。下面我们把run的文档移动到一个单独的页面,只在index.rst里保留跳转链接。在source目录下创建run.rst


API
===
.. automodule:: run
:members:
Indices
and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

然后将index.rst对应位置的内容删掉,并进行修改


Welcome to demo\'s API Documentation
===================================
.. toctree::
:maxdepth: 2
:caption: Contents:
Introduction
============
This is the introduction of demo。

API
===
:doc:\'Run API\'

Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

:doc:\'Run API\'表示对一个文档的引用,这里引用了当前目录的run.rst,现在重新生成html,就会看到页面显示上的变化了。

参考:使用Sphinx为你的python模块自动生成文档



推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍如何使用JPA Criteria API创建带有多个可选参数的动态查询方法。当某些参数为空时,这些参数不会影响最终查询结果。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 深入理解Lucene搜索机制
    本文旨在帮助读者全面掌握Lucene搜索的编写步骤、核心API及其应用。通过详细解析Lucene的基本查询和查询解析器的使用方法,结合架构图和代码示例,带领读者深入了解Lucene搜索的工作流程。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 本文提供了详细的步骤,指导如何在Ubuntu系统中配置ASOP源码的编译环境,特别强调了使用国内镜像加速下载过程的方法。若遇到文章加载问题或图片失效,建议访问原文链接获取最新信息。 ... [详细]
  • 本文将探讨从ASP.NET 1.1到2.0期间编译系统的重要变革。通过对比两个版本的即时编译模型,我们将揭示2.0版本中引入的新特性和改进之处。 ... [详细]
  • 了解如何快速搭建属于自己的个人博客,无需编程基础,适合Mac和Windows用户。通过本文,您将学会使用GitHub Pages和Hexo构建一个完全自主的在线空间。 ... [详细]
  • 每位开发者都应该拥有一个展示自我技能与分享知识的空间——个人技术博客。本文将指导你如何使用静态网站生成器Hexo结合GitHub Pages搭建这样一个平台。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • 开发笔记:新手DVWACSRF
    开发笔记:新手DVWACSRF ... [详细]
  • 本文探讨了如何利用自定义URI方案和注册表编辑,在Windows操作系统中实现从Web浏览器启动本地应用程序的方法,同时强调了这一过程中的安全考虑。 ... [详细]
author-avatar
shaka14
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有