Python初期化構成—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.10/c-api/init config
移動先:案内検索

Python初期化構成

バージョン3.8の新機能。


Pythonは、 Py_InitializeFromConfig()および PyConfig 構造体で初期化できます。 Py_PreInitialize()および PyPreConfig 構造体で事前初期化できます。

構成には次の2種類があります。

  • Python構成を使用して、通常のPythonとして動作するカスタマイズされたPythonを構築できます。 たとえば、環境変数とコマンドライン引数はPythonの構成に使用されます。
  • Isolated Configuration を使用して、Pythonをアプリケーションに埋め込むことができます。 Pythonをシステムから分離します。 たとえば、環境変数は無視され、LC_CTYPEロケールは変更されず、シグナルハンドラは登録されません。

Py_RunMain()関数を使用して、カスタマイズされたPythonプログラムを作成できます。

初期化、ファイナライズ、およびスレッドも参照してください。

も参照してください

PEP 587 「Python初期化構成」。


常に分離モードで実行されるカスタマイズされたPythonの例:

int main(int argc, char **argv)
{
    PyStatus status;

    PyConfig config;
    PyConfig_InitPythonConfig(&config);
    config.isolated = 1;

    /* Decode command line arguments.
       Implicitly preinitialize Python (in isolated mode). */
    status = PyConfig_SetBytesArgv(&config, argc, argv);
    if (PyStatus_Exception(status)) {
        goto exception;
    }

    status = Py_InitializeFromConfig(&config);
    if (PyStatus_Exception(status)) {
        goto exception;
    }
    PyConfig_Clear(&config);

    return Py_RunMain();

exception:
    PyConfig_Clear(&config);
    if (PyStatus_IsExit(status)) {
        return status.exitcode;
    }
    /* Display the error message and exit the process with
       non-zero exit code */
    Py_ExitStatusException(status);
}

PyWideStringList

type PyWideStringList

wchar_t*文字列のリスト。

length がゼロ以外の場合、 items は非NULLであり、すべての文字列は非NULLである必要があります。

方法:

PyStatus PyWideStringList_Append(PyWideStringList *list, const wchar_t *item)

itemlist に追加します。

この関数を呼び出すには、Pythonを事前に初期化する必要があります。

PyStatus PyWideStringList_Insert(PyWideStringList *list, Py_ssize_t index, const wchar_t *item)

itemlistindex に挿入します。

indexlist の長さ以上の場合は、 itemlist に追加します。

index は0以上である必要があります。

この関数を呼び出すには、Pythonを事前に初期化する必要があります。

構造フィールド:

Py_ssize_t length

リストの長さ。

wchar_t **items

アイテムを一覧表示します。


PyStatus

type PyStatus

初期化関数のステータス(成功、エラー、または終了)を格納する構造。

エラーの場合は、エラーの原因となったC関数名を格納できます。

構造フィールド:

int exitcode

終了コード。 exit()に渡された引数。

const char *err_msg

エラーメッセージ。

const char *func

エラーを発生させた関数の名前は、NULLにすることができます。

ステータスを作成する機能:

PyStatus PyStatus_Ok(void)

成功。

PyStatus PyStatus_Error(const char *err_msg)

メッセージ付きの初期化エラー。

err_msgNULLであってはなりません。

PyStatus PyStatus_NoMemory(void)

メモリ割り当ての失敗(メモリ不足)。

PyStatus PyStatus_Exit(int exitcode)

指定された終了コードでPythonを終了します。

ステータスを処理する関数:

int PyStatus_Exception(PyStatus status)

ステータスはエラーですか、それとも終了ですか? trueの場合、例外を処理する必要があります。 たとえば、 Py_ExitStatusException()を呼び出します。

int PyStatus_IsError(PyStatus status)

結果はエラーですか?

int PyStatus_IsExit(PyStatus status)

結果は出口ですか?

void Py_ExitStatusException(PyStatus status)

status が出口の場合は、exit(exitcode)を呼び出します。 status がエラーの場合は、エラーメッセージを出力し、ゼロ以外の終了コードで終了します。 PyStatus_Exception(status)がゼロ以外の場合にのみ呼び出す必要があります。

ノート

内部的には、PythonはPyStatus.funcを設定するマクロを使用しますが、関数はfuncNULLに設定します。


例:

PyStatus alloc(void **ptr, size_t size)
{
    *ptr = PyMem_RawMalloc(size);
    if (*ptr == NULL) {
        return PyStatus_NoMemory();
    }
    return PyStatus_Ok();
}

int main(int argc, char **argv)
{
    void *ptr;
    PyStatus status = alloc(&ptr, 16);
    if (PyStatus_Exception(status)) {
        Py_ExitStatusException(status);
    }
    PyMem_Free(ptr);
    return 0;
}

PyPreConfig

type PyPreConfig

Pythonを事前初期化するために使用される構造。

事前設定を初期化する機能:

void PyPreConfig_InitPythonConfig(PyPreConfig *preconfig)

Python構成を使用して事前構成を初期化します。

void PyPreConfig_InitIsolatedConfig(PyPreConfig *preconfig)

Isolated Configuration を使用して事前構成を初期化します。

構造フィールド:

