简而言之,我有一些代码可以工作,但是如果我稍微调整一下,有些事情就会分崩离析,我似乎也弄不清原因。我希望比我更有经验的人能给我一些斯芬克斯的指点。我已经搜索过了,以前也没有看到过类似的问题。
起作用的东西
我有包my_pkg,它包含模块mod,包含许多类和函数。
如果我在我的conf.py中使用下面一行
sys.path.insert(0, os.path.abspath('../my_pkg'))其中一个.rst文件包含以下内容
.. automodule:: mod
.. autoclass:: mod.classA
:members:
.. autofunction:: mod.functionA
.. autoclass:: mod.classB
:members:然后,当我运行我的文档时,一切都正常!但是,它们将输出文档中的调用签名呈现为mod.classA (例如),我更希望它们呈现为my_pkg.mod.classA。
不起作用的东西
为了进行此更改,我认为我应该像这样从conf.py中删除pkg
sys.path.insert(0, os.path.abspath('../my_pkg'))然后将我的.rst文件更改为从pkg开始查看,如下所示:
.. automodule:: my_pkg.mod
.. autoclass:: my_pkg.mod.classA
:members:
.. autofunction:: my_pkg.mod.functionA
.. autoclass:: my_pkg.mod.classB
:members:如果我这样做,自动模块指令不会显示任何内容,因此也不会显示模块的docstring (我没有收到任何关于autodoc找不到pkg.mod的警告,所以我觉得这很奇怪)。输出,输出
.. autoclass:: my_pkg.mod.classA
:members:就是简单的alias of my_pkg.mod...。尽管这是错误的。尽管如此,类签名中的"source“按钮仍然正确地链接到该类的代码。最后,剩下的函数和类按照我希望的那样呈现。因为某种原因,狮身人面像看起来真的不想记录这个模块或classA。
这个问题把我逼疯了。它发生在多个主题,所以我相信这是一个斯芬克斯的问题。我尝试将classA的docstring更改为“foo”。我尝试在文档中移动classA,所以这不是真正代码的第一步。我试过重命名classA。似乎没有什么能解决它,而classA始终是问题所在。
有人知道为什么会发生这种事吗?我正在使用Sphinxv4.1.1和Sphinx Themev0.5.2(这两个版本在本文发表时都是最新版本)。
发布于 2021-07-19 16:10:19
编辑:我最初的想法是完全错误的,但是现在我已经能够多次再现这个问题了。mzjn是正确的,我没有提供足够的上下文。
这个问题似乎是由于my_pkg是一个被模仿的导入引起的。在conf.py里我有一条线
autodoc_mock_imports = ['my_pkg', 'numpy', 'scipy', 'pandas']我的发现是,如果我尝试从包根开始文档化(即,my_pkg是自动模式和自动类的第一个参数,如不起作用的部分所述)和my_pkg是一个模拟的导入,狮身人面像会引发上述问题。在更改结构时,我忘记了从模拟导入中删除my_pkg (这仍然不能真正解释为什么存在这种行为,但至少我找到了如何再现它)。
发布于 2021-07-19 21:29:45
您可能需要为类/函数定义__module__属性,如another Stack Overflow post中所述。
https://stackoverflow.com/questions/68436013
复制相似问题