我需要知道代码对象来自哪里;它的模块。所以我(天真地)尝试了:
os.path.abspath(code.co_filename)
但这可能有效,也可能无效,(我认为这是因为 abspath 取决于 cwd)
有什么方法可以获取代码对象模块 的完整路径?
编辑:
检查模块中的函数:getfile、getsourcefile、getmodule,仅获取文件名,而不是其路径(与 co_filename 相同)。也许他们使用abspath。
import inspect
print inspect.getfile(inspect)
该inspect.getsourcefile()
函数是您所需要的,它返回可以找到对象源的文件的相对路径。
如果您有权访问该模块,请尝试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__
它。