如何找到代码对象来自的文件?

时间:2011-08-19 14:41:15

标签: python inspect

我需要知道代码对象的来源;它的模块。所以我(天真地)尝试过:

os.path.abspath(code.co_filename)  

但这可能会或可能不会奏效,(我认为这是因为abspath取决于cwd)

以任何方式获取代码对象模块的完整路径

编辑:
来自inspect模块的函数:getfile,getsourcefile,getmodule,只获取文件名,而不是其路径(与co_filename相同)。也许他们使用abspath。

3 个答案:

答案 0 :(得分:3)

import inspect
print inspect.getfile(inspect)

答案 1 :(得分:1)

inspect.getsourcefile()函数是您需要的函数,它返回可以找到对象源的文件的相对路径。

答案 2 :(得分:0)

如果您有权访问该模块,请尝试module.__file__

>>> import xml
>>> xml.__file__
'/usr/local/lib/python2.6/dist-packages/PyXML-0.8.4-py2.6-linux-i686.egg/_xmlplus/__init__.pyc'

如果你不这样做,这样的事情应该有效:

>>> import xml.etree.ElementTree as ET
>>> thing = ET.Element('test')
>>> __import__(thing.__module__).__file__
'/usr/local/lib/python2.6/dist-packages/PyXML-0.8.4-py2.6-linux-i686.egg/_xmlplus/__init__.pyc'

在这种情况下,我们使用的事实是可以在模块的字符串版本上调用import,它返回实际的模块对象,然后在其上调用__file__