如何防止Sphinx显示我的类的完整路径?

31

我有这样的项目结构:

package/
    __init__.py
    module.py

__init__.py 包含:

from .module import Class

module.py 包含:

class Class:
    pass
使用 sphinx-apidoc -o package/docs/ package/sphinx-build package/docs/ package/docs/_buildClass 的文档如下所示:

class package.module.Class

     Bases: object

我想要的输出结果是:

class package.Class

     Bases: object

或者更好的方式是不带包名:

class Class

     Bases: object

用户不需要知道类定义在哪个文件中;如果不是混淆,这些信息完全无关紧要。由于 __init__.py 直接将 Class 导入到包的命名空间中,用户将以 from package import Class 的形式导入此类,而不是以 from package.module import Class 的形式导入,因此我希望文档能够反映出这一点。
有没有办法让 Sphinx 输出相对于包的命名空间的路径?

1
相似问题:https://dev59.com/ol8e5IYBdhLWcg3w4dik, https://dev59.com/v10b5IYBdhLWcg3wR_fe - mzjn
据我所知,sphinx-apidoc以“天真”的方式递归查找Python模块和包。如果您在包的__init__.py中导入某些内容,则sphinx-apidoc将无法识别它们。 - mzjn
1
一个快速而丑陋的解决方案是在目录树上应用正则表达式替换,通过后处理生成的文件,类似于这些行。 - ccpizza
你尝试过更改类的__module__值吗?例如Class.__module__ ='package'。这也会产生其他副作用,但总的来说,我猜它可能会起作用。 - zvone
我曾经通过创建一系列"sphinx文档"来完成这一操作。这样,您可以对sphinx中的树形层次结构进行严格控制。请记住,sphinx旨在记录Python模块以与其他Python开发人员共享,其中保留模块层次结构等内容非常重要。如果您偏离此用例,那么迫使Sphinx做您想要的事情可能会变得困难。 - morphheus
显示剩余4条评论
2个回答

12

尝试在conf.py中添加add_module_names = False


5

在添加add_module_names = False(参见这个答案)可以让Sphinx将package.module.Class渲染为Class,但如果您想将package.module.Class呈现为package.Class(即将类作为package命名空间的一部分进行记录),那么它就不起作用了。

如果您想要Sphinx将package.module.class记录为package.Class,请在包的__init__.py中包括以下行(参见此答案):

# This lets you use package.module.Class as package.Class in your code.
from .module import Class

# This lets Sphinx know you want to document package.module.Class as package.Class.
__all__ = ['Class']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接