相关疑难解决方法(0)

如何使Sphinx尊重使用__init__.py将类导入包中

我有一个包裹:

  • FOO
    • foo.py
    • bar.py
    • __init__.py

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.

python python-sphinx

9
推荐指数
1
解决办法
1566
查看次数

如何防止狮身人面像显示我班级的完整路径?

我有一个这样的项目结构:

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__.pyClass直接导入到包的名称空间中,因此用户会将此类导入为from package import Class,而不是from package.module import Class,我希望文档能够反映出来。

有没有一种方法可以让狮身人面像输出相对于包名称空间的路径?

python documentation python-sphinx sphinx-apidoc

8
推荐指数
2
解决办法
823
查看次数

如何为 Sphinx 自定义模块名称

就狮身人面像而言,我是新手。我的项目结构如下:

  • argparse_actions/
    • argparse_actions/
      • __init__.py
      • folder_actions.py
      • ip_actions.py
    • 文档/
      • _建造/
      • index.rst ==> 这是起点、主页或根文档。
      • 和更多...

__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_actionsFolderCreateAction ( ... )

我知道folder_actions模块前缀是正确的,但我想将其更改为使用包名称,如下所示:

argparse_actionsFolderCreateAction ( ... )

有没有办法让我实现这一目标?

更新

  • 根文件在 doc/index.rst
  • 如果我将文档字符串从folder_actions.pyto移动__init__.py,则文档将如下所示:

    class __init__.FolderCreateAction( …
    Run Code Online (Sandbox Code Playgroud)

python python-sphinx

7
推荐指数
1
解决办法
2234
查看次数

autodoc:基类以全名显示,而不是尊重导入

我希望我能在这里找到解决这个相当复杂的问题的方法。

我使用 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)

python python-sphinx

7
推荐指数
1
解决办法
1071
查看次数

如何在__init__中使用sphinx自动模块和公开函数

我有一个看起来像的文件夹结构:

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)

当我直接使用该模块时,它似乎按预期工作: …

python python-sphinx

5
推荐指数
1
解决办法
1636
查看次数

如何使 apidocs 在 sphinx-apidoc 中使用包而不是模块

我使用 docstrings 来记录 python 代码,并使用 sphinx-autodoc 来生成 apidoc HTML。我的包的结构如下:mainpackage.subpackage.module,我希望 apidocs 从模块中链接到类,而mainpackage.subpackage.Class不是mainpackage.subpackage.module.Class。我的问题来自scikit-multilearn项目,例如:我MLClassifierBase在 中有一个类skmultilearn.base.base,但我将其导入到 中__init__.pyskmultilearn.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。我该如何改变这个?

python python-sphinx autodoc api-doc

5
推荐指数
1
解决办法
1057
查看次数