【问题标题】:Where is the __builtin__ module in CPythonCPython 中的 __builtin__ 模块在哪里
【发布时间】:2011-06-26 07:13:39
【问题描述】:

我想获取__builtin__模块的路径和源码,在哪里可以获取?

【问题讨论】:

  • 您是指____builtin____ 模块的内置C 代码还是Python 代码?如果是后者,对不起,它不存在。
  • 考虑到 OP 明确要求 CPython,必须清楚他不需要解释不存在模块的 python 源。跨度>
  • @funktku,是的,你是对的。我明白了。

标签: python cpython


【解决方案1】:

__builtin__ 模块的最新(主干)C 源代码:http://svn.python.org/view/python/trunk/Python/bltinmodule.c?view=markup

【讨论】:

  • 太好了。你知道模块加载过程的哪一部分专门处理内置模块吗?
  • @Thomson,我不能说是理所当然的,但也许不涉及特殊代码。只是一个数据结构(粗俗的 C struct),它定义了模块并包含指向我们可以在 bltinmodule.c 中看到的函数的指针。就像 C API 中的任何其他本机模块一样。然后他们可能只是将bltinmodule.o 静态链接到libpython.so。再说一遍——我不确定,只是猜测。在任何情况下,我都会这样做。
  • @Thomson,所以,事实证明我是对的。模块定义在文件末尾附近;关于您关于加载__builtin__ 模块的问题——这也很简单:模块与解释器一起加载;这就是静态链接的工作方式。请问,你想做什么?
【解决方案2】:

__builtin__ 模块是内置的,没有 Python 源代码。它用 C 编码并作为 Python 解释器可执行文件的一部分。

【讨论】:

【解决方案3】:

你不能。它内置在解释器中。

>>> # os is from '/usr/lib/python2.7/os.pyc'
>>> import os
>>> os
<module 'os' from '/usr/lib/python2.7/os.pyc'>
>>> # PyQt4 is from '/usr/lib/python2.7/site-packages/PyQt4/__init__.pyc'
>>> import PyQt4
>>> PyQt4
<module 'PyQt4' from '/usr/lib/python2.7/site-packages/PyQt4/__init__.pyc'>
>>> # __builtin__ is built-in
>>> import __builtin__
>>> __builtin__
<module '__builtin__' (built-in)>

在程序中,您可以使用__file__ 属性,但内置模块没有。

>>> os.__file__
'/usr/lib/python2.7/os.pyc'
>>> PyQt4.__file__
'/usr/lib/python2.7/site-packages/PyQt4/__init__.pyc'
>>> __builtin__.__file__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '__file__'

【讨论】:

  • 很好,清楚地解释我的困惑“为什么__builtin__ module has no attribute __file__”。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 2011-12-04
相关资源
最近更新 更多