Python:如何在软件包级别的帮助菜单中嵌入所有文档字符串帮助?

Mik*_*son 6 python numpy docstring package code-documentation

我的意思是:

  • TLDR: 如何让我的软件包帮助包括所有基础文档字符串?
  • 我已经创建了一个包。该软件包具有所有正确的__init__.py文件和所有正确的文档字符串(模块,函数,类和方法级文档字符串)。但是,当我执行时help(mypackage),提供的唯一帮助是该顶级__init__.py模块提供的帮助。

通常,包级的帮助并不包括所有基础文档字符串的,但有时它

我想确保我嵌入了所有基础文档字符串。


例如,在numpy软件包中,即使未在顶级提供,所有基本文档字符串也可在命令提示符的帮助中找到__init__.py

即我可以输入

>>> help(numpy)
Run Code Online (Sandbox Code Playgroud)

并查看所有文档,包括在dunder init模块外部定义的文档。

但是,许多其他软件包,包括诸如pandas软件包之类的流行软件包,并未捕获所有基础文档。

即输入

>>> help(pandas)
Run Code Online (Sandbox Code Playgroud)

仅向我提供中定义的文档__init__.py

我想创建镜像的软件包级文档numpy


我试着numpy浏览一下它是如何执行此魔术的,没有运气。我已经执行过Google搜索,但似乎无法用短语表达此问题并获得任何正当的链接。

san*_*ash 6

numpy向您显示有关在__init__.py模块外部定义的类和函数的文档,因为它们的名称已添加到中的__all__变量中__init__.py。尝试在第169-173行注释(不要忘记取消注释!):

#__all__.extend(['__version__', 'show_config'])
#__all__.extend(core.__all__)
#__all__.extend(_mat.__all__)
#__all__.extend(lib.__all__)
#__all__.extend(['linalg', 'fft', 'random', 'ctypeslib', 'ma'])
Run Code Online (Sandbox Code Playgroud)

这样做之后的输出help(numpy)将非常有限。

还让我们重现此行为。从开始'/some/path',创建文件夹folderfile.py其中包含以下内容的文件:

class Class:
    """Class docstring"""
Run Code Online (Sandbox Code Playgroud)

__init__.py

from .file import *
Run Code Online (Sandbox Code Playgroud)

现在让我们来看一下帮助:

/some/path$ python3.5
>>> import folder
>>> help(folder)

Help on package folder:

NAME
    folder

PACKAGE CONTENTS
    file

FILE
    /some/path/folder/__init__.py
Run Code Online (Sandbox Code Playgroud)

现在将此行添加到__init__.py

__all__ = ['Class']
Run Code Online (Sandbox Code Playgroud)

重新导入后,folder该命令help(folder)将包含有关class Class哪些信息包括您的文档字符串的信息:

Help on package folder:

NAME
    folder

PACKAGE CONTENTS
    file

CLASSES
    builtins.object
        folder.file.Class

    class Class(builtins.object)
     |  Class docstring
     |  
     |  Data descriptors defined here:
     |  
     |  __dict__
     |      dictionary for instance variables (if defined)
     |  
     |  __weakref__
     |      list of weak references to the object (if defined)

DATA
    __all__ = ['Class']

FILE
    /some/path/folder/__init__.py
Run Code Online (Sandbox Code Playgroud)