int allocator

Pythonメモリアロケータの名前:

Pythonが--without-pymalloc を使用して構成されている場合、PYMEM_ALLOCATOR_PYMALLOCおよびPYMEM_ALLOCATOR_PYMALLOC_DEBUGはサポートされません。

メモリ管理を参照してください。

デフォルト:PYMEM_ALLOCATOR_NOT_SET

int configure_locale

LC_CTYPEロケールをユーザー優先ロケールに設定しますか?

0に等しい場合は、 coerce_c_locale および coerce_c_locale_warn メンバーを0に設定します。

ロケールエンコーディングを参照してください。

デフォルト:Python構成では1、分離構成では0

int coerce_c_locale

2に等しい場合は、Cロケールを強制します。

1に等しい場合は、LC_CTYPEロケールを読み取って、強制する必要があるかどうかを判断します。

ロケールエンコーディングを参照してください。

デフォルト:Python構成では-1、分離構成では0

int coerce_c_locale_warn

ゼロ以外の場合、Cロケールが強制されていると警告を発します。

デフォルト:Python構成では-1、分離構成では0

int dev_mode

ゼロ以外の場合、 Python開発モードを有効にします。 PyConfig.dev_mode を参照してください。

デフォルト:Pythonモードでは-1、分離モードでは0

int isolated

分離モード: PyConfig.isolated を参照してください。

デフォルト:Pythonモードでは0、分離モードでは1

int legacy_windows_fs_encoding

ゼロ以外の場合:

from PYTHONLEGACYWINDOWSFSENCODING 環境変数値を初期化しました。

Windowsでのみ使用できます。 #ifdef MS_WINDOWSマクロは、Windows固有のコードに使用できます。

デフォルト:0

int parse_argv

ゼロ以外の場合、 Py_PreInitializeFromArgs()および Py_PreInitializeFromBytesArgs()は、通常のPythonがコマンドライン引数を解析するのと同じ方法でargv引数を解析します。コマンドラインを参照してください。引数

デフォルト:Python構成では1、分離構成では0

int use_environment

環境変数を使用しますか? PyConfig.use_environment を参照してください。

デフォルト:Python構成では1、分離構成では0

int utf8_mode

ゼロ以外の場合は、 PythonUTF-8モードを有効にします。

-X utf8 コマンドラインオプションと PYTHONUTF8 環境変数によって設定されます。

デフォルト:Python構成では-1、分離構成では0


PyPreConfigを使用してPythonを事前初期化する

Pythonの事前初期化:

現在の事前設定(PyPreConfigタイプ)は_PyRuntime.preconfigに保存されます。

Pythonを事前初期化する関数:

PyStatus Py_PreInitialize(const PyPreConfig *preconfig)

preconfig 事前設定からPythonを事前初期化します。

preconfigNULLであってはなりません。

PyStatus Py_PreInitializeFromBytesArgs(const PyPreConfig *preconfig, int argc, char *const *argv)

preconfig 事前設定からPythonを事前初期化します。

preconfigparse_argv がゼロ以外の場合、 argv コマンドライン引数(バイト文字列)を解析します。

preconfigNULLであってはなりません。

PyStatus Py_PreInitializeFromArgs(const PyPreConfig *preconfig, int argc, wchar_t *const *argv)

preconfig 事前設定からPythonを事前初期化します。

preconfigparse_argv がゼロ以外の場合、 argv コマンドライン引数(幅の広い文字列)を解析します。

preconfigNULLであってはなりません。

呼び出し元は、PyStatus_Exception()およびPy_ExitStatusException()を使用して例外(エラーまたは終了)を処理する責任があります。

Python構成PyPreConfig_InitPythonConfig())の場合、Pythonがコマンドライン引数で初期化されると、コマンドライン引数も渡してPythonを事前初期化する必要があります。これは、次のような事前構成に影響を与えるためです。エンコーディング。 たとえば、 -X utf8 コマンドラインオプションは、 PythonUTF-8モードを有効にします。

PyMem_SetAllocator()は、 Py_PreInitialize()の後、 Py_InitializeFromConfig()の前に呼び出して、カスタムメモリアロケータをインストールできます。 PyPreConfig.allocatorPYMEM_ALLOCATOR_NOT_SETに設定されている場合は、 Py_PreInitialize()の前に呼び出すことができます。

PyMem_RawMalloc()のようなPythonメモリ割り当て関数は、Pythonの事前初期化の前に使用しないでください。一方、malloc()およびfree()を直接呼び出すことは常に安全です。 Py_DecodeLocale()は、Pythonの事前初期化の前に呼び出さないでください。

事前初期化を使用して PythonUTF-8モードを有効にする例:

PyStatus status;
PyPreConfig preconfig;
PyPreConfig_InitPythonConfig(&preconfig);

preconfig.utf8_mode = 1;

status = Py_PreInitialize(&preconfig);
if (PyStatus_Exception(status)) {
    Py_ExitStatusException(status);
}

/* at this point, Python speaks UTF-8 */

Py_Initialize();
/* ... use Python API here ... */
Py_Finalize();

PyConfig

type PyConfig

Pythonを構成するためのほとんどのパラメーターを含む構造。

