1

setup.py のパッケージの説明で README.rst の情報を再利用しようとしています。

私の setup.py には readme 関数があります。

def readme():
    try:
        with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as f:
            return f.read()
    except (IOError, OSError):
        return ''

私が呼ぶ

setup(
    ...
    long_description=readme(),
    ...
)

私のreStructuredTextはかなり巨大なREADME.rstであるため、再構築されたテキストの特定のセクションだけを読む方がよいかもしれません。

readme()README.rst を解析し、残りの reStructuredText フォーマットを無視するように書き換えるスマートな方法はありますか?つまり、小さなサブセクションのプレーンテキストのみを提供しますか?

4

2 に答える 2

2

これは完璧ではありませんが、仕事はします:

def readme():
    try:
        import docutils
    except ImportError:
        try:
            with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as f:
                return f.read()
        except (IOError, OSError):
            return ''
    with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as f:
        document = docutils.core.publish_doctree(f.read())
        nodes = list(document)
        description = ''
        for node in nodes:
            if str(node).startswith('<topic classes="contents"'):
                break
            if type(node) is docutils.nodes.comment\
            or type(node) is docutils.nodes.title:
                continue
            description += node.astext() + '\n'
        return  return description.encode('ascii', 'ignore').strip()

rST ドキュメント ツリーをたどることで、はるかに優れた洗練された解析を実行できると思います。

于 2013-07-26T16:16:19.120 に答える
1

DocUtils のこの部分を使用できると思います。

"ドキュメントの解析

パーサーは入力ドキュメントを分析し、ノード ツリー表現を作成します。この場合、reStructuredText パーサー (docutils/parsers/rst/init.py) を使用しています。そのノード ツリーがどのように見えるかを確認するには、最初のパラメーターとしてサンプル ファイル (test.txt) を使用して quicktest.py (Docutils ディストリビューションの tools/ ディレクトリにあります) を呼び出します (Windows ユーザーは python quicktest と入力する必要がある場合があります)。 .py test.txt):

$ quicktest.py test.txt 私の好きな言語は Python です。ノード ツリーを調べてみましょう。

最上位ノードはドキュメントです。値が text.txt であるソース属性があります。2 つの子があります: 段落ノードとターゲット ノードです。段落には、テキスト ノード ("My ")、強調ノード、テキスト ノード (" language is ")、参照ノード、およびテキスト ノード (".") という子があります。

これらのノード タイプ (ドキュメント、段落、強調など) はすべて docutils/nodes.py で定義されています。ノード タイプは内部的にクラス階層として配置されます (たとえば、強調と参照の両方に共通のスーパークラス Inline があります)。ノード クラス階層の概要を取得するには、epydoc (タイプ epydoc nodes.py) を使用し、クラス階層ツリーを参照してください。" -- http://docutils.sourceforge.net/docs/dev/hacking.html

ドキュメント全体から必要なノードだけを見つけて、関連するノードだけを書きます:)

于 2013-07-26T15:47:47.283 に答える