#概要
Pythonの構造を理解する助けとして、C APIのドキュメントを読み砕いていく。
#内容
##環境
Python 3.9 (CPython)に話を固定したいが、必ずしもそうはならない。
tree (コミット; ブランチ)
(↑ githubのリンク)
###<概説>
Pythonインタプリタを初期化する。
Pythonの埋め込みを行うアプリケーションでは、他のあらゆるPython/C APIを使用するよりも前にこの関数を呼び出さなければならない。
この関数はロード済みモジュールのテーブル(sys.modules
)を初期化し、
基盤となるモジュール群、builtins
,__main__
,sys
を生成し、
モジュール検索パス(sys.path
)も初期化する。
###<定義>
定義 (cpython/Python/pylifecycle.c)
void
Py_Initialize(void)
{
Py_InitializeEx(1);
}
(定義出典)
###<使用例>
使用例 (cpython/Programs/_testembed.c)
Py_Initialize();
(使用例出典)
##蛇足
Py_InitializeEx (cpython/Python/pylifecycle.c)
void
Py_InitializeEx(int install_sigs)
{
PyStatus status;
status = _PyRuntime_Initialize();
...
_PyRuntimeState *runtime = &_PyRuntime;
...
PyConfig config;
_PyConfig_InitCompatConfig(&config);
config.install_signal_handlers = install_sigs;
status = Py_InitializeFromConfig(&config);
if (_PyStatus_EXCEPTION(status)) {
Py_ExitStatusException(status);
}
}
#参考にさせていただいた本・ページ
#感想
バージョンが混ざってしまっているが、雰囲気を掴みたかっただけなので、そこは厳密にはしなかった。
使用例については、CPythonの中で用いられているものに限定した。