コメントにあるように、 inspect.getsource
元のファイル (つまり、module.__file__
) に依存するため、機能しません。 ).
最良の選択肢:.pyc
があるかどうかを確認する ファイル (例:foo.pyc
foo.py
の横にある必要があります )。ある場合は、Decompile Python 2.7 .pyc を使用して逆コンパイルできます。
inspect
モジュールもソースをキャッシュします。運が良ければ inspect.getsource(module)
を使用できるかもしれません 、または inspect.getsourcelines(module.function)
過去に呼び出された場合。
それ以外の場合は、エクスポートを調べてモジュールを「手動で」再構築する必要があります (つまり、module.__globals__
)。定数などは明らかで、関数には func.func_name
を使用できます その名前を取得するには func.__doc__
docstring inspect.getargspec(func)
を取得するには 引数を取得し、func.func_code
コードの詳細を取得するには:co_firstlineno
行番号を取得し、次に co_code
を取得します コードを取得します。ここに逆コンパイルの詳細があります:Python バイトコードの探索と逆コンパイル
たとえば、uncompyle2
を使用するには :
>>> def foo():
... print "Hello, world!"
...
>>> from StringIO import StringIO
>>> import uncompyle2
>>> out = StringIO()
>>> uncompyle2.uncompyle("2.7", foo.func_code, out=out)
>>> print out.getvalue()
print 'Hello, world!'
しかし、いいえ — モジュールを取得してソース コードを元に戻す、これ以上簡単な方法を私は知りません。