init_config.md
1> **Источник:** https://python-all.ru/3.9/c-api/init_config.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Конфигурация инициализации Python89Новое в версии 3.8.1011Структуры:1213- [`PyConfig`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig)14- [`PyPreConfig`](https://python-all.ru/3.9/c-api/init_config.html#c.PyPreConfig)15- [`PyStatus`](https://python-all.ru/3.9/c-api/init_config.html#c.PyStatus)16- [`PyWideStringList`](https://python-all.ru/3.9/c-api/init_config.html#c.PyWideStringList)1718Функции:1920- [`PyConfig_Clear()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig_Clear)21- [`PyConfig_InitIsolatedConfig()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig_InitIsolatedConfig)22- [`PyConfig_InitPythonConfig()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig_InitPythonConfig)23- [`PyConfig_Read()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig_Read)24- [`PyConfig_SetArgv()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig_SetArgv)25- [`PyConfig_SetBytesArgv()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig_SetBytesArgv)26- [`PyConfig_SetBytesString()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig_SetBytesString)27- [`PyConfig_SetString()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig_SetString)28- [`PyConfig_SetWideStringList()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig_SetWideStringList)29- [`PyPreConfig_InitIsolatedConfig()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyPreConfig_InitIsolatedConfig)30- [`PyPreConfig_InitPythonConfig()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyPreConfig_InitPythonConfig)31- [`PyStatus_Error()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyStatus_Error)32- [`PyStatus_Exception()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyStatus_Exception)33- [`PyStatus_Exit()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyStatus_Exit)34- [`PyStatus_IsError()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyStatus_IsError)35- [`PyStatus_IsExit()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyStatus_IsExit)36- [`PyStatus_NoMemory()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyStatus_NoMemory)37- [`PyStatus_Ok()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyStatus_Ok)38- [`PyWideStringList_Append()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyWideStringList_Append)39- [`PyWideStringList_Insert()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyWideStringList_Insert)40- [`Py_ExitStatusException()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_ExitStatusException)41- [`Py_InitializeFromConfig()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_InitializeFromConfig)42- [`Py_PreInitialize()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_PreInitialize)43- [`Py_PreInitializeFromArgs()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_PreInitializeFromArgs)44- [`Py_PreInitializeFromBytesArgs()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_PreInitializeFromBytesArgs)45- [`Py_RunMain()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_RunMain)46- [`Py_GetArgcArgv()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_GetArgcArgv)4748Предварительная конфигурация (тип `PyPreConfig`) хранится в `_PyRuntime.preconfig`, а конфигурация (тип `PyConfig`) – в `PyInterpreterState.config`.4950См. также [Инициализация, финализация и потоки](https://python-all.ru/3.9/c-api/init.html#initialization).5152> **См. также**53>54> [**PEP 587**](https://python-all.ru/3.9/c-api/init_config.html) “Конфигурация инициализации Python”.5556## PyWideStringList5758**`PyWideStringList`**5960Список строк `wchar_t*`.6162Если *length* не равно нулю, *items* должен быть не `NULL`, а все строки должны быть\\nне `NULL`.6364Методы:6566#### `PyStatus PyWideStringList_Append(PyWideStringList *list, const wchar_t *item)`6768Добавляет *item* в *list*.6970Для вызова этой функции Python должен быть предварительно инициализирован.7172#### `PyStatus PyWideStringList_Insert(PyWideStringList *list, Py_ssize_t index, const wchar_t *item)`7374Вставляет *item* в *list* по индексу *index*.7576Если *index* больше или равен длине *list*, добавляет *item* в\\n*list*.7778*index* должен быть больше или равен 0.7980Для вызова этой функции Python должен быть предварительно инициализирован.8182Поля структуры:8384**[Py\_ssize\_t](https://python-all.ru/3.9/c-api/intro.html#c.Py_ssize_t) `length`**8586Длина списка.8788**wchar\_t\*\* `items`**8990Элементы списка.9192## PyStatus9394**`PyStatus`**9596Структура для хранения состояния функции инициализации: успех, ошибка\\nили завершение.9798В случае ошибки может хранить имя C-функции, вызвавшей ошибку.99100Поля структуры:101102**int `exitcode`**103104Код выхода. Аргумент, передаваемый в `exit()`.105106**const char \*`err_msg`**107108Сообщение об ошибке.109110**const char \*`func`**111112Имя функции, создавшей ошибку, может быть `NULL`.113114Функции создания статуса:115116#### `PyStatus PyStatus_Ok(void)`117118Успех.119120#### `PyStatus PyStatus_Error(const char *err_msg)`121122Ошибка инициализации с сообщением.123124#### `PyStatus PyStatus_NoMemory(void)`125126Сбой выделения памяти (не хватает памяти).127128#### `PyStatus PyStatus_Exit(int exitcode)`129130Завершить Python с указанным кодом выхода.131132Функции обработки статуса:133134#### `int PyStatus_Exception(PyStatus status)`135136Является ли статус ошибкой или выходом? Если да, исключение должно быть обработано, например, вызовом [`Py_ExitStatusException()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_ExitStatusException).137138#### `int PyStatus_IsError(PyStatus status)`139140Является ли результат ошибкой?141142#### `int PyStatus_IsExit(PyStatus status)`143144Является ли результат выходом?145146#### `void Py_ExitStatusException(PyStatus status)`147148Вызвать `exit(exitcode)`, если *status* – это выход. Вывести сообщение об ошибке и завершиться с ненулевым кодом выхода, если *status* – это ошибка. Должна вызываться, только если `PyStatus_Exception(status)` не равен нулю.149150> **Примечание**151>152> Внутренне Python использует макросы, которые устанавливают `PyStatus.func`, тогда как функции создания статуса устанавливают `func` в `NULL`.153154Пример:155156```c157PyStatus alloc(void **ptr, size_t size)158{159 *ptr = PyMem_RawMalloc(size);160 if (*ptr == NULL) {161 return PyStatus_NoMemory();162 }163 return PyStatus_Ok();164}165166int main(int argc, char **argv)167{168 void *ptr;169 PyStatus status = alloc(&ptr, 16);170 if (PyStatus_Exception(status)) {171 Py_ExitStatusException(status);172 }173 PyMem_Free(ptr);174 return 0;175}176```177178## PyPreConfig179180**`PyPreConfig`**181182Структура, используемая для предварительной инициализации Python:183184- Установка распределителя памяти Python185- Настройка локали LC\_CTYPE186- Установка режима UTF-8187188Функция инициализации предварительной конфигурации:189190#### `void PyPreConfig_InitPythonConfig(PyPreConfig *preconfig)`191192Инициализировать предварительную конфигурацию с [Конфигурацией Python](https://python-all.ru/3.9/c-api/init_config.html#init-python-config).193194#### `void PyPreConfig_InitIsolatedConfig(PyPreConfig *preconfig)`195196Инициализировать предварительную конфигурацию с [Изолированной конфигурацией](https://python-all.ru/3.9/c-api/init_config.html#init-isolated-conf).197198Поля структуры:199200**int `allocator`**201202Имя аллокатора памяти:203204- `PYMEM_ALLOCATOR_NOT_SET` (`0`): не менять распределители памяти (использовать по умолчанию)205- `PYMEM_ALLOCATOR_DEFAULT` (`1`): распределители памяти по умолчанию206- `PYMEM_ALLOCATOR_DEBUG` (`2`): распределители памяти по умолчанию с отладочными хуками207- `PYMEM_ALLOCATOR_MALLOC` (`3`): принудительно использовать `malloc()`208- `PYMEM_ALLOCATOR_MALLOC_DEBUG` (`4`): принудительно использовать `malloc()` с отладочными хуками209- `PYMEM_ALLOCATOR_PYMALLOC` (`5`): [аллокатор памяти Python pymalloc](https://python-all.ru/3.9/c-api/memory.html#pymalloc)210- `PYMEM_ALLOCATOR_PYMALLOC_DEBUG` (`6`): [Python pymalloc аллокатор памяти](https://python-all.ru/3.9/c-api/memory.html#pymalloc) с отладочными хуками211212`PYMEM_ALLOCATOR_PYMALLOC` и `PYMEM_ALLOCATOR_PYMALLOC_DEBUG` не поддерживаются, если Python сконфигурирован с помощью `--without-pymalloc`213214См. [Управление памятью](https://python-all.ru/3.9/c-api/memory.html#memory).215216**int `configure_locale`**217218Установить локаль LC\_CTYPE в предпочтительную пользователем локаль? Если равно 0, установить `coerce_c_locale` и `coerce_c_locale_warn` в 0.219220**int `coerce_c_locale`**221222Если равно 2, принудительно изменить локаль C; если равно 1, считать локаль LC\_CTYPE, чтобы решить, нужно ли её принудительно изменять.223224**int `coerce_c_locale_warn`**225226Если не равно нулю, выводит предупреждение при принудительном переключении локали C.227228**int `dev_mode`**229230См. [`PyConfig.dev_mode`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.dev_mode).231232**int `isolated`**233234См. [`PyConfig.isolated`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.isolated).235236**int `legacy_windows_fs_encoding`(Windows *only*)**237238Если не равно нулю, отключить режим UTF-8, установить файловую кодировку Python в `mbcs`, установить обработчик ошибок файловой системы в `replace`.239240Доступно только в Windows. Макрос `#ifdef MS_WINDOWS` можно использовать для кода, зависящего от Windows.241242**int `parse_argv`**243244Если не равно нулю, [`Py_PreInitializeFromArgs()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_PreInitializeFromArgs) и [`Py_PreInitializeFromBytesArgs()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_PreInitializeFromBytesArgs) обрабатывают свой аргумент `argv` так же, как обычный Python обрабатывает аргументы командной строки: см. [Аргументы командной строки](https://python-all.ru/3.9/using/cmdline.html#using-on-cmdline).245246**int `use_environment`**247248См. [`PyConfig.use_environment`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.use_environment).249250**int `utf8_mode`**251252Если не равно нулю, включить режим UTF-8.253254## Предварительная инициализация с PyPreConfig255256Функции для предварительной инициализации Python:257258#### `PyStatus Py_PreInitialize(const PyPreConfig *preconfig)`259260Преинициализировать Python из предварительной конфигурации *preconfig*.261262#### `PyStatus Py_PreInitializeFromBytesArgs(const PyPreConfig *preconfig, int argc, char * const *argv)`263264Предварительно инициализировать Python из предварительной конфигурации *preconfig* и аргументов командной строки (байтовые строки).265266#### `PyStatus Py_PreInitializeFromArgs(const PyPreConfig *preconfig, int argc, wchar_t * const * argv)`267268Предварительно инициализировать Python из предварительной конфигурации *preconfig* и аргументов командной строки (широкие строки).269270Вызывающий код отвечает за обработку исключений (ошибка или выход) с помощью [`PyStatus_Exception()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyStatus_Exception) и [`Py_ExitStatusException()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_ExitStatusException).271272Для [конфигурации Python](https://python-all.ru/3.9/c-api/init_config.html#init-python-config) ([`PyPreConfig_InitPythonConfig()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyPreConfig_InitPythonConfig)), если Python инициализируется с аргументами командной строки, эти аргументы также должны быть переданы для предварительной инициализации Python, поскольку они влияют на предварительную конфигурацию, например, на кодировки. Например, опция командной строки [`-X utf8`](https://python-all.ru/3.9/using/cmdline.html#id5) включает режим UTF-8.273274`PyMem_SetAllocator()` можно вызывать после [`Py_PreInitialize()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_PreInitialize) и до [`Py_InitializeFromConfig()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_InitializeFromConfig), чтобы установить собственный распределитель памяти. Его можно вызывать до [`Py_PreInitialize()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_PreInitialize), если [`PyPreConfig.allocator`](https://python-all.ru/3.9/c-api/init_config.html#c.PyPreConfig.allocator) установлен в `PYMEM_ALLOCATOR_NOT_SET`.275276Функции распределения памяти Python, такие как [`PyMem_RawMalloc()`](https://python-all.ru/3.9/c-api/memory.html#c.PyMem_RawMalloc), не должны использоваться до предварительной инициализации Python, в то время как прямой вызов `malloc()` и `free()` всегда безопасен. [`Py_DecodeLocale()`](https://python-all.ru/3.9/c-api/sys.html#c.Py_DecodeLocale) не должна вызываться до предварительной инициализации.277278Пример использования предварительной инициализации для включения режима UTF-8:279280```c281PyStatus status;282PyPreConfig preconfig;283PyPreConfig_InitPythonConfig(&preconfig);284285preconfig.utf8_mode = 1;286287status = Py_PreInitialize(&preconfig);288if (PyStatus_Exception(status)) {289 Py_ExitStatusException(status);290}291292/* на этом этапе Python будет использовать UTF-8 */293294Py_Initialize();295/* ... использовать Python API здесь ... */296Py_Finalize();297```298299## PyConfig300301**`PyConfig`**302303Структура, содержащая большинство параметров для настройки Python.304305Методы структуры:306307#### `void PyConfig_InitPythonConfig(PyConfig *config)`308309Инициализирует конфигурацию с помощью [Конфигурации Python](https://python-all.ru/3.9/c-api/init_config.html#init-python-config).310311#### `void PyConfig_InitIsolatedConfig(PyConfig *config)`312313Инициализирует конфигурацию с помощью [Изолированной конфигурации](https://python-all.ru/3.9/c-api/init_config.html#init-isolated-conf).314315#### `PyStatus PyConfig_SetString(PyConfig *config, wchar_t * const *config_str, const wchar_t *str)`316317Копировать широкую строку *str* в `*config_str`.318319При необходимости предварительно инициализировать Python.320321#### `PyStatus PyConfig_SetBytesString(PyConfig *config, wchar_t * const *config_str, const char *str)`322323Декодировать *str* с помощью `Py_DecodeLocale()` и поместить результат в `*config_str`.324325При необходимости предварительно инициализировать Python.326327#### `PyStatus PyConfig_SetArgv(PyConfig *config, int argc, wchar_t * const *argv)`328329Устанавливает аргументы командной строки из wide character строк.330331При необходимости предварительно инициализировать Python.332333#### `PyStatus PyConfig_SetBytesArgv(PyConfig *config, int argc, char * const *argv)`334335Устанавливает аргументы командной строки: декодирует байты с помощью [`Py_DecodeLocale()`](https://python-all.ru/3.9/c-api/sys.html#c.Py_DecodeLocale).336337При необходимости предварительно инициализировать Python.338339#### `PyStatus PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, Py_ssize_t length, wchar_t **items)`340341Задать список широких строк *list* с длиной *length* и элементами *items*.342343При необходимости предварительно инициализировать Python.344345#### `PyStatus PyConfig_Read(PyConfig *config)`346347Считывает всю конфигурацию Python.348349Поля, которые уже инициализированы, остаются без изменений.350351При необходимости предварительно инициализировать Python.352353#### `void PyConfig_Clear(PyConfig *config)`354355Освобождает память конфигурации.356357Большинство методов `PyConfig` при необходимости предварительно инициализируют Python. В этом случае конфигурация предварительной инициализации Python основывается на [`PyConfig`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig). Если настраиваются поля конфигурации, общие с [`PyPreConfig`](https://python-all.ru/3.9/c-api/init_config.html#c.PyPreConfig), они должны быть установлены до вызова метода [`PyConfig`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig):358359- [`dev_mode`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.dev_mode)360- [`isolated`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.isolated)361- [`parse_argv`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.parse_argv)362- [`use_environment`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.use_environment)363364Более того, если используется [`PyConfig_SetArgv()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig_SetArgv) или [`PyConfig_SetBytesArgv()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig_SetBytesArgv), этот метод должен быть вызван первым, до других методов, поскольку конфигурация предварительной инициализации зависит от аргументов командной строки (если `parse_argv` не равно нулю).365366Вызывающий эти методы отвечает за обработку исключений (ошибка или выход) с помощью `PyStatus_Exception()` и `Py_ExitStatusException()`.367368Поля структуры:369370**[PyWideStringList](https://python-all.ru/3.9/c-api/init_config.html#c.PyWideStringList) `argv`**371372Аргументы командной строки, [`sys.argv`](https://python-all.ru/3.9/library/sys.html#sys.argv). См. [`parse_argv`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.parse_argv) для разбора [`argv`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.argv) так же, как обычный Python разбирает аргументы командной строки. Если [`argv`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.argv) пуст, добавляется пустая строка, чтобы гарантировать, что [`sys.argv`](https://python-all.ru/3.9/library/sys.html#sys.argv) всегда существует и никогда не пуст.373374**wchar\_t\* `base_exec_prefix`**375376[`sys.base_exec_prefix`](https://python-all.ru/3.9/library/sys.html#sys.base_exec_prefix).377378**wchar\_t\* `base_executable`**379380`sys._base_executable`: значение переменной окружения `__PYVENV_LAUNCHER__` или копия [`PyConfig.executable`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.executable).381382**wchar\_t\* `base_prefix`**383384[`sys.base_prefix`](https://python-all.ru/3.9/library/sys.html#sys.base_prefix).385386**wchar\_t\* `platlibdir`**387388[`sys.platlibdir`](https://python-all.ru/3.9/library/sys.html#sys.platlibdir): имя каталога библиотеки платформы, устанавливаемое во время конфигурирования с помощью `--with-platlibdir`, может быть переопределено переменной окружения `PYTHONPLATLIBDIR`.389390Новое в версии 3.9.391392**int `buffered_stdio`**393394Если равно 0, включает небуферизированный режим, делая потоки stdout и stderr небуферизированными.395396stdin всегда открывается в буферизированном режиме.397398**int `bytes_warning`**399400Если равно 1, выдает предупреждение при сравнении [`bytes`](https://python-all.ru/3.9/library/stdtypes.html#bytes) или [`bytearray`](https://python-all.ru/3.9/library/stdtypes.html#bytearray) с [`str`](https://python-all.ru/3.9/library/stdtypes.html#str), или при сравнении [`bytes`](https://python-all.ru/3.9/library/stdtypes.html#bytes) с [`int`](https://python-all.ru/3.9/library/functions.html#int). Если равно 2 или больше, возбуждает исключение [`BytesWarning`](https://python-all.ru/3.9/library/exceptions.html#BytesWarning).401402**wchar\_t\* `check_hash_pycs_mode`**403404Управляет поведением проверки хешированных файлов `.pyc` (см. [**PEP 552**](https://python-all.ru/3.9/c-api/init_config.html)): значение параметра командной строки [`--check-hash-based-pycs`](https://python-all.ru/3.9/using/cmdline.html#cmdoption-check-hash-based-pycs).405406Допустимые значения: `always`, `never` и `default`.407408Значение по умолчанию: `default`.409410**int `configure_c_stdio`**411412Если ненулевое, настраивает стандартные потоки C (`stdio`, `stdout`, `stdout`). Например, устанавливает их режим в `O_BINARY` в Windows.413414**int `dev_mode`**415416Если не равно нулю, включается [режим разработки Python](https://python-all.ru/3.9/library/devmode.html#devmode).417418**int `dump_refs`**419420Если не равно нулю, сбрасывать все объекты, которые все еще существуют при завершении.421422Макрос `Py_TRACE_REFS` должен быть определен при сборке.423424**wchar\_t\* `exec_prefix`**425426[`sys.exec_prefix`](https://python-all.ru/3.9/library/sys.html#sys.exec_prefix).427428**wchar\_t\* `executable`**429430[`sys.executable`](https://python-all.ru/3.9/library/sys.html#sys.executable).431432**int `faulthandler`**433434Если не равно нулю, вызывается [`faulthandler.enable()`](https://python-all.ru/3.9/library/faulthandler.html#faulthandler.enable) при запуске.435436**wchar\_t\* `filesystem_encoding`**437438Кодировка файловой системы, [`sys.getfilesystemencoding()`](https://python-all.ru/3.9/library/sys.html#sys.getfilesystemencoding).439440**wchar\_t\* `filesystem_errors`**441442Ошибки кодировки файловой системы, [`sys.getfilesystemencodeerrors()`](https://python-all.ru/3.9/library/sys.html#sys.getfilesystemencodeerrors).443444**unsigned long `hash_seed`**445446**int `use_hash_seed`**447448Случайное зерно хеш-функции.449450Если [`use_hash_seed`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.use_hash_seed) равно нулю, начальное значение выбирается случайным образом при запуске Python, а [`hash_seed`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.hash_seed) игнорируется.451452**wchar\_t\* `home`**453454Домашний каталог Python.455456По умолчанию инициализируется из значения переменной окружения [`PYTHONHOME`](https://python-all.ru/3.9/using/cmdline.html#envvar-PYTHONHOME) .457458**int `import_time`**459460Если не ноль, профилировать время импорта.461462**int `inspect`**463464Войти в интерактивный режим после выполнения скрипта или команды.465466**int `install_signal_handlers`**467468Установить обработчики сигналов?469470**int `interactive`**471472Интерактивный режим.473474**int `isolated`**475476Если значение больше 0, включить изолированный режим:477478- [`sys.path`](https://python-all.ru/3.9/library/sys.html#sys.path) не содержит ни каталог скрипта (вычисленный из `argv[0]` или текущего каталога), ни каталог site-packages пользователя.479- REPL Python не импортирует [`readline`](https://python-all.ru/3.9/library/readline.html#module-readline) и не включает стандартную конфигурацию readline в интерактивных приглашениях.480- Установить [`use_environment`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.use_environment) и [`user_site_directory`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.user_site_directory) в 0.481482**int `legacy_windows_stdio`**483484Если не ноль, использовать [`io.FileIO`](https://python-all.ru/3.9/library/io.html#io.FileIO) вместо `io.WindowsConsoleIO` для [`sys.stdin`](https://python-all.ru/3.9/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.9/library/sys.html#sys.stdout) и [`sys.stderr`](https://python-all.ru/3.9/library/sys.html#sys.stderr).485486Доступно только в Windows. Макрос `#ifdef MS_WINDOWS` можно использовать для кода, зависящего от Windows.487488**int `malloc_stats`**489490Если не ноль, вывести статистику по [аллокатору памяти Python pymalloc](https://python-all.ru/3.9/c-api/memory.html#pymalloc) при завершении.491492Параметр игнорируется, если Python собран с использованием `--without-pymalloc`.493494**wchar\_t\* `pythonpath_env`**495496Пути поиска модулей в виде строки, разделённой `DELIM` (`os.path.pathsep`).497498По умолчанию инициализируется из значения переменной окружения [`PYTHONPATH`](https://python-all.ru/3.9/using/cmdline.html#envvar-PYTHONPATH).499500**[PyWideStringList](https://python-all.ru/3.9/c-api/init_config.html#c.PyWideStringList) `module_search_paths`**501502**int `module_search_paths_set`**503504[`sys.path`](https://python-all.ru/3.9/library/sys.html#sys.path). Если [`module_search_paths_set`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.module_search_paths_set) равно 0, [`module_search_paths`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.module_search_paths) переопределяется функцией, вычисляющей [конфигурацию путей](https://python-all.ru/3.9/c-api/init_config.html#init-path-config).505506**int `optimization_level`**507508Уровень оптимизации компиляции:509510- 0: Оптимизатор peephole (а `__debug__` установлен в `True`)511- 1: Удалить утверждения, установить `__debug__` в `False`512- 2: Удалить docstrings513514**int `parse_argv`**515516Если не ноль, разбирать [`argv`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.argv) так же, как обычные аргументы командной строки Python, и удалять аргументы Python из [`argv`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.argv): см. [Аргументы командной строки](https://python-all.ru/3.9/using/cmdline.html#using-on-cmdline).517518**int `parser_debug`**519520Если не ноль, включить отладочный вывод парсера (только для экспертов, зависит от опций компиляции).521522**int `pathconfig_warnings`**523524Если равно 0, подавлять предупреждения при вычислении [конфигурации путей](https://python-all.ru/3.9/c-api/init_config.html#init-path-config) (только Unix, Windows не записывает никаких предупреждений). В противном случае предупреждения записываются в `stderr`.525526**wchar\_t\* `prefix`**527528[`sys.prefix`](https://python-all.ru/3.9/library/sys.html#sys.prefix).529530**wchar\_t\* `program_name`**531532Имя программы. Используется для инициализации [`executable`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.executable) и в ранних сообщениях об ошибках.533534**wchar\_t\* `pycache_prefix`**535536[`sys.pycache_prefix`](https://python-all.ru/3.9/library/sys.html#sys.pycache_prefix): префикс кэша `.pyc`.537538Если `NULL`, [`sys.pycache_prefix`](https://python-all.ru/3.9/library/sys.html#sys.pycache_prefix) устанавливается в `None`.539540**int `quiet`**541542Тихий режим. Например, не отображать сообщения об авторских правах и версии в интерактивном режиме.543544**wchar\_t\* `run_command`**545546Аргумент `python3 -c COMMAND`. Используется [`Py_RunMain()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_RunMain).547548**wchar\_t\* `run_filename`**549550Аргумент `python3 FILENAME`. Используется [`Py_RunMain()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_RunMain).551552**wchar\_t\* `run_module`**553554Аргумент `python3 -m MODULE`. Используется [`Py_RunMain()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_RunMain).555556**int `show_ref_count`**557558Показывать общее количество ссылок при завершении?559560Устанавливается в 1 опцией командной строки [`-X showrefcount`](https://python-all.ru/3.9/using/cmdline.html#id5).561562Требуется отладочная сборка Python (макрос `Py_REF_DEBUG` должен быть определён).563564**int `site_import`**565566Импортировать модуль [`site`](https://python-all.ru/3.9/library/site.html#module-site) при запуске?567568**int `skip_source_first_line`**569570Пропустить первую строку исходного кода?571572**wchar\_t\* `stdio_encoding`**573574**wchar\_t\* `stdio_errors`**575576Кодировка и ошибки кодировки для [`sys.stdin`](https://python-all.ru/3.9/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.9/library/sys.html#sys.stdout) и [`sys.stderr`](https://python-all.ru/3.9/library/sys.html#sys.stderr).577578**int `tracemalloc`**579580Если не равно нулю, вызывается [`tracemalloc.start()`](https://python-all.ru/3.9/library/tracemalloc.html#tracemalloc.start) при запуске.581582**int `use_environment`**583584Если больше 0, использовать [переменные окружения](https://python-all.ru/3.9/using/cmdline.html#using-on-envvars).585586**int `user_site_directory`**587588Если не ноль, добавить каталог пользовательского site в [`sys.path`](https://python-all.ru/3.9/library/sys.html#sys.path).589590**int `verbose`**591592Если не ноль, включить подробный режим.593594**[PyWideStringList](https://python-all.ru/3.9/c-api/init_config.html#c.PyWideStringList) `warnoptions`**595596[`sys.warnoptions`](https://python-all.ru/3.9/library/sys.html#sys.warnoptions): параметры модуля [`warnings`](https://python-all.ru/3.9/library/warnings.html#module-warnings) для построения фильтров предупреждений: от низшего к высшему приоритету.597598Модуль [`warnings`](https://python-all.ru/3.9/library/warnings.html#module-warnings) добавляет [`sys.warnoptions`](https://python-all.ru/3.9/library/sys.html#sys.warnoptions) в обратном порядке: последний элемент [`PyConfig.warnoptions`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.warnoptions) становится первым элементом `warnings.filters`, который проверяется первым (наивысший приоритет).599600**int `write_bytecode`**601602Если не ноль, записывать файлы `.pyc`.603604[`sys.dont_write_bytecode`](https://python-all.ru/3.9/library/sys.html#sys.dont_write_bytecode) инициализируется инвертированным значением [`write_bytecode`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.write_bytecode).605606**[PyWideStringList](https://python-all.ru/3.9/c-api/init_config.html#c.PyWideStringList) `xoptions`**607608[`sys._xoptions`](https://python-all.ru/3.9/library/sys.html#sys._xoptions).609610**int `_use_peg_parser`**611612Включить PEG-парсер? По умолчанию: 1.613614Устанавливается в 0 вызовом [`-X oldparser`](https://python-all.ru/3.9/using/cmdline.html#id5) и [`PYTHONOLDPARSER`](https://python-all.ru/3.9/using/cmdline.html#envvar-PYTHONOLDPARSER).615616См. также [**PEP 617**](https://python-all.ru/3.9/c-api/init_config.html).617618Устарело с версии 3.9, будет удалено в версии 3.10.619620Если `parse_argv` не ноль, то аргументы `argv` разбираются так же, как обычный Python разбирает аргументы командной строки, и аргументы Python удаляются из `argv`: см. [Аргументы командной строки](https://python-all.ru/3.9/using/cmdline.html#using-on-cmdline).621622Параметры `xoptions` разбираются для установки других параметров: см. параметр [`-X`](https://python-all.ru/3.9/using/cmdline.html#id5).623624Изменено в версии 3.9: Поле `show_alloc_count` было удалено.625626## Инициализация с PyConfig627628Функция для инициализации Python:629630#### `PyStatus Py_InitializeFromConfig(const PyConfig *config)`631632Инициализирует Python из конфигурации *config*.633634Вызывающий код отвечает за обработку исключений (ошибка или выход) с помощью [`PyStatus_Exception()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyStatus_Exception) и [`Py_ExitStatusException()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_ExitStatusException).635636Если используются [`PyImport_FrozenModules()`](https://python-all.ru/3.9/c-api/import.html#c.PyImport_FrozenModules), [`PyImport_AppendInittab()`](https://python-all.ru/3.9/c-api/import.html#c.PyImport_AppendInittab) или [`PyImport_ExtendInittab()`](https://python-all.ru/3.9/c-api/import.html#c.PyImport_ExtendInittab), они должны быть установлены или вызваны после предварительной инициализации Python и до инициализации Python. Если Python инициализируется несколько раз, [`PyImport_AppendInittab()`](https://python-all.ru/3.9/c-api/import.html#c.PyImport_AppendInittab) или [`PyImport_ExtendInittab()`](https://python-all.ru/3.9/c-api/import.html#c.PyImport_ExtendInittab) должны вызываться перед каждой инициализацией Python.637638Пример установки имени программы:639640```c641void init_python(void)642{643 PyStatus status;644645 PyConfig config;646 PyConfig_InitPythonConfig(&config);647648 /* Установить имя программы. Неявно предварительно инициализировать Python. */649 status = PyConfig_SetString(&config, &config.program_name,650 L"/path/to/my_program");651 if (PyStatus_Exception(status)) {652 goto fail;653 }654655 status = Py_InitializeFromConfig(&config);656 if (PyStatus_Exception(status)) {657 goto fail;658 }659 PyConfig_Clear(&config);660 return;661662fail:663 PyConfig_Clear(&config);664 Py_ExitStatusException(status);665}666```667668Более полный пример изменения конфигурации по умолчанию: чтение конфигурации и последующее переопределение некоторых параметров:669670```c671PyStatus init_python(const char *program_name)672{673 PyStatus status;674675 PyConfig config;676 PyConfig_InitPythonConfig(&config);677678 /* Установить имя программы перед чтением конфигурации679 (декодировать байтовую строку из кодировки локали).680681 Неявно предварительно инициализировать Python. */682 status = PyConfig_SetBytesString(&config, &config.program_name,683 program_name);684 if (PyStatus_Exception(status)) {685 goto done;686 }687688 /* Прочитать всю конфигурацию сразу */689 status = PyConfig_Read(&config);690 if (PyStatus_Exception(status)) {691 goto done;692 }693694 /* Добавляет пользовательский путь поиска в sys.path */695 status = PyWideStringList_Append(&config.module_search_paths,696 L"/path/to/more/modules");697 if (PyStatus_Exception(status)) {698 goto done;699 }700701 /* Переопределить исполняемый файл, вычисленный PyConfig_Read() */702 status = PyConfig_SetString(&config, &config.executable,703 L"/path/to/my_executable");704 if (PyStatus_Exception(status)) {705 goto done;706 }707708 status = Py_InitializeFromConfig(&config);709710done:711 PyConfig_Clear(&config);712 return status;713}714```715716## Изолированная конфигурация717718Функции [`PyPreConfig_InitIsolatedConfig()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyPreConfig_InitIsolatedConfig) и [`PyConfig_InitIsolatedConfig()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig_InitIsolatedConfig) создают конфигурацию для изоляции Python от системы. Например, для встраивания Python в приложение.719720Эта конфигурация игнорирует глобальные переменные конфигурации, переменные окружения, аргументы командной строки ([`PyConfig.argv`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.argv) не разбирается) и каталог пользовательских сайтов. Стандартные потоки C (например: `stdout`) и локаль LC\_CTYPE остаются без изменений. Обработчики сигналов не устанавливаются.721722Конфигурационные файлы всё ещё используются с этой конфигурацией. Установите [Path Configuration](https://python-all.ru/3.9/c-api/init_config.html#init-path-config) («выходные поля») в значение, игнорирующее эти конфигурационные файлы, чтобы функция не вычисляла конфигурацию путей по умолчанию.723724## Конфигурация Python725726Функции [`PyPreConfig_InitPythonConfig()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyPreConfig_InitPythonConfig) и [`PyConfig_InitPythonConfig()`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig_InitPythonConfig) создают конфигурацию для сборки настраиваемого Python, который ведёт себя как обычный Python.727728Переменные окружения и аргументы командной строки используются для настройки Python, тогда как глобальные переменные конфигурации игнорируются.729730Эта функция включает принудительное использование локали C ([**PEP 538**](https://python-all.ru/3.9/c-api/init_config.html)) и режим UTF-8 ([**PEP 540**](https://python-all.ru/3.9/c-api/init_config.html)) в зависимости от локали LC\_CTYPE, переменных окружения [`PYTHONUTF8`](https://python-all.ru/3.9/using/cmdline.html#envvar-PYTHONUTF8) и [`PYTHONCOERCECLOCALE`](https://python-all.ru/3.9/using/cmdline.html#envvar-PYTHONCOERCECLOCALE).731732Пример настройки Python для постоянной работы в изолированном режиме:733734```c735int main(int argc, char **argv)736{737 PyStatus status;738739 PyConfig config;740 PyConfig_InitPythonConfig(&config);741 config.isolated = 1;742743 /* Декодировать аргументы командной строки.744 Неявно предварительно инициализировать Python (в изолированном режиме). */745 status = PyConfig_SetBytesArgv(&config, argc, argv);746 if (PyStatus_Exception(status)) {747 goto fail;748 }749750 status = Py_InitializeFromConfig(&config);751 if (PyStatus_Exception(status)) {752 goto fail;753 }754 PyConfig_Clear(&config);755756 return Py_RunMain();757758fail:759 PyConfig_Clear(&config);760 if (PyStatus_IsExit(status)) {761 return status.exitcode;762 }763 /* Вывести сообщение об ошибке и завершить процесс с764 ненулевым кодом выхода */765 Py_ExitStatusException(status);766}767```768769## Path Configuration770771[`PyConfig`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig) содержит несколько полей для конфигурации путей:772773- Входные данные конфигурации путей:774775 - [`PyConfig.home`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.home)776 - [`PyConfig.platlibdir`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.platlibdir)777 - [`PyConfig.pathconfig_warnings`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.pathconfig_warnings)778 - [`PyConfig.program_name`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.program_name)779 - [`PyConfig.pythonpath_env`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.pythonpath_env)780 - текущий рабочий каталог: для получения абсолютных путей781 - переменная окружения `PATH` для получения полного пути программы (из [`PyConfig.program_name`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.program_name))782 - переменная окружения `__PYVENV_LAUNCHER__`783 - (только Windows) Пути приложений в реестре в разделе “SoftwarePythonPythonCoreX.YPythonPath” для HKEY\_CURRENT\_USER и HKEY\_LOCAL\_MACHINE (где X.Y – версия Python).784- Выходные поля конфигурации путей:785786 - [`PyConfig.base_exec_prefix`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.base_exec_prefix)787 - [`PyConfig.base_executable`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.base_executable)788 - [`PyConfig.base_prefix`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.base_prefix)789 - [`PyConfig.exec_prefix`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.exec_prefix)790 - [`PyConfig.executable`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.executable)791 - [`PyConfig.module_search_paths_set`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.module_search_paths_set), [`PyConfig.module_search_paths`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.module_search_paths)792 - [`PyConfig.prefix`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.prefix)793794Если хотя бы одно «выходное поле» не установлено, Python вычисляет конфигурацию пути, чтобы заполнить неустановленные поля. Если [`module_search_paths_set`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.module_search_paths_set) равно 0, [`module_search_paths`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.module_search_paths) переопределяется и [`module_search_paths_set`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.module_search_paths_set) устанавливается в 1.795796Можно полностью игнорировать функцию вычисления конфигурации пути по умолчанию, явно задав все перечисленные выше выходные поля конфигурации пути. Строка считается установленной, даже если она непуста. `module_search_paths` считается установленным, если `module_search_paths_set` установлено в 1. В этом случае входные поля конфигурации пути также игнорируются.797798Установите [`pathconfig_warnings`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.pathconfig_warnings) в 0, чтобы подавить предупреждения при вычислении конфигурации пути (только Unix; Windows не выводит предупреждения).799800Если поля [`base_prefix`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.base_prefix) или [`base_exec_prefix`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.base_exec_prefix) не заданы, они наследуют свои значения от [`prefix`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.prefix) и [`exec_prefix`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.exec_prefix) соответственно.801802[`Py_RunMain()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_RunMain) и [`Py_Main()`](https://python-all.ru/3.9/c-api/veryhigh.html#c.Py_Main) изменяют [`sys.path`](https://python-all.ru/3.9/library/sys.html#sys.path):803804- Если [`run_filename`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.run_filename) задано и является каталогом, содержащим скрипт `__main__.py`, добавьте [`run_filename`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.run_filename) в начало [`sys.path`](https://python-all.ru/3.9/library/sys.html#sys.path).805- Если [`isolated`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.isolated) равно нулю:806807 - Если [`run_module`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.run_module) задан, добавьте текущий каталог в начало [`sys.path`](https://python-all.ru/3.9/library/sys.html#sys.path). Ничего не делайте, если текущий каталог не может быть прочитан.808 - Если [`run_filename`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.run_filename) задан, добавьте каталог файла в начало [`sys.path`](https://python-all.ru/3.9/library/sys.html#sys.path).809 - В противном случае пустая строка добавляется в начало [`sys.path`](https://python-all.ru/3.9/library/sys.html#sys.path).810811Если [`site_import`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.site_import) не равно нулю, то [`sys.path`](https://python-all.ru/3.9/library/sys.html#sys.path) может быть изменён модулем [`site`](https://python-all.ru/3.9/library/site.html#module-site). Если [`user_site_directory`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.user_site_directory) не равно нулю и каталог пакетов сайта пользователя существует, модуль [`site`](https://python-all.ru/3.9/library/site.html#module-site) добавляет каталог пакетов сайта пользователя в [`sys.path`](https://python-all.ru/3.9/library/sys.html#sys.path).812813При конфигурации путей используются следующие файлы конфигурации:814815- `pyvenv.cfg`816- `python._pth` (только Windows)817- `pybuilddir.txt` (только Unix)818819Переменная окружения `__PYVENV_LAUNCHER__` используется для установки [`PyConfig.base_executable`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.base_executable).820821## Py\_RunMain()822823#### `int Py_RunMain(void)`824825Выполняет команду ([`PyConfig.run_command`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.run_command)), скрипт ([`PyConfig.run_filename`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.run_filename)) или модуль ([`PyConfig.run_module`](https://python-all.ru/3.9/c-api/init_config.html#c.PyConfig.run_module)), указанные в командной строке или в конфигурации.826827По умолчанию, а также при использовании опции [`-i`](https://python-all.ru/3.9/using/cmdline.html#cmdoption-i), запускается REPL.828829Наконец, завершает работу Python и возвращает код завершения, который можно передать функции `exit()`.830831См. [Python Configuration](https://python-all.ru/3.9/c-api/init_config.html#init-python-config) для примера настройки Python для постоянной работы в изолированном режиме с помощью [`Py_RunMain()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_RunMain).832833## Py\_GetArgcArgv()834835#### `void Py_GetArgcArgv(int *argc, wchar_t ***argv)`836837Возвращает исходные аргументы командной строки до того, как Python их изменил.838839## Многофазная инициализация (частный временный API)840841Данный раздел представляет собой частный временный API, вводящий многофазную инициализацию – ключевую возможность [**PEP 432**](https://python-all.ru/3.9/c-api/init_config.html):842843- Фаза «базовой» инициализации, «минимальный Python»:844845 - Встроенные типы;846 - Встроенные исключения;847 - Встроенные и замороженные модули;848 - Модуль [`sys`](https://python-all.ru/3.9/library/sys.html#module-sys) инициализирован лишь частично (например, [`sys.path`](https://python-all.ru/3.9/library/sys.html#sys.path) ещё не существует).849- Фаза «основной» инициализации, Python полностью инициализирован:850851 - Устанавливает и настраивает [`importlib`](https://python-all.ru/3.9/library/importlib.html#module-importlib);852 - Применяет [конфигурацию путей](https://python-all.ru/3.9/c-api/init_config.html#init-path-config);853 - Устанавливает обработчики сигналов;854 - Завершает инициализацию модуля [`sys`](https://python-all.ru/3.9/library/sys.html#module-sys) (например, создаёт [`sys.stdout`](https://python-all.ru/3.9/library/sys.html#sys.stdout) и [`sys.path`](https://python-all.ru/3.9/library/sys.html#sys.path));855 - Включает опциональные возможности, такие как [`faulthandler`](https://python-all.ru/3.9/library/faulthandler.html#module-faulthandler) и [`tracemalloc`](https://python-all.ru/3.9/library/tracemalloc.html#module-tracemalloc);856 - Импортировать модуль [`site`](https://python-all.ru/3.9/library/site.html#module-site);857 - и т. д.858859Частный временный API:860861- `PyConfig._init_main`: если установлено в 0, [`Py_InitializeFromConfig()`](https://python-all.ru/3.9/c-api/init_config.html#c.Py_InitializeFromConfig) останавливается на фазе инициализации «Core».862- `PyConfig._isolated_interpreter`: если не равно нулю, запретить потоки, подпроцессы и fork.863864#### `PyStatus _Py_InitializeMain(void)`865866Переход к фазе инициализации «Main», завершение инициализации Python.867868Во время фазы «Core» не импортируется ни один модуль, а модуль `importlib` не настроен: [Path Configuration](https://python-all.ru/3.9/c-api/init_config.html#init-path-config) применяется только во время фазы «Main». Это может позволить настраивать Python из Python, чтобы переопределить или настроить [Path Configuration](https://python-all.ru/3.9/c-api/init_config.html#init-path-config), возможно, установить пользовательский импортёр [`sys.meta_path`](https://python-all.ru/3.9/library/sys.html#sys.meta_path) или хук импорта и т. д.869870Возможно, станет возможным вычислять [конфигурацию путей](https://python-all.ru/3.9/c-api/init_config.html#init-path-config) в Python после этапа Core и до этапа Main, что является одной из мотиваций [**PEP 432**](https://python-all.ru/3.9/c-api/init_config.html).871872Фаза «Core» не определена должным образом: что должно и что не должно быть доступно на этой фазе, пока не указано. API помечен как частный и временный: API может быть изменён или даже удалён в любое время, пока не будет спроектирован надлежащий публичный API.873874Пример выполнения кода Python между фазами инициализации «Core» и «Main»:875876```c877void init_python(void)878{879 PyStatus status;880881 PyConfig config;882 PyConfig_InitPythonConfig(&config);883 config._init_main = 0;884885 /* настроить конфигурацию 'config' */886887 status = Py_InitializeFromConfig(&config);888 PyConfig_Clear(&config);889 if (PyStatus_Exception(status)) {890 Py_ExitStatusException(status);891 }892893 /* ... разместить здесь дополнительный код конфигурации ...894 вызывается _Py_InitializeMain() */895 int res = PyRun_SimpleString(896 "import sys; "897 "print('Run Python code before _Py_InitializeMain', "898 "file=sys.stderr)");899 if (res < 0) {900 exit(1);901 }902903 /* ... добавьте сюда дополнительный код конфигурации ... */904905 status = _Py_InitializeMain();906 if (PyStatus_Exception(status)) {907 Py_ExitStatusException(status);908 }909}910```911