当前位置: 首页 > 面试题库 >

Sphinx的autodoc的automodule显然无效

云昊阳
2023-03-14
问题内容

我在包含rst文件的文件上运行Sphinx,automodule但似乎没有任何效果。

详细信息如下:我有一个Python项目,其中agent.py包含一个包含类的文件Agent。我还有一个子目录,apidoc其中有一个文件agent.rst(由生成sphinx- apidoc):

agent module
============

.. automodule:: agent
   :members:
   :undoc-members:
   :show-inheritance:

sphinx-build -b html apidoc apidoc/_build使用项目目录作为当前工作目录运行sphinx 。

为了确保找到Python文件,我在中包括了以下内容apidoc/conf.py

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

它运行没有错误,但是当我打开生成的HTML文件时,它仅显示“代理模块”,并且所有内容均为空白。为什么不显示班级Agent及其成员?

更新
:原来的问题可能是由这样的事实,我没有引起包括sphinx.ext.autodocconf.py。不过,既然我做到了,就会收到类似以下的警告:

WARNING: invalid signature for automodule ('My Project.agent')
WARNING: don't know which module to import for autodocumenting 'My

Project.agent’ (try placing a “module” or “currentmodule” directive in the
document, or giving an explicit module name)
WARNING: autodoc: failed to import module ‘agent’; the following
exception was raised:
No module named ‘agent’


问题答案:

我将尝试通过将“规范”方法与您的案例并列进行回答。

通常的“入门方法”遵循以下步骤:

  1. doc在您的目录中创建一个目录project(从该目录中执行以下步骤中的命令)。

  2. sphinx-quickstart(选择分离sourcebuild)。

  3. sphinx-apidoc -o ./source ..

  4. make html

这将产生以下结构:

C:\Project
|
|   agent.py
|   
|---docs
|   |   make.bat
|   |   Makefile
|   |   
|   |---build
|   |               
|   |---source
|       |   conf.py
|       |   agent.rst
|       |   index.rst
|       |   modules.rst

在您conf.pyhtml" target="_blank">添加的内容中(第2步之后):

sys.path.insert(0, os.path.abspath(os.path.join('..', '..')))

并在index.rst您链接modules.rst

Welcome to Project's documentation!
================================

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

   modules


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

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

现在,将以上内容与您在问题中分享的内容进行比较:

C:\Project
|
|   agent.py
|   
|---apidoc
|   |   agent.rst
|   |   conf.py
|   |
|   |-- _build

你跑了: sphinx-build -b html apidoc apidoc/_build

并在您的conf.py

sys.path.insert(0, os.path.abspath('.'))

您的错误stacktrace表示找不到模块agent。这可能是因为你没有去1级记在你的conf.py(它的指向与路径.rst,不与路径.py),这应该工作:
sys.path.insert(0, os.path.abspath('..'))。另外,如果你没有手动编辑/连接你modules.rst在你的index.rst你很可能只看到该模块。

您可能会注意到在运行中sphinx命令的签名:

sphinx-apidoc [OPTIONS] -o <OUTPUT_PATH> <MODULE_PATH>



sphinx-build [options] <sourcedir> <outputdir> [filenames …]

<sourcedir>指在哪里.rst<MODULE_PATH>在哪里.py<OUTPUT_PATH>到哪里.rst放置,<outputdir>到哪里.html放置。

还请注意,您提到:“该项目的目录为当前工作目录。”
我已经在的sphinx线程中看到了“工作目录”,可以同时作为Project基本目录或docs目录使用。但是,如果您在Sphinx文档中搜索“工作目录”,则不会提及它。

最后,使用“入门方法”的文件/目录结构有一个优势。基本上,Sphinx标记上的大多数线程都“将您置于同一页上”,从而减轻了将案例映射到不同目录/文件结构的工作量。

我希望这有帮助。



 类似资料:
  • 问题内容: 我正在尝试使用Sphinx在Python中记录5,000多个项目。它有大约7个基本模块。据我所知,为了使用自动文档,我需要为项目中的每个文件编写如下代码: 这太繁琐了,因为我有很多文件。如果我只想指定要记录的“ mods”包,那会容易得多。然后,Sphinx可以递归地浏览包并为每个子模块创建一个页面。 有这样的功能吗?如果没有,我可以编写一个脚本来制作所有.rst文件,但这将花费很多时

  • 问题内容: 我有一个类似这样的模块: …而且我有一个类似这样的文件: 构建文档时,我得到一个带有如下代码段的html文件: mymodule.foobar。 foob​​ar = ‘这里有些长而丑陋的正则表达式’ 额外的文档在这里 mymodule。 myfunc ( val =’这里有些长而丑陋的正则表达式’ ) 等等等等等等 基于这个帖子),我认为可以通过将模块更改为以下内容来对其进行更改:

  • 问题内容: 我正在尝试使用Sphinx来记录我的Python类。我这样做是使用autodoc: 虽然它可以正确地获取我的方法的文档字符串,但这些字符串是经过修饰的: 与存在 的原型不正确,例如。 我怎样才能解决这个问题?我的印象是使用可以解决这种问题。 问题答案: 扩展我的评论: 您是否尝试过使用decorator包并将@decorator放在checkStale上?使用带有修饰功能的epydoc

  • 问题内容: 我正在使用Sphinx的autodoc插件来自动记录一组模块。我有一个函数accepts ,我想重写文档以显示Python stdlib文档使用的稍微更好的样式。 是否可以覆盖特定功能的自动文档输出? 问题答案: 可以使用以下方法覆盖签名: 但是,具有覆盖签名的函数不会与通过引入的其他函数进行排序。对每个函数使用显式指令可以解决此问题: 加成 您还可以附加到文档字符串: 要覆盖签名和文

  • 问题内容: 我正在使用 Sphinx 功能根据我的Python库的文档字符串生成文档。 交叉引用的语法可在此处找到 该部分之前必须带有标签,以允许从文档的其他区域引用该部分。 我所拥有的是我其中一个班级的.rst(ReStructeredText)文件。它用 生成该类的文档。 我的问题是,如何从文档中的另一个.rst文档引用该类的自动生成的方法?如果我尝试在方法的文档字符串中放置标签,Sphinx

  • Autodoc 可以通过文本和模板文件自动生成微软文档。它被设计用于自动发送报告和减少产生常规文件所花费的精力。通过给定一个 docx、pptx 或者 xlsx 文档连同所需要的 text 文件,Autodoc可以输出一个插入样本中带有所需要的内容且格式相同的文档。 Autodoc用文本文件中指定的所需值替换文档中的键值。它可以在图形和命令行环境中使用。该应用程序接受以下三个输入: 带有关键字和期