一  简单介绍

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

对应于Pyhon,有很多可供选择的工具:

  • sphinx中文版介绍 Sphinx使用 reStructuredText作为标记语言(类似Markdown),可扩展,功能强大。要注意的是何有一个开源的搜索也叫Sphinx,斯芬克斯果然太受欢迎,开源的世界起个名字不容易呀。
  • pdoc是一个简单易用的命令行工具,可以生成Python的API文档
  • Doxygen 是老牌的文档生成工具,可以针对各种语言生成文档,我们以前在C++的项目中曾经使用过
  • 其他还有诸如 pydocpydoctor等等

二 安装

  • 要安装Sphinx,不同的操作系统有不同的安装方式,Sphinx的源代码在这里
  • 你也可以自己构建。我推荐使用pip install sphinx !
  • 如果你安装了Anaconda,Sphinx已经包含在内了!

三 创建一个sphinx项目

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

  1. mkdir yourdir
  2. cd yourdir
  3. sphinx-quickstart

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

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

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

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

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

  1. sphinx-build -b html source build
  2. 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节点是必须的。

  1. .. toctree::
  2. :maxdepth: 2
  3. :caption: Contents:

(2) conf.py

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

四 一个具体的例子

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

  1. # run.py
  2. def run(name):
  3. """
  4. this is how we run
  5.  
  6. :param name name of people who runs
  7. """
  8. print name, 'is running'

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

  1. 创建一个文件夹demo/,并将run.py放到里面
  2. 在demo里创建一个docs目录,进入docs/目录,当然这里你可以随意选定文件夹,只是这样更规范一些
  3. 生成Sphinx默认模板,设置项目名为demo,并开启autodoc(运行sphinx-quickstart)
  4. 进入source目录,打开index.rst
  5. 将index.rst 修改为如下,实际上这里面可以写任何满足rst规范的内容
  1. Welcome to demo's API Documentation
  2. ======================================
    .. toctree::
    :maxdepth:2
    :caption: Contents:
  3.  
  4. Introduction
  5. ============
    This is the introduction of demo。
  6.  
  7. API
  8. ===
    .. automodule:: run
    :members:
  9.  
  10. Indices and tables
  11. ==================
    * :ref:`genindex`
    * :ref:`modindex`
    * :ref:`search`

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

  1. .. automodule:: run
  2. :members:

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

  1. import os
  2. import sys
  3. sys.path.insert(0, os.path.abspath('../..'))

运行Sphinx生成html文档

  1. cd ..
  2. sphinx-build -b html source build
  3. make html

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

注:格式进一步优化

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

  1. API
  2. ===
  3. .. automodule:: run
  4. :members:
  5.  
  6. Indices and tables
  7. ==================
  8. * :ref:`genindex`
  9. * :ref:`modindex`
  10. * :ref:`search`

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

  1. Welcome to demo's API Documentation
  2. ===================================
    .. toctree::
    :maxdepth: 2
    :caption: Contents:
  3.  
  4. Introduction
  5. ============
    This is the introduction of demo。
  6.  
  7. API
  8. ===
    :doc:'Run API</run>'
  9.  
  10. Indices and tables
  11. ==================
    * :ref:`genindex`
    * :ref:`modindex`
    * :ref:`search`

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

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

