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

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

於宾白
2023-03-14
问题内容

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

project/
    mymodule/
        __init__.py
        m1.py
        m2.py
        sub1/
            __init__.py
            s1.py
            s2.py

mymod/__init__.py

"""The __init__ docstr"""
from m1 import *
from m2 import *

mymod/m1.py

"""m1 doc str"""
def func1():
    """func1 docstr"""
    return 1

mymod/m2.py

"""m2 doc str"""
def func2():
    """func2 docstr"""
    return 2

mymod/sub1/__init__.py

"""The sub1 __init__ docstr"""
from s1 import *
from s2 import *

mymod/sub1/s1.py

"""s1 docstr"""
def sub1():
    """sub1 docstr"""
    return 3

mymod/sub1/s2.py

"""s2 docstr"""
def sub2():
    """sub2 docstr"""
    return 4

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

>>> import mymod
>>> from mymod import sub1
>>> mymod.func1()
1
>>> sub1.subfunc1()
3
>>> mymod.__doc__
'The __init__ docstr'
>>> mymod.func1.__doc__
'func1 docstr'

但是,当我在sphinx中使用自动模块时(将项目文件夹添加到sys.path之后):

.. automodule:: mymod
    :members:

.. automodule:: mymod.sub1
    :members:

我得到的页面只有:

The __init__ docstr
The sub1 __init__ docstr

似乎正在忽略from m1 import *类型语句。

但是,如果我将所有代码直接复制到__init__每个模块/子模块的文件中,则会得到:

The __init__ docstr

mymod.func1()
func1 docstr

mymod.func2()
func2 docstr

The sub1 __init__ docstr

mymod.sub1.sub1()
sub1 docstr

mymod.sub1.sub2()
sub2 docstr

sphinx是否automodule不适用于__init__文件中具有此类导入语句的模块,还是我遗漏了一个更明显的问题?

理想情况下,当我将所有代码放入 init 时,我希望得到类似的输出(改为使用import语句输入)。


问题答案:

如果将__all__列表添加到__init__.py文件中,它将起作用。例如:

"""The __init__ docstr"""

__all__ = ['func1', 'func2']

from m1 import *
from m2 import *


 类似资料:
  • 问题内容: 我一直在阅读有关文件的功能。据说我们在包含模块的文件夹中需要一个空文件,以便可以导入这些模块。但是,我尝试将文件夹路径添加到PYTHONPATH(Windows 7中为环境变量)。尽管此文件夹不包含文件,但我仍然可以从该文件夹导入模块。您能否解释一下在不存在的情况下如何导入这些模块? 谢谢, 最好的祝福 问题答案: 把一个文件夹变成一个包。这对于创建某种模块层次结构很有用,您可以在其中

  • 问题内容: 我试图了解关于Python(v2.7)导入机制的最佳实践。我有一个项目开始有所增长,可以说我的代码如下组织: 包名称为,在其下方,我有一个模块,其中包含该类的代码。因此,我对包,模块和类使用了相同的名称,但起初可能不太聪明。 为空,需要导入类,因此文件的一部分如下所示: 但是我后来又重新考虑了这一点,并且我认为最好在文件中包含所有导入内容。因此,我现在看起来像: 而我只需要导入: 虽然

  • 问题内容: 我正在尝试为我的一个模型编写函数,以便可以通过执行以下操作创建对象: 当我编写模型时,我有: 这样可以正常工作,我可以将对象保存到数据库中,但是当我这样做时,除非我拿出函数,否则它不会拉任何东西。有任何想法吗? 问题答案: 依靠Django的内置功能并传递命名参数将是最简单的方法。 但是,如果您打算保存一些击键,建议您向类添加一个静态便捷方法,而不要弄乱初始化程序。

  • 问题内容: 我正在学习Python,但无法弄清楚导入的工作方式。 我从Python教程中了解到该文件初始化了一个程序包,并且可以在此处导入子程序包。 不过,我做错了。您能为我(以及将来的Python学习者)解释我做错了什么吗? 这是我正在尝试做的一个简化示例。 这是我的文件结构: 内容: 是空的。 包含: 最后,包含: 这就是我尝试使用OSX终端和Python 3运行hello_world.py的

  • 我创建了express应用程序,有一条路线可以使用许多中间件: 这是我的中间件。js: 它工作得很好。但当我试着写测试时遇到了问题。这是我的测试,我使用mocha、chai、supertest和sinon: 问题是什么 您可以看到有3个存根,1个用于,2个用于在路由的同一个文件中。 问题是,2个存根工作,而1个用于<代码>中间件。saveUser不工作,请始终触发原始用户。 我想,当我调用setu

  • 我正在使用内核3.16并尝试使用LZ4压缩内存中的数据。我检查了内核源代码树,找到了压缩源文件/lib/lz4。c和我使用了以下函数: 但我得到了以下错误: 我的源代码: 我试图找到一些关于LZ4如何在内核模块中工作的示例,但什么也没有找到。我不知道是否有人有在内核模块中进行压缩的经验。 谢啦!