Изучить строку пути импорта из объекта

Если объект является классом или функцией модуля, мне нужно получить абсолютный путь импорта в виде строки. Пример:

>>> 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'
Другие вопросы по тегам