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.
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
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 |