Изучить строку пути импорта из объекта - PullRequest
3 голосов
/ 12 июня 2011

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

>>> from a.b.c import foo
>>> get_import_path(foo)
'a.b.c.foo'

Я попытался проверить модуль, но ничего не поделаешь.

Ответы [ 2 ]

4 голосов
/ 12 июня 2011

То, что вы пытаетесь сделать, по своей сути невозможно. 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__ не всегда определяется, и если он определен, он не всегда содержит информацию, которую вы ищете.

0 голосов
/ 12 июня 2011

Используйте атрибут __file__:

>>> import string
>>> string.__file__
'/usr/lib/python2.6/string.pyc'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...