我需要知道代码对象的来源;它的模块。所以我(天真地)尝试过:
os.path.abspath(code.co_filename)
但这可能会或可能不会奏效,(我认为这是因为abspath取决于cwd)
以任何方式获取代码对象模块的完整路径?
编辑:
来自inspect模块的函数:getfile,getsourcefile,getmodule,只获取文件名,而不是其路径(与co_filename相同)。也许他们使用abspath。
答案 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__
。