23. Exploring CPython’s Internals
This is a quick guide for people who are interested in learning more about CPython’s internals. It provides a summary of the source code structure and contains references to resources providing a more in-depth view.
23.1. CPython Source Code Layout
This guide gives an overview of CPython’s code structure. It serves as a summary of file locations for modules and builtins.
For Python modules, the typical layout is:
Lib/*<module>*.py
Modules/_*<module>*.c
(if there’s also a C accelerator module)Lib/test/test_*<module>*.py
Doc/library/*<module>*.rst
For extension-only modules, the typical layout is:
Modules/*<module>*module.c
Lib/test/test_*<module>*.py
Doc/library/*<module>*.rst
For builtin types, the typical layout is:
Objects/*<builtin>*object.c
Lib/test/test_*<builtin>*.py
Doc/library/stdtypes.rst
For builtin functions, the typical layout is:
Python/bltinmodule.c
Lib/test/test_builtin.py
Doc/library/functions.rst
Some exceptions:
builtin type
int
is atObjects/longobject.c
builtin type
str
is atObjects/unicodeobject.c
builtin module
sys
is atPython/sysmodule.c
builtin module
marshal
is atPython/marshal.c
Windows-only module
winreg
is atPC/winreg.c
23.2. Additional References
For over 20 years the CPython code base has been changing and evolving. Here’s a sample of resources about the architecture of CPython aimed at building your understanding of both the 2.x and 3.x versions of CPython:
Title | Brief | Author | Version |
---|---|---|---|
Code walk from Parser, AST, Sym Table and Objects | Louie Lu | 3.7.a0 | |
The missing Python AST docs | Thomas Kluyver | 3.6 | |
A guide for how CPython REPL works | Guido van Rossum | 3.5 | |
How CPython async I/O, generator and coroutine works | Philip Guo | 3.5 | |
Reliable patterns of coding Python Extensions in C | Paul Ross | 3.4 | |
Your Guide to the CPython Source Code | Anthony Shaw | 3.8 |
Title | Brief | Author | Version |
---|---|---|---|
ceval, objects, pystate and miscellaneous topics | Yaniv Aknin | 3.1 | |
Objects, Symbol tables and miscellaneous topics | Eli Bendersky | 3.x | |
Code walk from Parser, AST, Sym Table and Objects | Prashanth Raghu | 2.7.12 | |
CPython internals: A ten-hour codewalk through the Python interpreter source code | Code walk from source code to generators | Philip Guo | 2.7.8 |