完了したら、 PyConfig_Clear()関数を使用して構成メモリを解放する必要があります。

構造方法:

void PyConfig_InitPythonConfig(PyConfig *config)

Python構成を使用して構成を初期化します。

void PyConfig_InitIsolatedConfig(PyConfig *config)

分離構成を使用して構成を初期化します。

PyStatus PyConfig_SetString(PyConfig *config, wchar_t *const *config_str, const wchar_t *str)

ワイド文字列 str*config_strにコピーします。

必要に応じてPython を事前初期化します。

PyStatus PyConfig_SetBytesString(PyConfig *config, wchar_t *const *config_str, const char *str)

Py_DecodeLocale()を使用して str をデコードし、結果を*config_strに設定します。

必要に応じてPython を事前初期化します。

PyStatus PyConfig_SetArgv(PyConfig *config, int argc, wchar_t *const *argv)

ワイド文字列の argv リストからコマンドライン引数( configargv メンバー)を設定します。

必要に応じてPython を事前初期化します。

PyStatus PyConfig_SetBytesArgv(PyConfig *config, int argc, char *const *argv)

バイト文字列の argv リストからコマンドライン引数( configargv メンバー)を設定します。 Py_DecodeLocale()を使用してバイトをデコードします。

必要に応じてPython を事前初期化します。

PyStatus PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, Py_ssize_t length, wchar_t **items)

ワイド文字列のリスト listlength および items に設定します。

必要に応じてPython を事前初期化します。

PyStatus PyConfig_Read(PyConfig *config)

すべてのPython構成を読み取ります。

すでに初期化されているフィールドは変更されません。

PyConfig_Read()関数は、 PyConfig.argv 引数を1回だけ解析します。引数が解析された後、 PyConfig.parse_argv2に設定されます。 Python引数は PyConfig.argv から削除されるため、引数を2回解析すると、アプリケーションオプションがPythonオプションとして解析されます。

必要に応じてPython を事前初期化します。

バージョン3.10で変更: PyConfig.argv 引数は1回だけ解析されるようになり、引数が解析された後、 PyConfig.parse_argv2に設定されます、および引数は、 PyConfig.parse_argv1と等しい場合にのみ解析されます。

void PyConfig_Clear(PyConfig *config)

構成メモリを解放します。

ほとんどのPyConfigメソッドは、必要に応じてPython を事前初期化します。 その場合、Pythonの事前初期化構成( PyPreConfig )は PyConfig に基づいています。 PyPreConfig と共通の構成フィールドを調整する場合は、 PyConfig メソッドを呼び出す前に設定する必要があります。

さらに、 PyConfig_SetArgv()または PyConfig_SetBytesArgv()を使用する場合、事前初期化構成はコマンドライン引数に依存するため、このメソッドを他のメソッドの前に呼び出す必要があります( parse_argv [ X229X]はゼロ以外です)。

これらのメソッドの呼び出し元は、PyStatus_Exception()およびPy_ExitStatusException()を使用して例外(エラーまたは終了)を処理する責任があります。

構造フィールド:

PyWideStringList argv

コマンドライン引数: sys.argv

parse_argv1に設定して、通常のPythonがPythonコマンドライン引数を解析するのと同じ方法で argv を解析し、 argv からPython引数を削除します。

argv が空の場合、空の文字列が追加され、 sys.argv が常に存在し、空になることはありません。

デフォルト:NULL

orig_argv メンバーも参照してください。

wchar_t *base_exec_prefix

sys.base_exec_prefix

デフォルト:NULL

Pythonパス構成出力の一部。

wchar_t *base_executable

Pythonベースの実行可能ファイル:sys._base_executable

__PYVENV_LAUNCHER__環境変数によって設定されます。

NULLの場合、 PyConfig.executable から設定します。

デフォルト:NULL

Pythonパス構成出力の一部。

wchar_t *base_prefix

sys.base_prefix

デフォルト:NULL

Pythonパス構成出力の一部。

int buffered_stdio

0に等しく、 configure_c_stdio がゼロ以外の場合は、Cストリームstdoutおよびstderrのバッファリングを無効にします。

-u コマンドラインオプションと PYTHONUNBUFFERED 環境変数で0に設定します。

stdinは常にバッファモードで開かれます。

デフォルト:1

int bytes_warning

1に等しい場合、 bytes または bytearraystr と比較するとき、または bytesint と比較するときに警告を発行します]。

2以上の場合、これらの場合に BytesWarning 例外を発生させます。

-b コマンドラインオプションによってインクリメントされます。

デフォルト:0

int warn_default_encoding

ゼロ以外の場合、 io.TextIOWrapper がデフォルトのエンコーディングを使用すると、 EncodingWarning 警告が発行されます。 詳細については、オプトインエンコーディング警告を参照してください。

デフォルト:0

バージョン3.10の新機能。

wchar_t *check_hash_pycs_mode

ハッシュベースの.pycファイルの検証動作を制御します: -check-hash-based-pycs コマンドラインオプションの値。

有効な値:

  • L"always": 'check_source'フラグの値に関係なく、無効化のためにソースファイルをハッシュします。

  • L"never":ハッシュベースのpycsは常に有効であると想定します。

  • L"default":ハッシュベースのpycsの「check_source」フラグが無効化を決定します。

