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

发布于 2024-11-30 13:54:56 字数 295 浏览 2 评论 0原文

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

os.path.abspath(code.co_filename)  

但这可能有效也可能无效,(我认为这是因为abspath依赖于cwd)

有什么方法可以获取代码对象模块的完整路径

编辑:
检查模块中的函数:getfile、getsourcefile、getmodule,仅获取文件名,而不获取其路径(与 co_filename 相同)。也许他们使用abspath。

I need to know where a code object comes from ; its module. So I (naively) tried :

os.path.abspath(code.co_filename)  

But that may or may not work, (I think it's because abspath depends on cwd)

Any way to get the full path of a code object's module ?

EDIT :
The functions from the inspect module : getfile, getsourcefile, getmodule, get only the file name, not its path (same thing as co_filename). Maybe they use abspath.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

羅雙樹 2024-12-07 13:54:56
import inspect
print inspect.getfile(inspect)
import inspect
print inspect.getfile(inspect)
森罗 2024-12-07 13:54:56

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

The inspect.getsourcefile() function is what you need, it returns the relative path to the file where the object's source can be found.

等数载,海棠开 2024-12-07 13:54:56

如果您有权访问该模块,请尝试 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__ 就可以了。

If you have access to the module, try 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'

If you don't, something like this should work:

>>> 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'

In this case, we are using the fact that import can be called on the string version of the module, which returns the actual module object, and then calling __file__ on that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文