I am rewriting python import system in C. I encountered a problem: in Python/importlib.h
, it says it is generated by Lib/importlib/_bootstrap.py
, but even if I changed some code in Lib/importlib/_bootstrap.py
, Python/importlib.h
remains unchanged.
I have 3 questions:
1: How can I change the bytecode in Python/importlib.h
?
2: What is the relationship between Lib/importlib/_bootstrap.py
and Python/importlib.h
?
3: How does the cpython import system work in total?
After several weeks of reading the source code of Python-3.6.10, I write an answer here to offer my understanding.
Python/importlib.h
is generated by Programs/_freeze_import.c
. "make regen-all" is need to rerun the _freeze_import.c file. _freeze_import.c
take the input of Lib/importlib/*.py
to generate Python/importlib.h
and Python/importlib_external.h
.Lib/importlib/*.py
is the source of Python/importlib.h
and Python/importlib_external.h
.