2010-03-10 109 views
1

在python中,如果我有一個類foo,我可以用call foo.__module__來獲取一個字符串,它包含它所屬模塊的名稱。如何從模塊中獲取模塊路徑

如果我有一個模塊bar,我可以調用bar.__file__來獲取一個字符串與模塊加載的路徑。

如何,當我只有班foo我可以得到它是模塊的一部分的路徑? (foo.__module__返回一個字符串,而不是模塊它名字的一個實例)

回答

5

sys.modules是從模塊名稱映射到模塊:

sys.modules[foo.__module__].__file__ 
4

對於這種自省的任務,我總是建議使用Python標準庫的inspect模塊:它可以處理一些角落案例& c,並使整個過程更平滑。針對您的特殊任務,inspect.getsourcefile都能得心應手 - 例如,考慮...:

>>> from sched import scheduler as someclass 
>>> import inspect 
>>> inspect.getsourcefile(someclass) 
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/sched.py' 

這總是試圖給你.py文件,而不是有時.py文件,有時一個.pyc文件,而不是 - 不是大不了,但更有用的「規律」。