37

我想尝试查找 Python 标准库中某些模块的来源,但找不到它们。下载 python tarball 后,我尝试查看模块目录,但它主要包含 .c 文件。我还尝试查看操作系统(mac osx)已经附带的python具有它的模块的目录,那里似乎主要有.pyc和.pyo文件。如果有人可以帮助我,我将不胜感激。

(我尝试了问题How do I find the location of Python module sources?中的建议,但没有运气)

4

5 回答 5

41

在 cpython 中,许多模块是用 C 实现的,而不是用 Python 实现的。您可以在 中找到它们Modules/,而纯 Python 的位于Lib/.

在某些情况下(例如json模块),Python 源代码自己提供模块,并且仅在可用时使用 C 模块(以提高性能)。对于其余模块,您可以查看PyPy 的 implementations

于 2012-07-08T18:32:17.220 回答
2

CPython 的规范存储库是这个 Mercurial 存储库GitHub 上还有一个 git 镜像。

于 2016-08-02T13:09:31.013 回答
1

这将取决于您定义为Standard Library的内容。

Python 文档说:

...此库参考手册描述了与 Python 一起分发的标准库。它还描述了 Python 发行版中通常包含的一些可选组件。

Python 的标准库非常广泛,提供了广泛的设施,如下面列出的长目录所示。该库包含内置模块(用 C 编写),提供对系统功能的访问,例如 Python 程序员无法访问的文件 I/O,以及用 Python 编写的模块,为发生在日常编程。其中一些模块被明确设计为通过将平台细节抽象为平台中立的 API 来鼓励和增强 Python 程序的可移植性。

如果您采用广泛的标准,Python 文档会明确回答您的要求,我引用:

探索 CPython 的内部结构。

CPython 源代码布局。

本指南概述了 CPython 的代码结构。它作为模块和内置文件位置的摘要。

对于 Python 模块,典型的布局是:

Lib/<module>.py
Modules/_<module>.c 
Lib/test/test_<module>.py
Doc/library/<module>.rst

对于仅扩展模块,典型的布局是:

Modules/<module>module.c
Lib/test/test_<module>.py
Doc/library/<module>.rst

对于内置类型,典型的布局是:

Objects/<builtin>object.c
Lib/test/test_<builtin>.py
Doc/library/stdtypes.rst

对于内置函数,典型的布局是:

Python/bltinmodule.c
Lib/test/test_builtin.py
Doc/library/functions.rst

一些例外:

builtin type int is at Objects/longobject.c
builtin type str is at Objects/unicodeobject.c
builtin module sys is at Python/sysmodule.c
builtin module marshal is at Python/marshal.c
Windows-only module winreg is at PC/winreg.c
于 2020-11-17T00:36:37.210 回答
0

您可以从安装 Python 的位置获取作为标准库一部分的纯 Python 模块的源代码。

例如:C:\Python27\Lib(在 Windows 上)如果您使用 Windows Installer 进行 Python 安装。

于 2012-07-08T18:34:01.720 回答
0

在 Python 安装目录的 Lib 子目录下查找。

于 2016-12-12T10:56:09.190 回答