如何更多地了解内置模块
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
概览
导入包后,您可以使用 __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