デフォルト:L"default"

PEP 552 「決定論的pycs」も参照してください。

int configure_c_stdio

ゼロ以外の場合は、C標準ストリームを構成します。

  • Windowsでは、stdin、stdout、stderrでバイナリモード(O_BINARY)を設定します。

  • buffered_stdio がゼロに等しい場合は、stdin、stdout、およびstderrストリームのバッファリングを無効にします。

  • Interactive がゼロ以外の場合は、stdinとstdoutでストリームバッファリングを有効にします(Windowsではstdoutのみ)。

デフォルト:Python構成では1、分離構成では0

int dev_mode

ゼロ以外の場合は、 Python開発モードを有効にします。

デフォルト:Pythonモードでは-1、分離モードでは0

int dump_refs

Python参照をダンプしますか?

ゼロ以外の場合は、終了時にまだ生きているすべてのオブジェクトをダンプします。

PYTHONDUMPREFS 環境変数で1に設定します。

Py_TRACE_REFSマクロが定義されたPythonの特別なビルドが必要です。 configure--with-trace-refsオプションを参照してください。

デフォルト:0

wchar_t *exec_prefix

プラットフォームに依存するPythonファイルがインストールされるサイト固有のディレクトリプレフィックス: sys.exec_prefix

デフォルト:NULL

Pythonパス構成出力の一部。

wchar_t *executable

Pythonインタープリターの実行可能バイナリの絶対パス: sys.executable

デフォルト:NULL

Pythonパス構成出力の一部。

int faulthandler

フォールトハンドラーを有効にしますか?

ゼロ以外の場合は、起動時に faulthandler.enable()を呼び出します。

-X faulthandler および PYTHONFAULTHANDLER 環境変数によって1に設定されます。

デフォルト:Pythonモードでは-1、分離モードでは0

wchar_t *filesystem_encoding

ファイルシステムエンコーディングsys.getfilesystemencoding()

macOS、Android、VxWorksの場合:デフォルトで"utf-8"を使用します。

Windowsの場合:デフォルトで"utf-8"を使用するか、 PyPreConfiglegacy_windows_fs_encoding がゼロ以外の場合は"mbcs"を使用します。

他のプラットフォームのデフォルトのエンコーディング:

  • "utf-8" PyPreConfig.utf8_mode がゼロ以外の場合。

  • "ascii"は、nl_langinfo(CODESET)がASCIIエンコーディング(またはHP-UXではRoman8エンコーディング)をアナウンスすることをPythonが検出した場合、mbstowcs()関数は別のエンコーディング(通常はLatin1)からデコードします。

  • "utf-8" nl_langinfo(CODESET)が空の文字列を返す場合。

  • それ以外の場合は、ロケールエンコーディングnl_langinfo(CODESET)の結果を使用します。

Pythonの起動時に、エンコーディング名はPythonコーデック名に正規化されます。 たとえば、"ANSI_X3.4-1968""ascii"に置き換えられます。

filesystem_errors メンバーも参照してください。

wchar_t *filesystem_errors

ファイルシステムエラーハンドラーsys.getfilesystemencodeerrors()

Windowsの場合:デフォルトで"surrogatepass"を使用するか、 PyPreConfiglegacy_windows_fs_encoding がゼロ以外の場合は"replace"を使用します。

他のプラットフォームの場合:デフォルトで"surrogateescape"を使用します。

サポートされているエラーハンドラー:

  • "strict"

  • "surrogateescape"

  • "surrogatepass"(UTF-8エンコーディングでのみサポートされます)

filesystem_encoding メンバーも参照してください。

unsigned long hash_seed
int use_hash_seed

ランダム化されたハッシュ関数シード。

use_hash_seed がゼロの場合、シードはPythonの起動時にランダムに選択され、 hash_seed は無視されます。

PYTHONHASHSEED 環境変数によって設定されます。

デフォルトの use_hash_seed 値:Pythonモードでは-1、分離モードでは0

wchar_t *home

Pythonホームディレクトリ。

Py_SetPythonHome()が呼び出された場合、NULLでない場合は、その引数を使用します。

PYTHONHOME 環境変数によって設定されます。

デフォルト:NULL

Pythonパス構成入力の一部。

int import_time

ゼロ以外の場合、プロファイルのインポート時間。

1-X importtime オプションと PYTHONPROFILEIMPORTTIME 環境変数で設定します。

デフォルト:0

int inspect

スクリプトまたはコマンドを実行した後、インタラクティブモードに入ります。

0より大きい場合は、検査を有効にします。スクリプトが最初の引数として渡されるか、-cオプションが使用されると、 sys.stdin が表示されない場合でも、スクリプトまたはコマンドの実行後にインタラクティブモードに入ります。ターミナルになります。

-i コマンドラインオプションによってインクリメントされます。 PYTHONINSPECT 環境変数が空でない場合は、1に設定します。

デフォルト:0

int install_signal_handlers

Pythonシグナルハンドラーをインストールしますか?

デフォルト:Pythonモードでは1、分離モードでは0

int interactive

0より大きい場合は、対話モード(REPL)を有効にします。

