什么是PDoc?

PDoc是一个简单而轻量级的工具,旨在为Python项目生成HTML文档。它分析您的代码库,提取文档字符串,并创建有吸引力、可读的文档页面。与Sphinx等更复杂的工具不同,PDoc注重简单性和易用性,使其成为中小型项目的理想选择。

PDoc的关键特征

简单性:PDoc易于设置和使用,只需几个命令即可生成文档。

Docstring支持:它支持Google风格和NumPy风格的Docstring,让您在编写文档时具有灵活性。

交互式HTML:生成的HTML文档是交互式的,具有可折叠的部分和搜索功能。

最少配置:PDoc需要最少的配置,减少了设置文档管道所需的时间。

类型注释:支持类型注释,增强生成文档的清晰度和可用性。

使用PDoc生成文档

PDoc通过导入模块并对其中的各种对象进行自检来工作。它利用抽象语法树从属性以及模块、类和函数中解析文档。

这里有一个例子:

"""PDoc支持模块级文档"""

class Example:
    """Class Level documentation"""

    a: int
    """Attr level docs"""

    def __init__(self):
        """Method level docs"""

def func():
    """And Function level docs"""

PDoc支持继承。如果你创建了一个文档类的子类,但没有定义新的文档,它将在父类中搜索相应的文档。

要为此代码生成文档,只需在控制台中运行pdoc my_module。这将启动一个web服务器,并为您提供指向文档的链接。或者,运行pdoc-pdoc以获取pdoc本身的文档。

如果您更喜欢在不运行web服务器的情况下生成文件,请使用pdoc my_module-o-docs,它将创建呈现文档所需的HTML和JS文件。

安装与配置

安装pdoc

使用pip可以轻松安装pdoc库:

pip install pdoc

基本用法

从一个简单的示例开始,演示如何使用 pdoc 自动生成文档。

步骤1:创建 Python 模块

首先,创建一个简单的Python模块,例如一个名为 my_module.py 的文件,内容如下:

def add(a, b):
     """
     This function adds two numbers.
 
     :param a: The first number.
     :param b: The second number.
     :return: The sum of a and b.
     """
     return a + b

在这个模块中,有一个名为 add 的函数,并使用文档字符串(docstring)提供了函数的描述和参数说明。

步骤2:生成文档

接下来,使用 pdoc 生成文档。在终端中运行以下命令:

pdoc my_module.py

这将生成一个名为 my_module.html 的HTML文档文件,包含了 my_module.py 中的文档字符串信息。

步骤3:查看文档

现在,可以在浏览器中打开 my_module.html 文件,查看生成的文档。文档将包括函数的描述、参数说明和其他信息。

自定义文档生成

pdoc 还可以自定义生成的文档,以满足你的特定需求。以下是一些自定义选项和示例:

生成整个包的文档

如果项目包含多个模块,可以生成整个包的文档。假设项目目录结构如下:

my_project/
     __init__.py
     module1.py
     module2.py

可以使用以下命令生成整个包的文档:

pdoc my_project

这将生成一个包含所有模块文档的 HTML 文件。

自定义文档模板

pdoc 可以使用自定义的文档模板来呈现文档。可以创建一个自定义模板文件,然后将其传递给 pdoc。

例如:

pdoc --html --template-path /path/to/custom_template my_module.py

生成Markdown文档

除了HTML文档,pdoc 还支持生成Markdown格式的文档。

可以使用以下命令生成Markdown文档:

pdoc --markdown my_module.py

生成的文档将以Markdown格式保存在 .md 文件中。

集成到自动化构建中

将 pdoc 集成到自动化构建中可以确保每次代码更改后都会自动生成最新的文档。这可以通过脚本或CI/CD工具来实现。以下是一些常见的集成方法和示例代码,以便更详细地了解如何在自动化构建中使用 pdoc。

集成到脚本中

可以创建一个简单的脚本,该脚本在代码更改后自动运行 pdoc 来生成文档。

以下是一个示例脚本,可以在 Python 中执行:

import subprocess
  
 # 定义要生成文档的模块或包名称
 module_name = "my_module"
  
 # 使用 subprocess 调用 pdoc 命令来生成文档
 subprocess.run(["pdoc", "--html", module_name])

将上述脚本保存为例如 generate_docs.py 并将其添加到你的版本控制库中。然后,在自动化构建脚本中,可以在构建过程的适当位置调用此脚本,以生成文档。

集成到 CI/CD 工具中

如果使用CI/CD工具(如Jenkins、Travis CI、CircleCI等),可以在构建过程中添加一个自动化步骤来生成文档。

以下是一个使用 Travis CI 的示例配置文件 .travis.yml,其中包含一个在每次提交后生成文档的步骤:

language: python
 python:
   - "3.8"
  
 # 安装 pdoc
 install:
   - pip install pdoc
  
 # 构建过程
 script:
   - python my_build_script.py  # 在这里运行其他构建步骤
  
 # 在构建成功后生成文档
 after_success:
   - pdoc --html my_module  # 生成文档
   - mv my_module my_module_docs  # 重命名文档目录(可选)
  
 # 部署文档(可选)
 deploy:
   provider: pages
   skip_cleanup: true
   github_token: $GITHUB_TOKEN
   local_dir: my_module_docs
   on:
     branch: master

上述示例使用 Travis CI,但其他CI/CD工具也有类似的集成方式。在这个示例中,当提交成功后,Travis CI 会运行 after_success 部分,其中包括使用 pdoc 生成文档的命令。然后,文档可以被部署到GitHub Pages或其他托管服务上,以便其他人可以访问文档。请注意,需要在CI/CD工具的配置中设置适当的环境变量(如 $GITHUB_TOKEN)来进行文档的部署。