Изучить строку пути импорта из объекта
Если объект является классом или функцией модуля, мне нужно получить абсолютный путь импорта в виде строки. Пример:
>>> from a.b.c import foo
>>> get_import_path(foo)
'a.b.c.foo'
Я попытался заглянуть в модуль проверки, но ничего не поделаешь.
2 ответа
То, что вы пытаетесь сделать, по своей сути невозможно. 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'