-i コマンドラインオプションによってインクリメントされます。

デフォルト:0

int isolated

0より大きい場合は、分離モードを有効にします。

  • sys.path には、スクリプトのディレクトリ(argv[0]または現在のディレクトリから計算)もユーザーのsite-packagesディレクトリも含まれていません。

  • Python REPLは、 readline をインポートせず、インタラクティブプロンプトでデフォルトのreadline構成を有効にしません。

  • use_environment および user_site_directory を0に設定します。

デフォルト:Pythonモードでは0、分離モードでは1

PyPreConfig.isolated も参照してください。

int legacy_windows_stdio

ゼロ以外の場合は、 sys.stdinsys.stdout 、および sys.stderrにio.WindowsConsoleIOの代わりに io.FileIO を使用します。

PYTHONLEGACYWINDOWSSTDIO 環境変数が空でない文字列に設定されている場合は、1に設定します。

Windowsでのみ使用できます。 #ifdef MS_WINDOWSマクロは、Windows固有のコードに使用できます。

デフォルト:0

PEP 528 (WindowsコンソールのエンコーディングをUTF-8に変更)も参照してください。

int malloc_stats

ゼロ以外の場合は、終了時に Pythonpymallocメモリアロケータに統計をダンプします。

PYTHONMALLOCSTATS 環境変数で1に設定します。

Pythonが--without-pymallocオプションを使用して構成されている場合、このオプションは無視されます。

デフォルト:0

wchar_t *platlibdir

プラットフォームライブラリのディレクトリ名: sys.platlibdir

PYTHONPLATLIBDIR 環境変数によって設定されます。

デフォルト: configure --with-platlibdirオプションによって設定されるPLATLIBDIRマクロの値(デフォルト:"lib")。

Pythonパス構成入力の一部。

バージョン3.9の新機能。

wchar_t *pythonpath_env

DELIMos.path.pathsep)で区切られた文字列としてのモジュール検索パス( sys.path )。

PYTHONPATH 環境変数によって設定されます。

デフォルト:NULL

Pythonパス構成入力の一部。

PyWideStringList module_search_paths
int module_search_paths_set

モジュール検索パス: sys.path

module_search_paths_set が0に等しい場合、 Pythonパス構成を計算する関数は、 module_search_paths をオーバーライドし、 module_search_paths_set1に設定します。 ]。

デフォルト:空のリスト(module_search_paths)および0module_search_paths_set)。

Pythonパス構成出力の一部。

int optimization_level

コンパイルの最適化レベル:

  • 0:のぞき穴オプティマイザー、__debug__Trueに設定します。

  • 1:レベル0、アサーションを削除し、__debug__Falseに設定します。

  • 2:レベル1、docstringを削除します。

-O コマンドラインオプションによってインクリメントされます。 PYTHONOPTIMIZE 環境変数値に設定します。

デフォルト:0

PyWideStringList orig_argv

Python実行可能ファイルに渡された元のコマンドライン引数のリスト: sys.orig_argv

orig_argv リストが空で、 argv が空の文字列のみを含むリストではない場合、 PyConfig_Read()argvにコピーします argv を変更する前のorig_argv ( parse_argv がゼロ以外の場合)。

argv メンバーおよび Py_GetArgcArgv()関数も参照してください。

デフォルト:空のリスト。

バージョン3.10の新機能。

int parse_argv

コマンドライン引数を解析しますか?

1と等しい場合は、通常のPythonがコマンドライン引数を解析するのと同じ方法で argv を解析し、 argv からPython引数を削除します。

PyConfig_Read()関数は、 PyConfig.argv 引数を1回だけ解析します。引数が解析された後、 PyConfig.parse_argv2に設定されます。 Python引数は PyConfig.argv から削除されるため、引数を2回解析すると、アプリケーションオプションがPythonオプションとして解析されます。

デフォルト:Pythonモードでは1、分離モードでは0

バージョン3.10で変更: PyConfig.argv 引数は、 PyConfig.parse_argv1と等しい場合にのみ解析されるようになりました。

int parser_debug

パーサーデバッグモード。 0より大きい場合は、パーサーのデバッグ出力をオンにします(コンパイルオプションに応じて、エキスパートのみ)。

-d コマンドラインオプションによってインクリメントされます。 PYTHONDEBUG 環境変数値に設定します。

デフォルト:0

int pathconfig_warnings

Unixでは、ゼロ以外の場合、 Pythonパス構成を計算すると、警告をstderrに記録できます。 0に等しい場合、これらの警告を抑制します。

Windowsには影響しません。

デフォルト:Pythonモードでは1、分離モードでは0

Pythonパス構成入力の一部。

wchar_t *prefix

プラットフォームに依存しないPythonファイルがインストールされるサイト固有のディレクトリプレフィックス: sys.prefix

デフォルト:NULL

Pythonパス構成出力の一部。

wchar_t *program_name

