0

ドキュメント (任意のタイプ: html、man ページ、latexpdf...) をビルドしようとすると、sphinx はプロジェクトのサブディレクトリを autodoc しようとして失敗します。問題を絞り込むためにさまざまなアプローチを試みましたが、原因を見つけることができないようです。最初のファイルはすべて sphinx-apidoc によって生成されました。

ディレクトリ A には、次の最初のファイルがあります。

Directory A
=======================================

Submodules
----------

.. toctree::

   A.fileB
   A.fileC
   A.fileD
   A.fileE

Module contents
---------------

.. automodule:: A
    :members:
    :undoc-members:
    :show-inheritance:

:members: ディレクティブを削除しても、エラーは発生しません。ファイル B または E が欠落している場合、または E 内のファイル B のインポートが欠落しているかコメントアウトされている場合も、エラーは発生しません。

fileB と fileE が単純に次のようにペアになっている場合でも、失敗します。

ファイル B:

class B(object):
    pass

ファイルE:

from fileB import B

class E(B):
    pass

次のスタック トレースを使用します。

# Sphinx version: 1.3b2
# Python version: 2.7.5
# Docutils version: 0.12 release
# Jinja2 version: 2.6
# Last messages:
#   reading sources... [ 37%] foo
#   reading sources... [ 37%] foo
#   reading sources... [ 38%] foo
#   reading sources... [ 38%] foo
#   reading sources... [ 39%] foo
#   reading sources... [ 39%] foo
#   reading sources... [ 40%] foo
#   reading sources... [ 40%] foo
#   reading sources... [ 41%] foo
#   reading sources... [ 41%] problem file
# Loaded extensions:
#   sphinx.ext.autodoc (1.3b2) from Sphinx-1.3b2-py2.7.egg/sphinx/ext/autodoc.pyc
#   sphinx.ext.viewcode (1.3b2) from Sphinx-1.3b2-py2.7.egg/sphinx/ext/viewcode.pyc
Traceback (most recent call last):
  File "Sphinx-1.3b2-py2.7.egg/sphinx/cmdline.py", line 246, in main
    app.build(opts.force_all, filenames)
  File "Sphinx-1.3b2-py2.7.egg/sphinx/application.py", line 257, in build
    self.builder.build_update()
  File "Sphinx-1.3b2-py2.7.egg/sphinx/builders/__init__.py", line 237, in build_update
    'out of date' % len(to_build))
  File "Sphinx-1.3b2-py2.7.egg/sphinx/builders/__init__.py", line 251, in build
    self.doctreedir, self.app))
  File "Sphinx-1.3b2-py2.7.egg/sphinx/environment.py", line 585, in update
    self._read_serial(docnames, app)
  File "Sphinx-1.3b2-py2.7.egg/sphinx/environment.py", line 601, in _read_serial
    self.read_doc(docname, app)
  File "Sphinx-1.3b2-py2.7.egg/sphinx/environment.py", line 753, in read_doc
    pub.publish()
  File "docutils/core.py", line 217, in publish
    self.settings)
  File "docutils/readers/__init__.py", line 72, in read
    self.parse()
  File "docutils/readers/__init__.py", line 78, in parse
    self.parser.parse(self.input, document)
  File "docutils/parsers/rst/__init__.py", line 172, in parse
    self.statemachine.run(inputlines, document, inliner=self.inliner)
  File "docutils/parsers/rst/states.py", line 170, in run
    input_source=document['source'])
  File "docutils/statemachine.py", line 239, in run
    context, state, transitions)
  File "docutils/statemachine.py", line 460, in check_line
    return method(match, context, next_state)
  File "docutils/parsers/rst/states.py", line 2726, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "docutils/parsers/rst/states.py", line 327, in section
    self.new_subsection(title, lineno, messages)
  File "docutils/parsers/rst/states.py", line 395, in new_subsection
    node=section_node, match_titles=True)
  File "docutils/parsers/rst/states.py", line 282, in nested_parse
    node=node, match_titles=match_titles)
  File "docutils/parsers/rst/states.py", line 195, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "docutils/statemachine.py", line 239, in run
    context, state, transitions)
  File "docutils/statemachine.py", line 460, in check_line
    return method(match, context, next_state)
  File "docutils/parsers/rst/states.py", line 2726, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "docutils/parsers/rst/states.py", line 327, in section
    self.new_subsection(title, lineno, messages)
  File "docutils/parsers/rst/states.py", line 395, in new_subsection
    node=section_node, match_titles=True)
  File "docutils/parsers/rst/states.py", line 282, in nested_parse
    node=node, match_titles=match_titles)
  File "docutils/parsers/rst/states.py", line 195, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "docutils/statemachine.py", line 239, in run
    context, state, transitions)
  File "docutils/statemachine.py", line 460, in check_line
    return method(match, context, next_state)
  File "docutils/parsers/rst/states.py", line 2299, in explicit_markup
    nodelist, blank_finish = self.explicit_construct(match)
  File "docutils/parsers/rst/states.py", line 2311, in explicit_construct
    return method(self, expmatch)
  File "docutils/parsers/rst/states.py", line 2054, in directive
    directive_class, match, type_name, option_presets)
  File "docutils/parsers/rst/states.py", line 2103, in run_directive
    result = directive_instance.run()
  File "Sphinx-1.3b2-py2.7.egg/sphinx/ext/autodoc.py", line 1441, in run
    documenter.generate(more_content=self.content)
  File "Sphinx-1.3b2-py2.7.egg/sphinx/ext/autodoc.py", line 816, in generate
    self.document_members(all_members)
  File "Sphinx-1.3b2-py2.7.egg/sphinx/ext/autodoc.py", line 699, in document_members
    members_check_module, members = self.get_object_members(want_all)
  File "Sphinx-1.3b2-py2.7.egg/sphinx/ext/autodoc.py", line 878, in get_object_members
    for mname in memberlist:
TypeError: 'type' object is not iterable

autodoc が読み込もうとしているファイルに何か問題があるのでしょうか、それとも autodoc 自体に問題があるのでしょうか? 私が試すことができる回避策はありますか?

ありがとう!

4

1 に答える 1

0

したがって、私の問題の解決策は、 A のinitが単に持っていたということでした

from A.fileD import D
__all__ == D

含まれている必要がある場合:

from A.fileD import D
__all__ == ["D"]

Sphinx も更新され、これが発生したときに失敗するのではなく、警告を発行するようになりました。

WARNING: missing attribute mentioned in :members: or __all__: ...

詳細については、 https://github.com/sphinx-doc/sphinx/issues/1674を参照してください。

于 2015-01-15T21:38:32.370 に答える