2

Python 3 でプログラムを作成し、Sphinx を使用して文書化しています。Sphinx の autodoc は優れていますが、Python 2 でしか動作しません。一部のモジュールは autodoc で正常に動作しますが、モジュールは動作しません。いくつかの例: Python 2 は、Python 3 スタイルのメタクラス、およびconfigparserなどの Python 2 にはもう存在しないいくつかのモジュールについて不平を言います。そのファイルからdocstringをインポートできないため、これは面倒です。

Python 2 でプログラム全体を書き直すつもりはありませんが、autodoc を使用したいと考えています。

私が思いついたアイデアの 1 つは、各 Python ファイルを読み取り、すべての機能を削除し、基本的な関数とクラスをドキュメント文字列と共に残す小さなプログラムでした (autodoc は各モジュールをインポートし、特定の関数またはクラスのドキュメント文字列を読み取るため)。

import configparser
import os

class TestClass:
    """
    I am a class docstring.
    """
    def method(self, argument):
        """
        I am a method docstring.
        """
        #Some code here
        print(os.getcwd())

def TestFunction():
    """
    I am a function docstring.
    """
    #Some more useless code here
    return os.path.join("foo", "bar")

の中へ...

class TestClass:
    """
    I am a class docstring.
    """
    def method(self, argument):
        """
        I am a method docstring.
        """
        pass

def TestFunction():
    """
    I am a function docstring.
    """
    pass

このようにして、処理されたコードはautodocで読み取ることができますが、私が本当に必要としているdocstringをまだ持っています. これが最善の方法ですか?コードを変換する小さなプログラムの書き方について何か提案はありますか?

いくつかの正規表現でメタクラスの問題を非常に簡単に取り除くことができますが、残りは苦労しています。

m = re.search("\(metaclass=.*\)", file_content)
if m:
    file_content = "".join(file_content[:m.start()], file_content[m.end():])

astモジュールは役に立ちますか?

ありがとう。

4

3 に答える 3

5

Python 3 をサポートする sphinx の開発バージョンをインストールするだけです。

pip-3.2 install hg+https://bitbucket.org/birkenfeld/sphinx

あなたのクラスで autodoc 機能をテストしたところ、うまくいきました。

于 2011-04-11T20:25:54.073 に答える
1

解決策になりがちなのは、コードに try/except 句を散りばめることです。

Python 2.6 には configparser がありますが、これは ConfigParser として知られています (python 3 ではキャメルケースの名前がす​​べて小文字に変更されました)。

次のようなもの:

try:
  import configparser
except ImportError:
  #we are in 2.x
  import ConfigParser as configparser

壊れている場所で、このようないくつかのことをしたいかもしれません。ふたつの間に。2つの間のメタクラスですが、処理するかどうかはわかりません。

于 2011-04-09T16:30:39.720 に答える
0

Python 3 コードを Python 2 に変換できる3to2 ライブラリがあります。これを Sphinx と組み合わせて試すことができます。

于 2011-04-09T16:53:51.303 に答える