実行可能ファイルの初期化、およびPython初期化中の初期エラーメッセージで使用されるプログラム名。

  • Py_SetProgramName()が呼び出された場合は、その引数を使用します。

  • macOSでは、 PYTHONEXECUTABLE 環境変数が設定されている場合はそれを使用します。

  • WITH_NEXT_FRAMEWORKマクロが定義されている場合は、 __PYVENV_LAUNCHER__環境変数が設定されている場合はそれを使用します。

  • 空でない場合は、 argvargv[0]を使用します。

  • それ以外の場合は、WindowsではL"python"を使用し、他のプラットフォームではL"python3"を使用します。

デフォルト:NULL

Pythonパス構成入力の一部。

wchar_t *pycache_prefix

キャッシュされた.pycファイルが書き込まれるディレクトリ: sys.pycache_prefix

-X pycache_prefix = PATH コマンドラインオプションと PYTHONPYCACHEPREFIX 環境変数によって設定されます。

NULLの場合、 sys.pycache_prefixNoneに設定されます。

デフォルト:NULL

int quiet

静音モード。 0より大きい場合、インタラクティブモードでのPythonの起動時に著作権とバージョンを表示しないでください。

-q コマンドラインオプションによってインクリメントされます。

デフォルト:0

wchar_t *run_command

-c コマンドラインオプションの値。

Py_RunMain()によって使用されます。

デフォルト:NULL

wchar_t *run_filename

コマンドラインで渡されるファイル名: -c または -m のない末尾のコマンドライン引数。

たとえば、python3 script.py argコマンドでscript.pyに設定されます。

Py_RunMain()によって使用されます。

デフォルト:NULL

wchar_t *run_module

-m コマンドラインオプションの値。

Py_RunMain()によって使用されます。

デフォルト:NULL

int show_ref_count

終了時に合計参照カウントを表示しますか?

-X showrefcount コマンドラインオプションで1に設定します。

Python デバッグビルドが必要です(Py_REF_DEBUGマクロを定義する必要があります)。

デフォルト:0

int site_import

起動時に site モジュールをインポートしますか?

ゼロに等しい場合は、モジュールサイトのインポートと、それに伴う sys.path のサイト依存の操作を無効にします。

また、 site モジュールが後で明示的にインポートされる場合は、これらの操作を無効にします(トリガーする場合は、 site.main()を呼び出します)。

-S コマンドラインオプションで0に設定します。

sys.flags.no_siteは、 site_import の反転値に設定されます。

デフォルト:1

int skip_source_first_line

ゼロ以外の場合は、 PyConfig.run_filename ソースの最初の行をスキップします。

#!cmdの非Unix形式の使用を許可します。 これは、DOS固有のハッキングのみを目的としています。

-x コマンドラインオプションで1に設定します。

デフォルト:0

wchar_t *stdio_encoding
wchar_t *stdio_errors

sys.stdinsys.stdoutsys.stderr のエンコードおよびエンコードエラー(ただし、 sys.stderr は常に"backslashreplace"エラーハンドラー)。

Py_SetStandardStreamEncoding()が呼び出された場合、NULLでない場合は、その error および errors 引数を使用します。

空でない場合は、 PYTHONIOENCODING 環境変数を使用します。

デフォルトのエンコーディング:

デフォルトのエラーハンドラ:

  • Windowsの場合:"surrogateescape"を使用します。

  • "surrogateescape" PyPreConfig.utf8_mode がゼロ以外の場合、またはLC_CTYPEロケールが「C」または「POSIX」の場合。

  • それ以外の場合は"strict"

int tracemalloc

tracemallocを有効にしますか?

ゼロ以外の場合は、起動時に tracemalloc.start()を呼び出します。

-X tracemalloc = N コマンドラインオプションおよび PYTHONTRACEMALLOC 環境変数によって設定されます。

デフォルト:Pythonモードでは-1、分離モードでは0

int use_environment

環境変数を使用しますか?

ゼロに等しい場合は、環境変数を無視してください。

デフォルト:Python構成では1、分離構成では0

int user_site_directory

ゼロ以外の場合は、ユーザーサイトディレクトリを sys.path に追加します。

-s および -I コマンドラインオプションで0に設定します。

PYTHONNOUSERSITE 環境変数で0に設定します。

デフォルト:Pythonモードでは1、分離モードでは0

int verbose

冗長モード。 0より大きい場合は、モジュールがインポートされるたびにメッセージを出力し、モジュールがロードされた場所(ファイル名または組み込みモジュール)を示します。

2以上の場合、モジュールの検索時にチェックされるファイルごとにメッセージを出力します。 終了時のモジュールのクリーンアップに関する情報も提供します。

-v コマンドラインオプションによってインクリメントされます。

PYTHONVERBOSE 環境変数値に設定します。

デフォルト:0

PyWideStringList warnoptions

警告フィルターを作成するための warnings モジュールのオプション(優先度の低いものから高いものへ): sys.warnoptions

warnings モジュールは、 sys.warnoptions を逆の順序で追加します。最後の PyConfig.warnoptions アイテムは、チェックされるwarnings.filtersの最初のアイテムになります。最初(最高の優先順位)。

-W コマンドラインオプションは、その値を warnoptions に追加し、複数回使用できます。

PYTHONWARNINGS 環境変数を使用して、警告オプションを追加することもできます。 複数のオプションをコンマで区切って指定できます(,)。

デフォルト:空のリスト。

int write_bytecode

