Python初期化構成
バージョン3.8の新機能。
Pythonは、 Py_InitializeFromConfig()および PyConfig 構造体で初期化できます。 Py_PreInitialize()および PyPreConfig 構造体で事前初期化できます。
構成には次の2種類があります。
- Python構成を使用して、通常のPythonとして動作するカスタマイズされたPythonを構築できます。 たとえば、環境変数とコマンドライン引数はPythonの構成に使用されます。
- Isolated Configuration を使用して、Pythonをアプリケーションに埋め込むことができます。 Pythonをシステムから分離します。 たとえば、環境変数は無視され、LC_CTYPEロケールは変更されず、シグナルハンドラは登録されません。
Py_RunMain()関数を使用して、カスタマイズされた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)
item を list に追加します。
この関数を呼び出すには、Pythonを事前に初期化する必要があります。
- PyStatus PyWideStringList_Insert(PyWideStringList *list, Py_ssize_t index, const wchar_t *item)
item を list の index に挿入します。
index が list の長さ以上の場合は、 item を list に追加します。
index は0以上である必要があります。
この関数を呼び出すには、Pythonを事前に初期化する必要があります。
構造フィールド:
- Py_ssize_t length
リストの長さ。
- wchar_t **items
アイテムを一覧表示します。
- PyStatus PyWideStringList_Append(PyWideStringList *list, const wchar_t *item)
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_msg は
NULL
であってはなりません。
- 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)
がゼロ以外の場合にのみ呼び出す必要があります。
- int exitcode
ノート
内部的には、PythonはPyStatus.func
を設定するマクロを使用しますが、関数はfunc
をNULL
に設定します。
例:
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メモリアロケータの名前:
PYMEM_ALLOCATOR_NOT_SET
(0
):メモリアロケータを変更しないでください(デフォルトを使用)。PYMEM_ALLOCATOR_DEFAULT
(1
):デフォルトのメモリアロケータ。PYMEM_ALLOCATOR_DEBUG
(2
):デフォルトのメモリアロケータとデバッグフック。PYMEM_ALLOCATOR_MALLOC
(3
):Cライブラリのmalloc()
を使用します。PYMEM_ALLOCATOR_MALLOC_DEBUG
(4
):デバッグフックでmalloc()
の使用を強制します。PYMEM_ALLOCATOR_PYMALLOC
(5
): Pythonpymallocメモリアロケータ。PYMEM_ALLOCATOR_PYMALLOC_DEBUG
(6
): Pythonpymallocメモリアロケータとデバッグフック。
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
ゼロ以外の場合:
PyPreConfig.utf8_mode を
0
に設定し、PyConfig.filesystem_encoding を
"mbcs"
に設定し、PyConfig.filesystem_errors を
"replace"
に設定します。
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
。
- void PyPreConfig_InitPythonConfig(PyPreConfig *preconfig)
PyPreConfigを使用してPythonを事前初期化する
Pythonの事前初期化:
- Pythonメモリアロケータを設定します( PyPreConfig.allocator )
- LC_CTYPEロケールを構成します(ロケールエンコーディング)
- Python UTF-8モード( PyPreConfig.utf8_mode )を設定します
現在の事前設定(PyPreConfig
タイプ)は_PyRuntime.preconfig
に保存されます。
Pythonを事前初期化する関数:
- PyStatus Py_PreInitialize(const PyPreConfig *preconfig)
preconfig 事前設定からPythonを事前初期化します。
preconfig は
NULL
であってはなりません。
- PyStatus Py_PreInitializeFromBytesArgs(const PyPreConfig *preconfig, int argc, char *const *argv)
preconfig 事前設定からPythonを事前初期化します。
preconfig の parse_argv がゼロ以外の場合、 argv コマンドライン引数(バイト文字列)を解析します。
preconfig は
NULL
であってはなりません。
- PyStatus Py_PreInitializeFromArgs(const PyPreConfig *preconfig, int argc, wchar_t *const *argv)
preconfig 事前設定からPythonを事前初期化します。
preconfig の parse_argv がゼロ以外の場合、 argv コマンドライン引数(幅の広い文字列)を解析します。
preconfig は
NULL
であってはなりません。
呼び出し元は、PyStatus_Exception()
およびPy_ExitStatusException()
を使用して例外(エラーまたは終了)を処理する責任があります。
Python構成(PyPreConfig_InitPythonConfig()
)の場合、Pythonがコマンドライン引数で初期化されると、コマンドライン引数も渡してPythonを事前初期化する必要があります。これは、次のような事前構成に影響を与えるためです。エンコーディング。 たとえば、 -X utf8 コマンドラインオプションは、 PythonUTF-8モードを有効にします。
PyMem_SetAllocator()
は、 Py_PreInitialize()の後、 Py_InitializeFromConfig()の前に呼び出して、カスタムメモリアロケータをインストールできます。 PyPreConfig.allocator がPYMEM_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()関数を使用して構成メモリを解放する必要があります。
構造方法:
- 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 リストからコマンドライン引数( config の argv メンバー)を設定します。
必要に応じてPython を事前初期化します。
- PyStatus PyConfig_SetBytesArgv(PyConfig *config, int argc, char *const *argv)
バイト文字列の argv リストからコマンドライン引数( config の argv メンバー)を設定します。 Py_DecodeLocale()を使用してバイトをデコードします。
必要に応じてPython を事前初期化します。
- PyStatus PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, Py_ssize_t length, wchar_t **items)
ワイド文字列のリスト list を length および items に設定します。
必要に応じてPython を事前初期化します。
- PyStatus PyConfig_Read(PyConfig *config)
すべてのPython構成を読み取ります。
すでに初期化されているフィールドは変更されません。
PyConfig_Read()関数は、 PyConfig.argv 引数を1回だけ解析します。引数が解析された後、 PyConfig.parse_argv は
2
に設定されます。 Python引数は PyConfig.argv から削除されるため、引数を2回解析すると、アプリケーションオプションがPythonオプションとして解析されます。必要に応じてPython を事前初期化します。
バージョン3.10で変更: PyConfig.argv 引数は1回だけ解析されるようになり、引数が解析された後、 PyConfig.parse_argv は
2
に設定されます、および引数は、 PyConfig.parse_argv が1
と等しい場合にのみ解析されます。
- 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_argv を
1
に設定して、通常のPythonがPythonコマンドライン引数を解析するのと同じ方法で argv を解析し、 argv からPython引数を削除します。argv が空の場合、空の文字列が追加され、 sys.argv が常に存在し、空になることはありません。
デフォルト:
NULL
。orig_argv メンバーも参照してください。
- wchar_t *base_exec_prefix
-
デフォルト:
NULL
。Pythonパス構成出力の一部。
- wchar_t *base_executable
Pythonベースの実行可能ファイル:
sys._base_executable
。__PYVENV_LAUNCHER__
環境変数によって設定されます。NULL
の場合、 PyConfig.executable から設定します。デフォルト:
NULL
。Pythonパス構成出力の一部。
- wchar_t *base_prefix
-
デフォルト:
NULL
。Pythonパス構成出力の一部。
- int buffered_stdio
0に等しく、 configure_c_stdio がゼロ以外の場合は、Cストリームstdoutおよびstderrのバッファリングを無効にします。
-u コマンドラインオプションと PYTHONUNBUFFERED 環境変数で0に設定します。
stdinは常にバッファモードで開かれます。
デフォルト:
1
。
- int bytes_warning
1に等しい場合、 bytes または bytearray を str と比較するとき、または bytes を int と比較するときに警告を発行します]。
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"
を使用するか、 PyPreConfig の legacy_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"
を使用するか、 PyPreConfig の legacy_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.stdin 、 sys.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
DELIM
(os.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_set を
1
に設定します。 ]。デフォルト:空のリスト(
module_search_paths
)および0
(module_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_argv は
2
に設定されます。 Python引数は PyConfig.argv から削除されるため、引数を2回解析すると、アプリケーションオプションがPythonオプションとして解析されます。デフォルト:Pythonモードでは
1
、分離モードでは0
。バージョン3.10で変更: PyConfig.argv 引数は、 PyConfig.parse_argv が
1
と等しい場合にのみ解析されるようになりました。
- 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__
環境変数が設定されている場合はそれを使用します。空でない場合は、 argv の
argv[0]
を使用します。それ以外の場合は、Windowsでは
L"python"
を使用し、他のプラットフォームではL"python3"
を使用します。
デフォルト:
NULL
。Pythonパス構成入力の一部。
- wchar_t *pycache_prefix
キャッシュされた
.pyc
ファイルが書き込まれるディレクトリ: sys.pycache_prefix 。-X pycache_prefix = PATH コマンドラインオプションと PYTHONPYCACHEPREFIX 環境変数によって設定されます。
NULL
の場合、 sys.pycache_prefix はNone
に設定されます。デフォルト:
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.stdin 、 sys.stdout 、 sys.stderr のエンコードおよびエンコードエラー(ただし、 sys.stderr は常に
"backslashreplace"
エラーハンドラー)。Py_SetStandardStreamEncoding()が呼び出された場合、
NULL
でない場合は、その error および errors 引数を使用します。空でない場合は、 PYTHONIOENCODING 環境変数を使用します。
デフォルトのエンコーディング:
"UTF-8"
PyPreConfig.utf8_mode がゼロ以外の場合。それ以外の場合は、ロケールエンコーディングを使用してください。
デフォルトのエラーハンドラ:
Windowsの場合:
"surrogateescape"
を使用します。"surrogateescape"
PyPreConfig.utf8_mode がゼロ以外の場合、またはLC_CTYPEロケールが「C」または「POSIX」の場合。それ以外の場合は
"strict"
。
- int tracemalloc
tracemallocを有効にしますか?
ゼロ以外の場合は、起動時に tracemalloc.start()を呼び出します。
-X tracemalloc = N コマンドラインオプションおよび PYTHONTRACEMALLOC 環境変数によって設定されます。
デフォルト: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 。
デフォルト:空のリスト。
- PyStatus PyConfig_SetString(PyConfig *config, wchar_t *const *config_str, const wchar_t *str)
parse_argv がゼロ以外の場合、 argv 引数は、通常のPythonがコマンドライン引数を解析するのと同じ方法で解析され、Python引数は argvから削除されます。 。
xoptions オプションは、他のオプションを設定するために解析されます。 -X コマンドラインオプションを参照してください。
バージョン3.9で変更: show_alloc_count
フィールドが削除されました。
PyConfigによる初期化
Pythonを初期化する関数:
- 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 には、パス構成用の複数のフィールドが含まれています。
- パス構成入力:
PyConfig.home
PyConfig.platlibdir
PyConfig.pathconfig_warnings
PyConfig.program_name
PyConfig.pythonpath_env
- 現在の作業ディレクトリ:絶対パスを取得する
- プログラムのフルパスを取得するための
PATH
環境変数( PyConfig.program_name から) __PYVENV_LAUNCHER__
環境変数- (Windowsのみ)HKEY_CURRENT_USERおよびHKEY_LOCAL_MACHINE(XYはPythonバージョン)の「SoftwarePythonPythonCoreX.YPythonPath」の下にあるレジストリ内のアプリケーションパス。
- パス構成の出力フィールド:
少なくとも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_filename を sys.path の前に追加します。 - 分離がゼロの場合:
- run_module が設定されている場合は、現在のディレクトリの前に sys.path を追加します。 現在のディレクトリを読み取れない場合は、何もしません。
- run_filename が設定されている場合は、ファイル名のディレクトリの前に sys.path を追加します。
- それ以外の場合は、 sys.path の前に空の文字列を追加します。
site_import がゼロ以外の場合、 sys.path は site モジュールによって変更できます。 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」:
- 「メイン」初期化フェーズ、Pythonは完全に初期化されます。
- importlib をインストールして構成します。
- パス構成を適用します。
- シグナルハンドラーをインストールします。
- sys モジュールの初期化を完了します(例: sys.stdout および sys.path を作成します)。
- faulthandler や tracemalloc などのオプション機能を有効にします。
- サイトモジュールをインポートします。
- 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);
}
}