Sphinx——自动生成Python文档

2023-11-16

Sphinx是一个可自动生成python项目api的工具,使用起来也比较简单,只需要在项目上进行简单的配置,即可生成项目的api文档

简介
Sphinx是Python文档生成器,它基于reStructuredText标记语言,可自动根据项目生成HTML,PDF等格式的文档,无数著名项目的文档均用Sphinx生成,如机器学习库scikit-learn、交互式神器Jupyter Notebook

sphinx是一种基于Python的文档工具,它可以令人轻松的撰写出清晰且优美的文档,由Georg Brandl在BSD许可证下开发。新版的Python3文档就是由sphinx生成的,并且它已成为Python项目首选的文档工具,同时它对C/C++项目也有很好的支持。更多详细特性请参考spinx官方文档,本篇博客主要介绍如何快速为你的Python注释生成API文档。

环境


需要安装python
安装sphinx

 

安装

pip install sphinx

 

初试

1. 新建项目sphinx_demo,src放项目代码,doc放sphinx自动生成的文件

2. 项目代码

google_style.py

# -*- coding: utf-8 -*-

'''Google注释风格

详情见 `Google注释风格指南`_

.. _Google注释风格指南:
   https://google.github.io/styleguide/pyguide.html
'''


class GoogleStyle:
    '''Google注释风格

    用 ``缩进`` 分隔,
    适用于倾向水平,短而简单的文档

    Attributes:
        dividend (int or float): 被除数
        name (:obj:`str`, optional): 该类的命名
    '''

    def __init__(self, dividend, name='GoogleStyle'):
        '''初始化'''
        self.dividend = dividend
        self.name = name

    def divide(self, divisor):
        '''除法

        Google注释风格的函数,
        类型主要有Args、Returns、Raises、Examples

        Args:
            divisor (int):除数

        Returns:
            除法结果

        Raises:
            ZeroDivisionError: division by zero

        Examples:
            >>> google = GoogleStyle(divisor=10)
            >>> google.divide(10)
            1.0

        References:
            除法_百度百科  https://baike.baidu.com/item/%E9%99%A4%E6%B3%95/6280598
        '''
        try:
            return self.dividend / divisor
        except ZeroDivisionError as e:
            return e

numpy.py

# -*- coding: utf-8 -*-

"""NumPy注释风格

详情见 `NumPy注释风格指南`_

.. _NumPy注释风格指南:
   https://numpydoc.readthedocs.io/en/latest/format.html#docstring-standard
"""


class NumpyStyle:
    '''Numpy注释风格

    用 ``下划线`` 分隔,
    适用于倾向垂直,长而深的文档

    Attributes
    ----------
    multiplicand : int
        被乘数
    name : :obj:`str`, optional
        该类的命名
    '''

    def __init__(self, multiplicand, name='NumpyStyle'):
        '''初始化'''
        self.multiplicand = multiplicand
        self.name = name

    def multiply(self, multiplicator):
        '''乘法

        Numpy注释风格的函数,
        类型主要有Parameters、Returns

        Parameters
        ----------
        multiplicator :
            乘数

        Returns
        -------
        int
            乘法结果

        Examples
        --------
        >>> numpy = NumpyStyle(multiplicand=10)
        >>> numpy.multiply(10)
        100
        '''
        try:
            if isinstance(multiplicator, str):
                raise TypeError('Division by str')
            else:
                return self.multiplicand * multiplicator
        except TypeError as e:
            return e

reStructredText.py

# -*- coding: utf-8 -*-

class ReStructuredTextStyle:
    '''reStructuredText风格

    用 ``冒号`` 分隔,
    PyCharm默认风格

    :arg augend: 被加数
    :type augend: int
    '''

    def __init__(self, augend, name='ReStructuredTextStyle'):
        '''初始化'''
        self.augend = augend
        self.name = name

    def add(self, addend):
        '''加法

        reStructuredText风格的函数,
        类型主要有param、type、return、rtype、exception

        :param addend: 被加数
        :type addend: int
        :returns: 加法结果
        :rtype: :obj:`int` or :obj:`str`
        :exception TypeError: Addition by str

        >>> reStructredText = ReStructuredTextStyle(augend=10)
        >>> reStructredText.add(10)
        20
        '''
        try:
            if isinstance(addend, str):
                raise TypeError('Addition by str')
            else:
                return self.augend + addend
        except TypeError as e:
            return e

