我有一个Python包,我试图用sphinx-autodoc记录.我的python包有一个__init__.py文件,它从子模块中导出一个类,使其可以在包级别访问.
from a.b.c.d import _Foo as Foo
__all__ = ["Foo"]
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我的(html)文档如下:
abc包
子模块
abcd模块
[在abcd模块中剪切不相关公共类的文档]
模块内容
c模块.
abc Foo
_Foo的别名
_Foo因为它是abcd子模块中的私有类,所以(正确地)没有文档,因此不是非常有用.
我可以在my中添加以下内容,以conf.py确保记录模块中的私有类定义.
def skip(app, what, name, obj, skip, options):
if name == "_Foo":
return False
return skip
Run Code Online (Sandbox Code Playgroud)
其他替代方案,但不是我尝试过的好东西:
a.b.c.d._Foo为a.b.c.d.Foo(然后更新导入到from a.b.c.d import Foo) - 但后来我将类记录两次,一次在abcd模块标题下,再一次在Module内容标题下.a.b.c.d.Foo到a.b.c.d.MyFoo,然后导入(from a.b.c.d import MyFoo as Foo)导致MyFoo被记录,并且Foo被列为一个别名MyFoo. …我正在创建我的第一个cookiecutter。总的来说,这进展顺利,但我现在想添加我自己的 jinja2 过滤器。
根据本期的评论,我创建了一个新的 Jinja2 扩展,很像这里的扩展。此扩展的完整代码在这里:
但是,以下简单示例演示了相同的错误:
# -*- coding: utf-8 -*-
from jinja2.ext import Extension
def slug(value):
return value
class PaperTitleExtension(Extension):
def __init__(self, environment):
super(PaperTitleExtension, self).__init__(environment)
environment.filters['slug'] = slug
Run Code Online (Sandbox Code Playgroud)
我已将此代码放入一个新jinja2_extensions目录并添加了一个简单__init__.py的如下:
# -*- coding: utf-8 -*-
from paper_title import PaperTitleExtension
__all__ = ['PaperTitleExtension']
Run Code Online (Sandbox Code Playgroud)
基于这篇文档,我还在“cookiecutter.json”文件中添加了以下内容:
"_extensions": ["jinja2_extensions.PaperTitleExtension"]
Run Code Online (Sandbox Code Playgroud)
但是,运行它会产生以下错误:
$ cookiecutter sigchiproceedings-cookiecutter
Unable to load extension: No module named 'jinja2_extensions'
Run Code Online (Sandbox Code Playgroud)
我猜我在这里遗漏了一些步骤,有人可以帮忙吗?