我有一个包裹:
foo.py有一个Foo类.在__init__.py中我导入类Foo,以便用户可以执行以下操作:
from foo import Foo
Run Code Online (Sandbox Code Playgroud)
Sphinx正确地将Foo记录为foo.foo.Foo,这是正确的,但却让用户感到困惑.如何让Sphinx将其记录为foo.Foo?
获得与正确模块关联的整体模块文档也很重要.
Sphinx记录了一些名为:
..module:: module.name
Run Code Online (Sandbox Code Playgroud)
但是当我在foo.py文件的第一个评论中使用它时,文档仍然归于foo.foo.
我有一个这样的项目结构:
package/
__init__.py
module.py
Run Code Online (Sandbox Code Playgroud)
__init__.py 包含:
from .module import Class
Run Code Online (Sandbox Code Playgroud)
module.py 包含:
class Class:
pass
Run Code Online (Sandbox Code Playgroud)
使用sphinx-apidoc -o package/docs/ package/和sphinx-build package/docs/ package/docs/_build的文档Class如下所示:
类 package.module。类
基础:对象
我想改成以下输出:
类包。类
基础:对象
或者,甚至更好,没有包名称:
类 级
基础:对象
用户不必知道在哪个文件中定义了类。如果不混淆,这些信息是完全不相关的。由于__init__.py是Class直接导入到包的名称空间中,因此用户会将此类导入为from package import Class,而不是from package.module import Class,我希望文档能够反映出来。
有没有一种方法可以让狮身人面像输出相对于包名称空间的路径?
就狮身人面像而言,我是新手。我的项目结构如下:
__init__.py 看起来像这样:
from folder_actions import *
from ip_actions import *
Run Code Online (Sandbox Code Playgroud)
folder_actions.py看起来像这样:
'''
Folder Actions
==============
This module implements some reusable custom actions.
.. autoclass:: FolderExistsAction
.. autoclass:: FolderCreateAction
:members:
'''
# The rest of the code
Run Code Online (Sandbox Code Playgroud)
生成的 HTML 文档看起来不错,除了这部分:
类folder_actions。FolderCreateAction ( ... )
我知道folder_actions模块前缀是正确的,但我想将其更改为使用包名称,如下所示:
类argparse_actions。FolderCreateAction ( ... )
有没有办法让我实现这一目标?
doc/index.rst如果我将文档字符串从folder_actions.pyto移动__init__.py,则文档将如下所示:
class __init__.FolderCreateAction( …Run Code Online (Sandbox Code Playgroud)我希望我能在这里找到解决这个相当复杂的问题的方法。
我使用 sphinx 和 intersphinx 来记录我的项目。
我有一个继承自 mongoengine.Document 的类。
当我使用 sphinx-apidoc 和 sphinx-build (通过 sphinx-quickstart 自动生成的 Makefile)构建 sphinx 文档时,对 mongoengine.Document 类的引用显示为 mongoengine.document.Document,这实际上是正确的完全限定名称,但这是一个问题,因为在 mongoengine 项目上该类被标记为 mongoengine.Document 所以 intersphinx 根本不链接。
有没有办法告诉 sphinx 在导入基类时生成有关基类的信息(在我的代码中,我有 from mongoengine import Document)而不是其完整模块路径?
下面的代码:
from mongoengine import Document, EmbeddedDocumentListField
class MyDocument(Document):
""" my docstring """
Run Code Online (Sandbox Code Playgroud)
它会生成一些 html,例如:
class myproj.models.MyDocument(*args, **values) Bases:
mongoengine.document.Document <-- intersphinx does not find the link to external doc!
Run Code Online (Sandbox Code Playgroud)
代替
class myproj.models.MyDocument(*args, **values)
Bases: mongoengine.Document <-- here intersphinx will properly link
Run Code Online (Sandbox Code Playgroud) 我有一个看起来像的文件夹结构:
project/
mymodule/
__init__.py
m1.py
m2.py
sub1/
__init__.py
s1.py
s2.py
Run Code Online (Sandbox Code Playgroud)
mymod/__init__.py:
"""The __init__ docstr"""
from m1 import *
from m2 import *
Run Code Online (Sandbox Code Playgroud)
mymod/m1.py:
"""m1 doc str"""
def func1():
"""func1 docstr"""
return 1
Run Code Online (Sandbox Code Playgroud)
mymod/m2.py:
"""m2 doc str"""
def func2():
"""func2 docstr"""
return 2
Run Code Online (Sandbox Code Playgroud)
mymod/sub1/__init__.py:
"""The sub1 __init__ docstr"""
from s1 import *
from s2 import *
Run Code Online (Sandbox Code Playgroud)
mymod/sub1/s1.py:
"""s1 docstr"""
def sub1():
"""sub1 docstr"""
return 3
Run Code Online (Sandbox Code Playgroud)
mymod/sub1/s2.py:
"""s2 docstr"""
def sub2():
"""sub2 docstr"""
return 4
Run Code Online (Sandbox Code Playgroud)
当我直接使用该模块时,它似乎按预期工作: …
我使用 docstrings 来记录 python 代码,并使用 sphinx-autodoc 来生成 apidoc HTML。我的包的结构如下:mainpackage.subpackage.module,我希望 apidocs 从模块中链接到类,而mainpackage.subpackage.Class不是mainpackage.subpackage.module.Class。我的问题来自scikit-multilearn项目,例如:我MLClassifierBase在 中有一个类skmultilearn.base.base,但我将其导入到 中__init__.py,skmultilearn.base并且我希望 sphinx 生成的 apidocs 仅使用此类,skmultilearn.base.MLClassifierBase而不是skmultilearn.base.base.MLClassifierBase像现在那样使用该类。有人可以帮忙吗?
我已经尝试过:
在每个Sphinx apidocadd_module_names = False中设置- 不打印包和模块的完整路径conf.py
添加""".. automodule:: base"""到skmultilearn/base/__init__.py
添加__all__ = ['MLClassifierBase']到skmultilearn/base/__init__.py
添加.. autoclass:: base.MLClassifierBase到类文档中
我仍然有一个Bases: skmultilearn.base.base.MLClassifierBase在每个派生自 的类中MLClassifierBase。我该如何改变这个?