3. 命令行进入doc目录cd doc


4. 执行命令sphinx-quickstart,设置结构分离、项目名、作者名、版本号、语言(配置后面可修改)

 

> Separate source and build directories (y/n) [n]: y
> Project name: sphinx_demo
> Author name(s): XerCis
> Project release []: 1.0
> Project language [en]: zh_CN 或 回车默认英文

 

 

 

5. 在doc/source/conf.py指定项目代码路径 

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

6. 在doc/source/conf.py修改扩展extensions,添加功能【包括注释中的文档】、【支持NumPy和Google风格】、【包括测试片段】、【链接到其他项目的文档】、【TODO项】、【文档覆盖率统计】、【通过javascript呈现数学】

extensions = [
    'sphinx.ext.autodoc',
    'sphinx.ext.napoleon',
    'sphinx.ext.doctest',
    'sphinx.ext.intersphinx',
    'sphinx.ext.todo',
    'sphinx.ext.coverage',
    'sphinx.ext.mathjax',
]

7. 命令行进入doc目录,执行生成API文档命令sphinx-apidoc -o source ../src/

 

 8.生成HTML   

(linux环境执行命令):

make html 

windows环境需要执行命令

.\make html


9.打开build/html/reStructredText.html

 

 重新生成
1. 项目代码未变更

1 . 在doc下执行命令   make clean
2.  在doc下执行命令    make html(直接也行)


2. 项目代码已变更

1.  删除  doc/build  下的所有文件夹
2.  删除  doc/source 下除index.rst的所有.rst文件
3.  在doc下执行命令   sphinx-apidoc -o source ../src/
4.  在doc下执行命令   make html


切换主题

安装主题   pip install sphinx_rtd_theme
修改  doc/source/conf.py html_theme

html_theme = 'sphinx_rtd_theme'

重新生成

 

注释风格
reStructuredText(PyCharm默认)
NumPy
Google(官方推荐)

风格 特点 适用
reStructuredText 用冒号分隔 PyCharm默认
NumPy 用下划线分隔 倾向垂直,长而深的文档
Google 用缩进分隔 倾向水平,短而简单的文档

Sphinx对NumPy和Google风格的对比,英文不好可以参考中文版

extensions = ['sphinx.ext.napoleon']

设置PyCharm Docstrings风格

FileSettingsToolsPython Integrated Tools

 在PyCharm中Ctrl+Q可很方便查看注释

光标放在函数名左端Alt+EnterInsert documentation string stub可快速插入注释文档

 

项目结构

 

  • doc:Sphinx文件
  • src:项目源代码
  • doc/build:Sphinx生成文件
  • doc/build/doctrees:doctree文件
  • doc/build/html:生成的HTML文件
  • doc/source:Sphinx配置文件
  • doc/source/conf.py:Sphinx用户自定义配置文件
  • doc/source/index.rst:首页结构
  • doc/source/test.rst:test模块结构

主题大全

Sphinx的主题默认为 alabaster

详情见Sphinx HTML主题

