在哪里可以找到 python 标准库代码?

Posted

技术标签:

【中文标题】在哪里可以找到 python 标准库代码?【英文标题】:Where do I find the python standard library code? 【发布时间】:2012-07-08 07:00:45 【问题描述】:

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

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

【问题讨论】:

哦哈哈,我在某处读到,了解如何编写好的 Python 代码的一个好方法是阅读标准库代码。我想我误解了。全部在 C 中? 性能关键部件?当然,我们毕竟想要性能。不过,C 代码还不错;)在 cpython 中仍然有足够的 python 编写的东西。 【参考方案1】:

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

在某些情况下(例如json 模块),Python 源代码会自行提供模块,并且仅在可用时使用 C 模块(以提高性能)。剩下的模块可以看PyPy's implementations。

【讨论】:

啊,就是这样。在问这个问题之前,我应该多环顾四周。谢谢!一旦时间限制让我接受答案。 为什么提到 PyPy?除非提问者实际上是在 PyPy 上,否则他们不会使用 PyPy 实现。 @user2357112 除非提问者实际上在 cpython 上,否则他们也不会使用 cpython 实现。即使它们在 cpython 上:正如答案中所写,cpython 标准库实现中的某些模块是用 C 编写的,而不是 Python。提问者明确询问了这一点(I tried looking in the modules directory after downloading the python tarball, but it has mainly .c file)。不是每个人都能用 C 编程。有些人开始学习 Python 编程。【参考方案2】:

The canonical repository for CPython is this Mercurial repository。还有a git mirror on GitHub。

【讨论】:

我不确定这是否回答了 OP 的问题。 @iman453 已经有一个压缩包;他们的问题是该 tarball 中的哪些 文件 很有趣。我对这个答案也有点疑惑,因为我相信我已经指出了my accepted answer 中的 Mercurial 存储库,尽管我没有提到 GitHub 镜像。 GitHub 现在是真相的来源(见PEP 512)。【参考方案3】:

这取决于您定义的标准库

Python Documentations 说:

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

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

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

探索 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

【讨论】:

【参考方案4】:

您可以获得纯 Python 模块的源代码,它们是 安装 Python 的位置的标准库。

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

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于在哪里可以找到 python 标准库代码?的主要内容,如果未能解决你的问题,请参考以下文章

在哪里可以找到所有 C 标准库的源代码?

C标准库中的函数定义在哪里?

找到python官方标准库文档

在文件系统中找不到 python 的标准库

Python模块

在哪里可以找到 Java 中基于标准 Trie 的地图实现? [关闭]