2010-03-10 68 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文件,而不是 - 不是大不了,但更有用的“规律”。