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モジュールは役に立ちますか?
ありがとう。