アプリケーションの詳細なデバッグメッセージには、役立つプレフィックスを返す関数を使用しています。次の例を考えてみましょう。
import inspect
def get_verbose_prefix():
"""Returns an informative prefix for verbose debug output messages"""
s = inspect.stack()
module_name = inspect.getmodulename(s[1][1])
func_name = s[1][3]
return '%s->%s' % (module_name, func_name)
def awesome_function_name():
print "%s: Doing some awesome stuff right here" % get_verbose_prefix()
if __name__ == '__main__':
awesome_function_name()
この出力:
test-> awesome_function_name:ここで素晴らしいことをする
私の問題は:パッケージにモジュールがある場合、たとえば 'myproject.utilities.input'の場合、モジュール名はget_verbose_prefix
は、「myproject.utilities.input」ではなく、「input」のままです。これにより、すべてが一緒に機能する異なるサブモジュールに複数の「入力」モジュールが存在する可能性がある場合、大規模プロジェクトでのプレフィックスの有用性が大幅に低下します。
だから私の質問は: Pythonのパッケージ内で完全なモジュール名を取得する簡単な方法はありますか?私はget_verbose_prefix
関数は、モジュールの親ディレクトリにある '__init__.py'ファイルをチェックして、フルネームを推定しますが、最初に簡単な方法があるかどうかを知りたいのですが。
__name__
には常にモジュールのフルネームが含まれます。 (もちろん、メインの__main__
以外。)
モジュールの__name__
属性を使用してみてください。
パッケージ内の完全なモジュール名を取得する簡単な方法:
print(__file__)