0に等しい場合、Pythonはソースモジュールのインポート時に.pycファイルを書き込もうとしません。

-B コマンドラインオプションと PYTHONDONTWRITEBYTECODE 環境変数で0に設定します。

sys.dont_write_bytecode は、 write_bytecode の反転値に初期化されます。

デフォルト:1

PyWideStringList xoptions

-X コマンドラインオプションの値: sys._xoptions

デフォルト:空のリスト。

parse_argv がゼロ以外の場合、 argv 引数は、通常のPythonがコマンドライン引数を解析するのと同じ方法で解析され、Python引数は argvから削除されます。

xoptions オプションは、他のオプションを設定するために解析されます。 -X コマンドラインオプションを参照してください。

バージョン3.9で変更: show_alloc_countフィールドが削除されました。


PyConfigによる初期化

Pythonを初期化する関数:

PyStatus Py_InitializeFromConfig(const PyConfig *config)
config 構成からPythonを初期化します。

呼び出し元は、PyStatus_Exception()およびPy_ExitStatusException()を使用して例外(エラーまたは終了)を処理する責任があります。

PyImport_FrozenModules()PyImport_AppendInittab()、または PyImport_ExtendInittab()を使用する場合は、Pythonの事前初期化後、Pythonの初期化前に設定または呼び出す必要があります。 Pythonが複数回初期化される場合は、各Python初期化の前に PyImport_AppendInittab()または PyImport_ExtendInittab()を呼び出す必要があります。

現在の構成(PyConfigタイプ)はPyInterpreterState.configに保存されます。

プログラム名の設定例:

void init_python(void)
{
    PyStatus status;

    PyConfig config;
    PyConfig_InitPythonConfig(&config);

    /* Set the program name. Implicitly preinitialize Python. */
    status = PyConfig_SetString(&config, &config.program_name,
                                L"/path/to/my_program");
    if (PyStatus_Exception(status)) {
        goto exception;
    }

    status = Py_InitializeFromConfig(&config);
    if (PyStatus_Exception(status)) {
        goto exception;
    }
    PyConfig_Clear(&config);
    return;

exception:
    PyConfig_Clear(&config);
    Py_ExitStatusException(status);
}

デフォルト構成を変更し、構成を読み取り、いくつかのパラメーターをオーバーライドする、より完全な例:

PyStatus init_python(const char *program_name)
{
    PyStatus status;

    PyConfig config;
    PyConfig_InitPythonConfig(&config);

    /* Set the program name before reading the configuration
       (decode byte string from the locale encoding).

       Implicitly preinitialize Python. */
    status = PyConfig_SetBytesString(&config, &config.program_name,
                                     program_name);
    if (PyStatus_Exception(status)) {
        goto done;
    }

    /* Read all configuration at once */
    status = PyConfig_Read(&config);
    if (PyStatus_Exception(status)) {
        goto done;
    }

    /* Append our custom search path to sys.path */
    status = PyWideStringList_Append(&config.module_search_paths,
                                     L"/path/to/more/modules");
    if (PyStatus_Exception(status)) {
        goto done;
    }

    /* Override executable computed by PyConfig_Read() */
    status = PyConfig_SetString(&config, &config.executable,
                                L"/path/to/my_executable");
    if (PyStatus_Exception(status)) {
        goto done;
    }

    status = Py_InitializeFromConfig(&config);

done:
    PyConfig_Clear(&config);
    return status;
}

分離された構成

PyPreConfig_InitIsolatedConfig()およびPyConfig_InitIsolatedConfig()関数は、Pythonをシステムから分離するための構成を作成します。 たとえば、Pythonをアプリケーションに埋め込む場合です。

この構成では、グローバル構成変数、環境変数、コマンドライン引数( PyConfig.argv は解析されません)、およびユーザーサイトディレクトリは無視されます。 C標準ストリーム(例:stdout)とLC_CTYPEロケールは変更されません。 シグナルハンドラーがインストールされていません。

構成ファイルは、この構成でも引き続き使用されます。 Pythonパス構成(「出力フィールド」)を設定して、これらの構成ファイルを無視し、デフォルトのパス構成を計算する機能を回避します。


Python構成

PyPreConfig_InitPythonConfig()およびPyConfig_InitPythonConfig()関数は、通常のPythonとして動作するカスタマイズされたPythonを構築するための構成を作成します。

環境変数とコマンドライン引数はPythonの構成に使用されますが、グローバル構成変数は無視されます。

この関数は、Cロケール強制( PEP 538 )および Python UTF-8モード PEP 540 )を有効にします。 LC_CTYPEロケールに応じて、 PYTHONUTF8 および PYTHONCOERCECLOCALE 環境変数。


Pythonパス構成

PyConfig には、パス構成用の複数のフィールドが含まれています。

少なくとも1つの「出力フィールド」が設定されていない場合、Pythonは未設定のフィールドを埋めるためにパス構成を計算します。 module_search_paths_set が0に等しい場合、 module_search_paths はオーバーライドされ、 module_search_paths_set は1に設定されます。

