オブジェクトがモジュールのクラスまたは関数である場合、絶対インポート パスを文字列として取得する必要があります。例:
>>> from a.b.c import foo
>>> get_import_path(foo)
'a.b.c.foo'
inspect モジュールを調べようとしましたが、それを行うことは何もありません。
あなたがやろうとしていることは本質的に不可能です。 foo
は、どのようにインポートしたかを単純に知りません。複数の異なる方法でインポートされた可能性さえあります。私の Linux ボックスでの例:
>>> from os.path import normpath
>>> from posixpath import normpath as normpath2
>>> normpath is normpath2
True
normpath
とは同じ関数normpath2
オブジェクトです。どのような方法で輸入されたのかを推測することは不可能です。
__module__
そうは言っても、関数の属性を確認すると役立つ場合があります。
>>> normpath.__module__
posixpath
>>> normpath2.__module__
posixpath
__module__
属性は常に定義されているわけではなく、定義されている場合でも、探している情報が含まれているとは限りません。
__file__
次の属性を使用します。
>>> import string
>>> string.__file__
'/usr/lib/python2.6/string.pyc'