LoginSignup
0
1

More than 3 years have passed since last update.

Python/C APIを読む その7(Py_Initialize)

Posted at

概要

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の中で用いられているものに限定した。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1