web-dev-qa-db-ja.com

Python-完全なパッケージモジュール名を取得

アプリケーションの詳細なデバッグメッセージには、役立つプレフィックスを返す関数を使用しています。次の例を考えてみましょう。

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'ファイルをチェックして、フルネームを推定しますが、最初に簡単な方法があるかどうかを知りたいのですが。

21
Hubro

__name__には常にモジュールのフルネームが含まれます。 (もちろん、メインの__main__以外。)

32
lolopop

モジュールの__name__属性を使用してみてください。

6
BrenBarn

パッケージ内の完全なモジュール名を取得する簡単な方法:

print(__file__)
3
Tung Nguyen