参考文献
使用sphinx自动建立API文档(一)
使用sphinx自动建立API文档(二)定制化
Sphinx 2.1.2 文档
Sphinx文档内容
Sphinx extensions
Python注释规范 — Google 开源项目风格指南
Sphinx HTML主题
PyCharm源代码文档 - 官方文档
使用sphinx快速为你python注释生成API文档
Python Docstring 风格和写法学习
sphinx-automodapi文档

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sphinx——自动生成Python文档 的相关文章

  • Python 有不可变列表吗?

    python 有不可变列表吗 假设我希望具有元素有序集合的功能 但又想保证它不会改变 如何实现呢 列表是有序的 但它们可以改变 是的 它被称为一个tuple 所以 而不是 1 2 这是一个list并且可以突变 1 2 is a tuple并
  • Spyder 和 Jupyter 有什么区别?

    我正在学习Python用于数据科学 但我的问题是我仍然不明白Spyder和Jupyter之间的区别 我希望你们能帮助我理解其中的区别 我将不胜感激 以下只是这两个工具的基本摘要 Jupyter 是一个非常流行的用于数据分析的应用程序 它是一
  • Python 正则表达式从文本中提取域

    我有以下正则表达式 r a zA Z0 9 a zA Z0 9 61 a zA Z0 9 a zA Z 2 6 当我将其应用于文本字符串时 比方说 这是 www website1 com 这是 website2 com 我得到 www we
  • 打开文件路径在 python 中不起作用[重复]

    这个问题在这里已经有答案了 我正在编写一个数据库程序 personica 是我的测试主题 我通常在文件路径的位置有一个变量 但出于测试和演示的目的 我只有一个字符串 在我的计算机上的这个确切位置有一个文本文件 顺便说一句 因为我很偏执 所以
  • 如何使用格式保存 Tkinter 文本小部件的内容

    我在 python 中使用 Tkinter 在文本窗口中显示输出 我发现使用 get 功能我可以从此窗口检索文本内容 但我有用不同背景颜色标记的文本部分 是否可以将内容与这些颜色一起复制到文件 例如 html 或 doc 中 没有对你想要的
  • ipython/jupyter 中的 tk 问题

    我正在尝试编写一个用于从 ipython jupyter 笔记本启动的 gui 但在笔记本中使用 tkinter 时遇到了麻烦 特别是在让 tk gui 窗口正常关闭方面 如何从 jupyter 制作 启动 tkinter gui 然后在不
  • 在Python中整齐地绘制PMF

    有没有一个库可以帮助我在 python 中整齐地绘制样本的概率质量函数 如下所示 通过matplotlib pyplot的stem模块 matplotlib pyplot stem args kwargs from matplotlib p
  • 我可以在pycharm中的断点处进入交互模式吗

    我是一个相当新的 Pycharm 3 用户 正在从事 django 项目 我可以在 pycharm3 中的断点处进入交互模式吗 这可能吗 当程序在断点处停止时 我尝试过工具 gt 打开调试命令行 但我没有看到控制台打开 我怎样才能让它发挥作
  • 如何使用Peewee查询多个相似的数据库?

    我遇到了使用 Peewee 查询多个数据库的问题 我有 2 个现有的 mysql 数据库 让我们将它们命名为 A 和 B 结构相似 因为它是两个 Bugzilla 数据库 我使用 Pwiz 生成模型 modelsA py 和 modelsB
  • Python3 - 如何将字符串转换为十六进制

    我正在尝试将字符串逐个字符转换为十六进制 但我无法在Python3中弄清楚它 在较旧的 python 版本中 我的以下内容有效 test This is a test for c in range 0 len test print 0x s
  • 将具有多个时区的 pandas 列转换为单个时区

    Problem 我在 pandas DataFrame 中有一个列 其中包含带有时区的时间戳 此列中有两个不同的时区 我需要确保只有一个 这是该列末尾的输出 260003 2019 05 21 12 00 00 06 00 260004 2
  • Python 中的 Firebase 身份验证时出现 KeyError:“databaseURL”

    相信你做得很好 我是 firebase 的新手 正在尝试进行用户身份验证 我已经安装了pyrebase4并在firebase控制台上创建了一个项目 我还启用了使用 电子邮件和密码 登录并尝试连接我的应用程序 下面是我正在尝试的代码 impo
  • __author__ 的起源是什么?

    使用私有元数据变量的约定在哪里 author 一个模块内部从何而来 This http mail python org pipermail python dev 2001 March 013328 htmlPython 邮件列表线程似乎暗示
  • 如果任何单元测试失败,如何使 Python 的覆盖率工具失败?

    我想使用 shell 脚本来确保我的单元测试通过and我的代码有足够的测试覆盖率 我只想运行我的测试代码once 我希望我可以通过coverage https coverage readthedocs io 工具和单次运行的工具 如果一项或
  • 获取列的 [0, x] 元素的最小值

    我需要计算一列 其中值是对其他列进行矢量化运算的结果 df new col df col1 min 0 df col2 然而 事实证明我不能像上面的语法一样使用 min 那么 获得 pandas 列的零和给定值之间的最小值的正确方法是什么
  • Hoare Partitioning算法讲解

    根据许多网站给出的伪代码 我写了这个Hoare分区算法 它采用一个数组 根据给定的主元来分区子数组的开始和结束索引 它工作得很好 但是有人可以解释一下逻辑 它是如何做到这一点的吗 这是代码 def hoare arr start end p
  • 如何从 PyObject 获取指向字符串的 char*

    我怎样才能得到一个char from a PyObject它指向一个字符串 例如 这是 python 脚本 Test Connect 272 22 20 65 1234 这是 C 代码 static PyObject Connect PyO
  • 如何将动态数据传递给装饰器

    我正在尝试编写一个基本的 CRUD 控制器类来执行以下操作 下列的 class BaseCrudController model field validation template dir expose self template dir
  • Pandas 数据框可对多列和要列出的值进行字典

    我有一个数据框 id key a1 1 a2 1 a3 1 a4 2 a5 2 a6 3 我想创建一本字典key作为机器号 并且id列作为列表 like 1 a1 a2 a3 2 a4 a5 3 a6 我可以先使用 groupby 然后再使
  • 如何通过解析导入来组合并获取单个 Python 文件

    我正在尝试获取单个 Python 文件作为输出 我有一个 Python 脚本 其中有多个此类导入 from that import sub 导入来自所有本地模块 而不是来自系统或 Python 库 有什么方法可以解决这些问题并获得一个完整的

