【问题标题】:How to document simple Python script using Sphinx?如何使用 Sphinx 记录简单的 Python 脚本?
【发布时间】:2018-07-15 18:11:20
【问题描述】:

我已经阅读了大量的 Sphinx 教程,但我仍然不知道如何让 Sphinx 文档像这样一个简单的 Python 脚本:

def addNumbers(a):
    """This function adds one to the given number.

    :param a: The name to use
    :type a: int

    """
    b = a + 1
    print b

addNumbers(5)

以下是我所做的步骤。我错过了什么?

安装狮身人面像:

pip install sphinx

在我的项目目录中创建一个文档目录:

mkdir docs

从新的doc 目录内部运行sphinx-quickstart,然后按 Enter 键回答除这两个以外的所有问题:

Separate source and build directories (y/n) [n]: y
autodoc: automatically insert docstrings from modules (y/n) [n]: y

这让我的项目目录结构变成了这样:

myproject/ 
|-- docs/
    |-- build/
    |-- source/
    make.bat
    Makefile
|-- mycode/ 
    myscript.py 

打开conf.py,取消注释以下几行,添加我的代码所在文件夹的路径:

import os
import sys
sys.path.insert(0, os.path.abspath('C:\myproject\mycode'))

从我的docs 目录运行以下命令:

make html

这给了我以下没有错误的确认:

现在,当我打开 C:\myproject\docs\build\html\index.html 时,我看到的只是以下内容,并且没有来自我在原始脚本中插入的文档字符串的任何信息。单击模块索引会给出未找到文件的错误。这是为什么呢?

编辑: 完成上述所有步骤后,我添加了一个文件夹 mypackage 并在其中复制了包含我的代码的文件,使目录内容如下所示:

myproject/ 
|-- docs/
    |-- build/
    |-- source/
    make.bat
    Makefile
|-- mycode/ 
    myscript.py 
|-- mypackage/ 
    myscript.py 

然后我从doc 目录运行以下命令:

sphinx-apidoc -f -o source/ ../mypackage/
make html

现在点击模块索引会给我以下信息:

点击myscript 会给出:

现在的问题是为什么我的主脚本 myscript.py 列在模块下,而不是在文档的主页上列出?

【问题讨论】:

  • 文档/源代码中有什么吗?
  • 是的。文件夹 _static 和 _templates,以及文件 conf.py 和 index.rst。
  • 我认为它的 index.rst(即re-structured text)可能提供了索引页面。无论如何,点击模块索引可能会给你一个列表,包括myscript.py
  • 单击模块索引的链接给我一个错误“找不到您的文件”。
  • 我在myproject' and run sphinx-apidoc -f -o source/../mypackage/` 下添加了一个文件夹mypackage,然后是make html。现在我在 m 下的 Module Index 下看到 myscript。它应该是这样的吗?我认为myscript 应该是文档主页的一部分。

标签: python python-2.7 python-sphinx


【解决方案1】:

需要__init__.py 文件才能使 Python 将目录视为包含包。见Python tutorial documentation of packages

我的猜测是 sphinx-apidoc 将您的脚本识别为脚本,而不是包,因为您省略了 __init__.py 文件。根据sphinx-apidoc 的文档:

sourcedir 必须指向 Python 包。

在文档的下方还有一个警告:

如果您记录脚本(而不是库模块),请确保它们的主例程受到if __name__ == '__main__' 条件的保护。

在没有看到您的代码的情况下,我会从 __init__.py 文件开始,看看是否可以解决问题。

【讨论】:

  • 我在myproject 的根目录中添加了一个空的__init__.py,但现在当我运行sphinx-apidoc -f -o source/ ../mypackage/make html 时,我收到错误No module named mypackage.myscriptNo module named mypackage。还有,在检查一致性的时候,会报错\myproject\docs\source\modules.rst: WARNING: document isn't included in any toctree\myproject\docs\source\mypackage.rst: WARNING: document isn't included in any toctree这是为什么?
  • myproject 不是 Python 包(它只是一个目录),所以从那里删除 __init__.py,并在 mycodemypackage 中各放一个。
  • 我从myproject 中删除了__init__.py,并将其添加到mycodemypackage。不过,当我运行 make html 时,我得到了与上面描述的相同的错误。
  • 此时,我建议您创建项目的公共 repo,共享它,并记录安装项目和重现问题的步骤。
猜你喜欢
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多