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

4 投票
3 回答
1021 浏览
提问于 2025-04-16 23:57

我想知道一个代码对象是从哪里来的,也就是它所属的模块。所以我(有点天真地)尝试了:

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)

撰写回答