如何更多地了解内置模块

How to know more about built-in modules

概览

导入包后,您可以使用 __path__ 属性查询源路径,大多数时候您可以从那里直接阅读 Python 源代码。当有问题的模块类似于 winreg 时,问题就来了。如果我这样做

import winreg

print winreg.__path__

我将获取路径 ['d:\virtual_envs\py2711\lib\site-packages\winreg'],然后我可以从那里查看其源代码,在那里我可以看到 __init__.py 正在执行的操作:

from __future__ import absolute_import
from future.utils import PY3

if PY3:
    from winreg import *
else:
    __future_module__ = True
    from _winreg import *

现在,因为我是一个非常好奇的人,所以我想了解更多关于 _winreg 实现的信息,所以我尝试这样做:

import _winreg

print winreg
print dir(_winreg)

我得到 _winreg<module '_winreg' (built-in)>

是否有一种标准方法来了解源代码的哪一部分实现了一些像这样的内置包,以便我能够阅读和调试它?

对于用 C 编写的 Python 模块,您可以随时在 GitHub 查看 CPython 的源代码:https://github.com/python/cpython

通常您可以在 Modules 文件夹中找到它们,但是 winreg 一个比较特殊,这里是:https://github.com/python/cpython/blob/master/PC/winreg.c