2011-06-11 48 views
3

如果一個對象是一個模塊的類或函數,我需要檢索絕對導入路徑作爲一個字符串。例如:檢查從對象導入路徑字符串

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

我試圖調查inspect模塊,但沒有什麼可以做的。

+0

也許你應該問你*真的*想要回答的問題。 – 2011-06-11 20:25:13

+1

@Ignacio,我認爲問題是如何實現'get_import_path'。 – khachik 2011-06-11 20:28:59

+2

@khachik:除了通常自己不知道的有用之外,這意味着[這是沒有被問到的真正的問題](http://mywiki.wooledge.org/XyProblem)。 – 2011-06-11 20:30:27

回答

4

什麼你正在嘗試做的本質上是不可能的。 foo根本不知道你是如何導入的 - 它甚至可能以多種不同的方式導入。例如在我的Linux機器:

>>> from os.path import normpath 
>>> from posixpath import normpath as normpath2 
>>> normpath is normpath2 
True 

所以normpathnormpath2是相同的函數對象。無法推斷他們以何種方式導入的信息。

這就是說,它有時可能有助於看看你的函數的__module__屬性:

>>> normpath.__module__ 
posixpath 
>>> normpath2.__module__ 
posixpath 

__module__屬性並不總是確定的,如果它被定義,它並不總是包含的信息,您正在找。

0

使用__file__屬性:

>>> import string 
>>> string.__file__ 
'/usr/lib/python2.6/string.pyc'