随机推荐

  • Node.js 学习系列(一) —— 入门

    nodejs 官网 https nodejs org zh cn nodejs下载地址 https nodejs org zh cn download Node js 是一个开源 跨平台的 JavaScript 运行时环境 简单的说 就是运
  • git 环境配置 + gitee拉取代码

    好嘛 配环境的时候 老是忘记这个命令行 干脆自己写一个记录一下 也不用搜了 1 先从git官网下载git 安装 2 然后从gitee拉取代码的时候提示 这是因为换了新电脑没有加入新的公钥啦 哎 所以老是记不住命令行 first git co
  • SSL和SSH有什么区别

    许多人对SSL和SSH感到困惑 这是可以理解的 两者都是安全协议 可以帮助保护从一个端点到另一端点的数据 此外 他们的名字有两个相似的字母 增加了歧义 但是SSH和SSL是两回事 如果您感到困惑 或者对选择哪种安全协议犹豫不决 本文将为您提
  • Rk3288 Android 7.1/8.1默认开启网络ADB端口

    Rk3288 系列开机默认没有打开网络ADB端口 可通过ADB手动改打开 ADB连接后 输入 adb tcpip 5555 Android 默认为5555 输入 adb connect ip地址 可以通过 adb devices 来验证 W
  • NSIS脚本学习:判断版本并安装.NET Framework运行环境

    前言 目前开发的程序以基于 net的应用程序为主 程序开发好后 需要进行安装包的生成 及setup文件的生成 常见的是NSIS工具 之前一直用的单文件打包工具 不适合将运行环境加进去 因此开始使用更高版本的NSIS 3 06 关于判断 NE
  • dva.js yield call/put使用完整流程

    这个项目是基于dva框架的一个rn项目 对于一个新手 其实我也是菜鸟来着 来说 有很好的学习意义 首先我们来看下目录的结构 把我们定义的service引入进来 定义一个GET USER INFO的effects 注意这个函数名称前面要有 然
  • 在 Ubuntu 操作中安装Code::Blocks

    在 Ubuntu 操作 中安装Code Blocks 步骤如下 安装步骤 1 先把编译环境 C库 C 库和Boost库装好 如下 sudoapt get install build essential 有可能安装 build essenti
  • R语言常用包介绍

    r与python差异比较大的一个地方就是 python的机器学习算法集中程度比较高 比如sklearn 就集成了很多的算法 而R语言更多时候需要一个包一个包去了解 比较费时费力 对于python转过来的朋友非常不友好 抽空整理了工作中常用的
  • spark创建maven工程创建scala目录并编译

    背景 我创建spark的maven工程的时候 在java目录同级还创建了一个scala目录 这就得考虑编译相关的事了 解决 1 创建source folder 如下图所示 直接创建就好了 2 编译带来的问题 编译的时候发现一个问题 就是在s
  • WSL安装软件报错/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

    原因 usr lib wsl lib 目录下都是文件而不是链接 且该目录只读 需要在其他目录操作 解决 cd usr lib wsl sudo mkdir lib2 sudo ln s lib lib2 更改wsl配置文件 sudo vim
  • VisualStudio怎么一键注释多行以及一键取消多行注释

    一键注释多行代码 Ctrl k 然后 Ctrl c 一键取消多行注释 Ctrl k 然后 Ctrl u
  • 云主机8088端口被挖矿情况以及解决办法

    1 用top命令查询一下有没有CPU占用很高的 hadoop 10 9 15 140 top top 18 59 17 up 2 05 1 user load average 0 36 0 38 0 68 Tasks 97 total 1
  • Unity视频播放之Video Player的简单使用

    使用Unity自带的VideoPlayer来播放视频 一 准备视频 Unity3D常用视频格式 mov mpg mpeg mp4 avi asf 如果都不识别 试试转换成ogv格式 转换完成之后 将视频素材文件拖入Unity Assets文
  • Nginx中的正则匹配表达式操作符“~”和“~*“的含义

    操作符表示区分大小写的匹配 操作符表示不区分大小写的匹配 更多Nginx中正则表达式操作符的知识 请参考下面这个链接 https www cnblogs com bethal p 5514557 html
  • 二进制方式快速部署BSC主网v1.1.2

    文章目录 一 下载bsc主网快照数据 二 下载BSC二进制文件 三 下载主网配置文件及创世区块文件 四 二进制启动BSC主网 五 查询是否同步完成 BSC快照官方 https docs binance org smart chain dev
  • 任意进制的转换(C,C++)itoa函数,strtol函数,bitset函数,oct函数,dec函数,hex函数

    十进制转换为 2 10 进制代码方法 include
  • 单片机实现物体检测(人脸识别等)

    总述 边缘计算很有前景 对于低要求的识别任务完全可以下放到嵌入式设备运行 本文实现的应用基于TF lite Macro框架 实现 训练模型 基于YoloV3修改网络文件进行训练自己的模型 识别单个物体 模型文件机见下文连接 下载Darkne
  • 安装之openjdk

    1 先检查是否安装 dpkg list grep i jdk 2 移除openjdk包 命令 sudo apt get purge openjdk 3 卸载 OpenJDK 相关包 命令 sudo apt get purge icedtea
  • Windows下使用海康相机SDK获取图像并在Qt显示

    点击上方蓝字可直接关注 方便下次阅读 如果对你有帮助 可以点个在看 让它可以帮助到更多同志 一 一些基础信息 MVS 版本 V3 1 0 SDK 版本 V3 2 0 3 1 库与头文件位置 安装完MVS软件后 会有相机SDK的一些资料 如下
  • Sphinx——自动生成Python文档

    Sphinx是一个可自动生成python项目api的工具 使用起来也比较简单 只需要在项目上进行简单的配置 即可生成项目的api文档 简介 Sphinx是Python文档生成器 它基于reStructuredText标记语言 可自动根据项目