上記のすべてのパス構成出力フィールドを明示的に設定することにより、デフォルトのパス構成を計算する機能を完全に無視することができます。 文字列は、空でなくてもセットされていると見なされます。 module_search_pathsは設定されていると見なされます。 この場合、パス構成入力フィールドも無視されます。

pathconfig_warnings を0に設定して、パス構成を計算するときの警告を抑制します(Unixのみ、Windowsは警告をログに記録しません)。

base_prefix または base_exec_prefix フィールドが設定されていない場合、それらはそれぞれ prefix および exec_prefix から値を継承します。

Py_RunMain()および Py_Main()sys.path を変更します。

  • run_filename が設定されていて、__main__.pyスクリプトを含むディレクトリである場合は、 run_filenamesys.path の前に追加します。
  • 分離がゼロの場合:
    • run_module が設定されている場合は、現在のディレクトリの前に sys.path を追加します。 現在のディレクトリを読み取れない場合は、何もしません。
    • run_filename が設定されている場合は、ファイル名のディレクトリの前に sys.path を追加します。
    • それ以外の場合は、 sys.path の前に空の文字列を追加します。

site_import がゼロ以外の場合、 sys.pathsite モジュールによって変更できます。 user_site_directory がゼロ以外で、ユーザーのサイトパッケージディレクトリが存在する場合、 site モジュールはユーザーのサイトパッケージディレクトリを sys.path に追加します。

次の構成ファイルは、パス構成で使用されます。

  • pyvenv.cfg
  • python._pth(Windowsのみ)
  • pybuilddir.txt(Unixのみ)

__PYVENV_LAUNCHER__環境変数は、 PyConfig.base_executable を設定するために使用されます


Py_RunMain()

int Py_RunMain(void)

コマンド( PyConfig.run_command )、スクリプト( PyConfig.run_filename )、またはコマンドラインまたは構成。

デフォルトで、 -i オプションが使用されている場合は、REPLを実行します。

最後に、Pythonをファイナライズし、exit()関数に渡すことができる終了ステータスを返します。

Py_RunMain()を使用して常に分離モードで実行されるカスタマイズされたPythonの例については、 Python構成を参照してください。


Py_GetArgcArgv()

void Py_GetArgcArgv(int *argc, wchar_t ***argv)

Pythonが変更する前に、元のコマンドライン引数を取得します。

PyConfig.orig_argv メンバーも参照してください。


マルチフェーズ初期化プライベート暫定API

このセクションは、 PEP 432 のコア機能であるマルチフェーズ初期化を紹介するプライベート暫定APIです。

  • 「コア」初期化フェーズ、「ベアミニマムPython」:
    • 組み込みタイプ;
    • 組み込みの例外。
    • 組み込みおよび凍結モジュール。
    • sys モジュールは部分的にのみ初期化されます(例: sys.path はまだ存在しません)。
  • 「メイン」初期化フェーズ、Pythonは完全に初期化されます。
    • importlib をインストールして構成します。
    • パス構成を適用します。
    • シグナルハンドラーをインストールします。
    • sys モジュールの初期化を完了します(例: sys.stdout および sys.path を作成します)。
    • faulthandlertracemalloc などのオプション機能を有効にします。
    • サイトモジュールをインポートします。
    • NS。

プライベート暫定API:

  • PyConfig._init_main:0に設定すると、 Py_InitializeFromConfig()は「コア」初期化フェーズで停止します。
  • PyConfig._isolated_interpreter:ゼロ以外の場合、スレッド、サブプロセス、およびフォークを許可しません。
PyStatus _Py_InitializeMain(void)
「メイン」初期化フェーズに移動し、Pythonの初期化を終了します。

「コア」フェーズではモジュールはインポートされず、importlibモジュールは構成されません。パス構成は「メイン」フェーズでのみ適用されます。 PythonでPythonをカスタマイズして、パス構成をオーバーライドまたは調整したり、カスタム sys.meta_path インポーターやインポートフックをインストールしたりできる場合があります。

PEP 432 の動機の1つであるコアフェーズの後、メインフェーズの前に、Pythonでパス構成を計算できるようになる可能性があります。

「コア」フェーズは適切に定義されていません。このフェーズで何を使用できるか、何を使用できないかはまだ指定されていません。 APIはプライベートおよび暫定としてマークされています。適切なパブリックAPIが設計されるまで、APIはいつでも変更したり、削除したりすることができます。

「コア」と「メイン」の初期化フェーズ間でPythonコードを実行する例:

void init_python(void)
{
    PyStatus status;

    PyConfig config;
    PyConfig_InitPythonConfig(&config);
    config._init_main = 0;

    /* ... customize 'config' configuration ... */

    status = Py_InitializeFromConfig(&config);
    PyConfig_Clear(&config);
    if (PyStatus_Exception(status)) {
        Py_ExitStatusException(status);
    }

    /* Use sys.stderr because sys.stdout is only created
       by _Py_InitializeMain() */
    int res = PyRun_SimpleString(
        "import sys; "
        "print('Run Python code before _Py_InitializeMain', "
               "file=sys.stderr)");
    if (res < 0) {
        exit(1);
    }

    /* ... put more configuration code here ... */

    status = _Py_InitializeMain();
    if (PyStatus_Exception(status)) {
        Py_ExitStatusException(status);
    }
}