使用sphinx快速生成Python API 文档的更多相关文章

  1. GhostDoc:生成.NET API文档的工具 (帮忙文档)

    在 Sandcastle:生成.NET API文档的工具 (帮忙文档) 后提供另一个生成API文档的工具.   1) 准备工作 安装GhostDoc Proc. 收费的哦.... 这个工具的优势是不像 ...

  2. 使用jsdoc-toolkit来自动生成js api文档

    近来前端组小盆友开发的类库越来越多,很多情况下彼此不知道写了些什么方法,为了更好的合作提高工作效率,找了个比较好的api文档生成方法.使用jsdoc-toolkit来自动生成js api文档. 一.  ...

  3. Spring Boot学习笔记 - 整合Swagger2自动生成RESTful API文档

    1.添加Swagger2依赖 在pom.xml中加入Swagger2的依赖 <!--swagger2--> <dependency> <groupId>io.spr ...

  4. Grunt-jsdoc生成JS API文档

    Grunt-jsdoc生成JS API文档 具体的请看官网 https://github.com/krampstudio/grunt-jsdoc 一:首先确保本机电脑上是否已经安装了nodejs和np ...

  5. JSDoc 3 生成javascript API文档

    一.javascript注释规范 我们在编写javascript文件的时候,一般会添加一些注释.例如一些文件.类.方法和属性都应该用合适的标记和类型进行注释.这里不但方便我们的阅读,也能养成一个好的习 ...

  6. javadoc 工具生成开发API文档

    =====================先来一点成就感===================== package com.springMybatis.dao; import com.springMy ...

  7. Spring Boot 集成 Swagger 生成 RESTful API 文档

    原文链接: Spring Boot 集成 Swagger 生成 RESTful API 文档 简介 Swagger 官网是这么描述它的:The Best APIs are Built with Swa ...

  8. 使用Swagger2Markup归档swagger生成的API文档

    文章出处: http://blog.didispace.com/swagger2markup-asciidoc/ 说明 项目中使用Swagger之后,我们能够很轻松的管理API文档,并非常简单的模拟接 ...

  9. Golang使用swaggo自动生成Restful API文档

    #关于Swaggo 相信很多程序猿和我一样不喜欢写API文档.写代码多舒服,写文档不仅要花费大量的时间,有时候还不能做到面面具全.但API文档是必不可少的,相信其重要性就不用我说了,一份含糊的文档甚至 ...

随机推荐

  1. python3之编码

    这个符号(#!)的名称,叫做"Shebang"或者"Sha-bang"Shebang这个符号通常在Unix系统的脚本中第一行开头中写到,它指明了执行这个脚本文件 ...

  2. Xmodem通信协议实例

    在工作时串口通信的过程中需要传输文件,这里就就需要使用通信协议,此时选择的是Xmodem协议作简要研究 1.什么是Xmodem协议 Xmodem协议是串口通信中广泛使用到的异步文件传输协议.以128字 ...

  3. bootstrap 多色表格

    有时候需要用到多色显示不同类型的表格 用bootstrap的样式即可 <tr class="active"> <tr class="success&qu ...

  4. 蓝桥杯 基础练习 BASIC-15 字符串对比

    基础练习 字符串对比   时间限制:1.0s   内存限制:512.0MB 问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字 ...

  5. [转载]get_fs()和set_fs()

    其实内核里面也可以用系统调用的,直接用read/write是可以的.但要注意几个问题:一个是要记得编译的时候加上-D__KERNEL_SYSCALLS__另外源文件里面要#include如果报错,很可 ...

  6. python使用pyodbc连接sql server 2008

    一.PyODBC的下载地址: http://code.google.com/p/pyodbc/ 二.测试语句 import pyodbccnxn = pyodbc.connect(DRIVER='{S ...

  7. form(去掉关闭按钮,禁止调整大小)

    禁止Form窗口调整大小方法:FormBorderStyle 设为FixedSingle: 不能使用最大化窗口: MaximuzeBox 设为False: 不能使用最小化窗口:   MinimizeB ...

  8. 数据库理论-范式(1NF、2NF、3NF)

    范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”. 第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项.(每个属性不可分割)第二范式(2NF)要求数据 ...

  9. springboot启动过程(2)-run方法

    1 springApplication的run run方法主要是用于创造spring容器ConfigurableApplicationContext对象. public ConfigurableApp ...

  10. php中使用array_reduce给数组降维

    PHP里面最强大的工具,就是数组,它融合了多种数据结构的特点,数组.队列.栈.哈希表等等,而且容器可以兼容各种类型,任意嵌套,简直无所不能.围绕着数组,PHP原生支持了一些列的函数,使得数组在实际编程 ...