我在使用readthedocs autodocs时出现问题 - 构建完成但我的文档对于每个类都是空的。
查看构建信息,似乎得到一个语法错误,导致一些警告:
print(clean_sample, file=open(new_fname, 'w'))
但是,这对我来说似乎不是一个错误。
这是构建信息 https://readthedocs.org/projects/medembed/builds/7108142/
我的文件结构是:
MedEmbed/
docs/
build/
source/
code.rst
conf.py
index.rst
medembed/
__init.py
main.py
transformer.py
dataset.py
embedding.py
因此我在conf.py中添加了:
sys.path.insert(0, os.path.abspath('../../medembed'))
我真的很感激一些建议
编辑:Python3 Sphinx解决了上述问题。现在,我从 init.py
导入常量DIR_PROCESSED
出于某种原因,Sphinx不喜欢这样:
from medembed import DIR_PROCESSED
ImportError: No module named 'medembed
构建失败: https://readthedocs.org/projects/medembed/builds/7108602/
答案 0 :(得分:2)
有很多事情与Sphinx无法正常工作。
code.rst
:您应该为要运行的每个模块指定包名称autodoc
:
.. automodule:: medembed.main
:members:
.. automodule:: medembed.dataset
:members:
.. automodule:: medembed.embedding
:members:
.. automodule:: medembed.transformer
:members:
conf.py
:您要添加到SYSPATH
的路径是包的父目录的路径,而不是包本身:
sys.path.insert(0, os.path.abspath('../../'))
main.py
,dataset.py
,embedding.py
,transformer.py
:当您从包中导入内容时,您应该使用相对导入而不是绝对导入:
-from transformer import Transformer
+from .transformer import Transformer
-from medembed import DIR_PROCESSED
+from . import DIR_PROCESSED
-from dataset import TxtDataset, XMLDataset
-from embedding import Embedding
+from .dataset import TxtDataset, XMLDataset
+from .embedding import Embedding
main.py
:不添加if __name__ == "__main__"
指令:代码将在Sphinx分析时执行,而这不是您想要的(请参阅this post)。事实上,如果你尝试的话,sphinx会禁止这个并发出警告:
WARNING: autodoc: failed to import module 'medembed.main'; the module executes module level statement and it might call sys.exit().
你应该做的是在父目录中创建一个不会被sphinx分析的main.py
:
from medembed.main import main
if __name__ == '__main__':
main()
我在这里使用绝对导入,因为此main.py
文件不在medembed
包中。
我在您的repo上创建了一个包含所有这些更改的拉取请求: https://github.com/isaacsultan/MedEmbed/pull/4