如何找到代码对象来源的文件?
我想知道一个代码对象是从哪里来的,也就是它所属的模块。所以我(有点天真地)尝试了:
os.path.abspath(code.co_filename)
但这个方法可能有效,也可能无效,(我觉得是因为abspath依赖于当前工作目录)
有没有什么办法可以获取一个代码对象的模块的完整路径?
补充说明:
来自inspect模块的函数:getfile、getsourcefile、getmodule,只能获取文件名,而不是它的路径(和co_filename是一样的)。也许它们使用了abspath。
3 个回答
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'
在这种情况下,我们利用了一个特点,就是可以用模块的字符串名称来导入它,这样就能得到实际的模块对象,然后再调用 __file__
。
1
inspect.getsourcefile()
这个函数就是你需要的,它会返回一个相对路径,这个路径指向包含该对象源代码的文件。
3
当然可以!请看下面的内容:
这个问题主要是关于如何在代码中处理某些特定的情况。很多时候,我们在编程时会遇到一些错误或者意外的结果,这时候就需要找到解决办法。
在这个讨论中,大家分享了他们的经验和解决方案。有的人提到了一些常见的错误类型,比如变量没有正确赋值,或者函数没有被正确调用。这些问题听起来可能有点复杂,但其实只要仔细检查代码,就能找到问题所在。
还有人分享了调试的方法,比如使用打印语句来查看变量的值,或者使用调试工具一步一步地跟踪代码的执行。这些方法都很实用,尤其是对于刚开始学习编程的人来说。
总之,编程中遇到问题是很正常的,重要的是要保持耐心,仔细分析,找到解决方案。
import inspect
print inspect.getfile(inspect)