Überprüfen Sie die Importpfadzeichenfolge aus dem Objekt
Frage
Wenn ein Objekt die Klasse oder Funktion eines Moduls ist, muss ich den absoluten Importpfad als Zeichenfolge abrufen. Beispiel:
>>> from a.b.c import foo
>>> get_import_path(foo)
'a.b.c.foo'
Ich habe versucht, das Modul zu inspizieren, aber das gibt nichts zu tun.
Lösung
Was Sie versuchen zu tun, ist von Natur aus unmöglich. foo
weiß einfach nicht, wie du es importiert hast - es könnte sogar auf verschiedene Arten importiert worden sein. Beispiel auf meiner Linux -Box:
>>> from os.path import normpath
>>> from posixpath import normpath as normpath2
>>> normpath is normpath2
True
So normpath
und normpath2
sind das gleiche Funktionsobjekt. Es ist unmöglich, die Informationen so abzuleiten, wie sie importiert wurden.
Das heißt, es könnte manchmal helfen, das zu betrachten __module__
Attribut Ihrer Funktion:
>>> normpath.__module__
posixpath
>>> normpath2.__module__
posixpath
Das __module__
Das Attribut ist nicht immer definiert, und wenn es definiert ist, enthält es nicht immer die Informationen, nach denen Sie suchen.
Andere Tipps
Verwenden Sie das __file__
Attribut:
>>> import string
>>> string.__file__
'/usr/lib/python2.6/string.pyc'