init_config.md
1> **Источник:** https://python-all.ru/3.10/c-api/init_config.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Конфигурация инициализации Python89Новое в версии 3.8.1011Python может быть инициализирован с помощью [`Py_InitializeFromConfig()`](https://python-all.ru/3.10/c-api/init_config.html#c.Py_InitializeFromConfig) и структуры [`PyConfig`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig). Он может быть предварительно инициализирован с помощью [`Py_PreInitialize()`](https://python-all.ru/3.10/c-api/init_config.html#c.Py_PreInitialize) и структуры [`PyPreConfig`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig).1213Существует два вида конфигурации:1415- [Конфигурация Python](https://python-all.ru/3.10/c-api/init_config.html#init-python-config) может использоваться для создания настраиваемого Python, который ведёт себя как обычный Python. Например, переменные окружения и аргументы командной строки используются для настройки Python.16- [Изолированная конфигурация](https://python-all.ru/3.10/c-api/init_config.html#init-isolated-conf) может использоваться для встраивания Python в приложение. Она изолирует Python от системы. Например, переменные окружения игнорируются, локаль LC\_CTYPE остаётся неизменной и не регистрируется ни один обработчик сигналов.1718Функция [`Py_RunMain()`](https://python-all.ru/3.10/c-api/init_config.html#c.Py_RunMain) может использоваться для написания настраиваемой программы на Python.1920См. также [Инициализация, финализация и потоки](https://python-all.ru/3.10/c-api/init.html#initialization).2122> **См. также**23>24> [**PEP 587**](https://python-all.ru/3.10/c-api/init_config.html) “Конфигурация инициализации Python”.2526## Пример2728Пример настройки Python для постоянной работы в изолированном режиме:2930```c31int main(int argc, char **argv)32{33 PyStatus status;3435 PyConfig config;36 PyConfig_InitPythonConfig(&config);37 config.isolated = 1;3839 /* Декодировать аргументы командной строки.40 Неявно предварительно инициализировать Python (в изолированном режиме). */41 status = PyConfig_SetBytesArgv(&config, argc, argv);42 if (PyStatus_Exception(status)) {43 goto exception;44 }4546 status = Py_InitializeFromConfig(&config);47 if (PyStatus_Exception(status)) {48 goto exception;49 }50 PyConfig_Clear(&config);5152 return Py_RunMain();5354exception:55 PyConfig_Clear(&config);56 if (PyStatus_IsExit(status)) {57 return status.exitcode;58 }59 /* Вывести сообщение об ошибке и завершить процесс с60 ненулевым кодом выхода */61 Py_ExitStatusException(status);62}63```6465## PyWideStringList6667#### `type PyWideStringList`6869Список строк `wchar_t*`.7071Если *length* не равно нулю, *items* должен быть не `NULL`, а все строки должны быть\\nне `NULL`.7273Методы:7475#### `PyStatus PyWideStringList_Append(PyWideStringList *list, const wchar_t *item)`7677Добавляет *item* в *list*.7879Для вызова этой функции Python должен быть предварительно инициализирован.8081#### `PyStatus PyWideStringList_Insert(PyWideStringList *list, Py_ssize_t index, const wchar_t *item)`8283Вставляет *item* в *list* по индексу *index*.8485Если *index* больше или равен длине *list*, добавляет *item* в\\n*list*.8687*index* должен быть больше или равен 0.8889Для вызова этой функции Python должен быть предварительно инициализирован.9091Поля структуры:9293#### `Py_ssize_t length`9495Длина списка.9697#### `wchar_t **items`9899Элементы списка.100101## PyStatus102103#### `type PyStatus`104105Структура для хранения состояния функции инициализации: успех, ошибка\\nили завершение.106107В случае ошибки может хранить имя C-функции, вызвавшей ошибку.108109Поля структуры:110111#### `int exitcode`112113Код выхода. Аргумент, передаваемый в `exit()`.114115#### `const char *err_msg`116117Сообщение об ошибке.118119#### `const char *func`120121Имя функции, создавшей ошибку, может быть `NULL`.122123Функции создания статуса:124125#### `PyStatus PyStatus_Ok(void)`126127Успех.128129#### `PyStatus PyStatus_Error(const char *err_msg)`130131Ошибка инициализации с сообщением.132133*err\_msg* не должен быть `NULL`.134135#### `PyStatus PyStatus_NoMemory(void)`136137Сбой выделения памяти (не хватает памяти).138139#### `PyStatus PyStatus_Exit(int exitcode)`140141Завершить Python с указанным кодом выхода.142143Функции обработки статуса:144145#### `int PyStatus_Exception(PyStatus status)`146147Является ли статус ошибкой или выходом? Если да, исключение должно быть обработано, например, вызовом [`Py_ExitStatusException()`](https://python-all.ru/3.10/c-api/init_config.html#c.PyStatus.Py_ExitStatusException).148149#### `int PyStatus_IsError(PyStatus status)`150151Является ли результат ошибкой?152153#### `int PyStatus_IsExit(PyStatus status)`154155Является ли результат выходом?156157#### `void Py_ExitStatusException(PyStatus status)`158159Вызвать `exit(exitcode)`, если *status* – это выход. Вывести сообщение об ошибке и завершиться с ненулевым кодом выхода, если *status* – это ошибка. Должна вызываться, только если `PyStatus_Exception(status)` не равен нулю.160161> **Примечание**162>163> Внутренне Python использует макросы, которые устанавливают `PyStatus.func`, тогда как функции создания статуса устанавливают `func` в `NULL`.164165Пример:166167```c168PyStatus alloc(void **ptr, size_t size)169{170 *ptr = PyMem_RawMalloc(size);171 if (*ptr == NULL) {172 return PyStatus_NoMemory();173 }174 return PyStatus_Ok();175}176177int main(int argc, char **argv)178{179 void *ptr;180 PyStatus status = alloc(&ptr, 16);181 if (PyStatus_Exception(status)) {182 Py_ExitStatusException(status);183 }184 PyMem_Free(ptr);185 return 0;186}187```188189## PyPreConfig190191#### `type PyPreConfig`192193Структура, используемая для предварительной инициализации Python.194195Функция инициализации предварительной конфигурации:196197#### `void PyPreConfig_InitPythonConfig(PyPreConfig *preconfig)`198199Инициализировать предварительную конфигурацию с [Конфигурацией Python](https://python-all.ru/3.10/c-api/init_config.html#init-python-config).200201#### `void PyPreConfig_InitIsolatedConfig(PyPreConfig *preconfig)`202203Инициализировать предварительную конфигурацию с [Изолированной конфигурацией](https://python-all.ru/3.10/c-api/init_config.html#init-isolated-conf).204205Поля структуры:206207#### `int allocator`208209Имя распределителей памяти Python:210211- `PYMEM_ALLOCATOR_NOT_SET` (`0`): не изменять распределители памяти (использовать значения по умолчанию).212- `PYMEM_ALLOCATOR_DEFAULT` (`1`): [стандартные распределители памяти](https://python-all.ru/3.10/c-api/memory.html#default-memory-allocators).213- `PYMEM_ALLOCATOR_DEBUG` (`2`): [стандартные распределители памяти](https://python-all.ru/3.10/c-api/memory.html#default-memory-allocators) с [отладочными перехватчиками](https://python-all.ru/3.10/c-api/memory.html#pymem-debug-hooks).214- `PYMEM_ALLOCATOR_MALLOC` (`3`): использовать `malloc()` из библиотеки C.215- `PYMEM_ALLOCATOR_MALLOC_DEBUG` (`4`): принудительно использовать `malloc()` с [отладочными перехватчиками](https://python-all.ru/3.10/c-api/memory.html#pymem-debug-hooks).216- `PYMEM_ALLOCATOR_PYMALLOC` (`5`): [распределитель памяти pymalloc из Python](https://python-all.ru/3.10/c-api/memory.html#pymalloc).217- `PYMEM_ALLOCATOR_PYMALLOC_DEBUG` (`6`): [распределитель памяти pymalloc из Python](https://python-all.ru/3.10/c-api/memory.html#pymalloc) с [отладочными перехватчиками](https://python-all.ru/3.10/c-api/memory.html#pymem-debug-hooks).218219`PYMEM_ALLOCATOR_PYMALLOC` и `PYMEM_ALLOCATOR_PYMALLOC_DEBUG` не поддерживаются, если Python собран [`configured using --without-pymalloc`](https://python-all.ru/3.10/using/configure.html#cmdoption-without-pymalloc).220221См. [Управление памятью](https://python-all.ru/3.10/c-api/memory.html#memory).222223По умолчанию: `PYMEM_ALLOCATOR_NOT_SET`.224225#### `int configure_locale`226227Устанавливает локаль LC\_CTYPE в локаль, предпочитаемую пользователем.228229Если равно 0, установите поля [`coerce_c_locale`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig.coerce_c_locale) и [`coerce_c_locale_warn`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig.coerce_c_locale_warn) в 0.230231См. [кодировку локали](https://python-all.ru/3.10/glossary.html#term-locale-encoding).232233По умолчанию: `1` в конфигурации Python, `0` в изолированной конфигурации.234235#### `int coerce_c_locale`236237Если равно 2, принудительно установить локаль C.238239Если равно 1, прочитать локаль LC\_CTYPE, чтобы определить, требуется ли принудительная установка.240241См. [кодировку локали](https://python-all.ru/3.10/glossary.html#term-locale-encoding).242243По умолчанию: `-1` в конфигурации Python, `0` в изолированной конфигурации.244245#### `int coerce_c_locale_warn`246247Если не равно нулю, выводит предупреждение при принудительном переключении локали C.248249По умолчанию: `-1` в конфигурации Python, `0` в изолированной конфигурации.250251#### `int dev_mode`252253Если не равно нулю, включает [Режим разработки Python](https://python-all.ru/3.10/library/devmode.html#devmode): см. [`PyConfig.dev_mode`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.dev_mode).254255По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.256257#### `int isolated`258259Изолированный режим: см. [`PyConfig.isolated`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.isolated).260261По умолчанию: `0` в режиме Python, `1` в изолированном режиме.262263#### `int legacy_windows_fs_encoding`264265Если не равно нулю:266267- Устанавливает [`PyPreConfig.utf8_mode`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig.utf8_mode) в `0`,268- Устанавливает [`PyConfig.filesystem_encoding`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.filesystem_encoding) в `"mbcs"`,269- Устанавливает [`PyConfig.filesystem_errors`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.filesystem_errors) в `"replace"`.270271Инициализировано из значения переменной окружения [`PYTHONLEGACYWINDOWSFSENCODING`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONLEGACYWINDOWSFSENCODING).272273Доступно только в Windows. Макрос `#ifdef MS_WINDOWS` можно использовать для кода, зависящего от Windows.274275По умолчанию: `0`.276277#### `int parse_argv`278279Если не равно нулю, [`Py_PreInitializeFromArgs()`](https://python-all.ru/3.10/c-api/init_config.html#c.Py_PreInitializeFromArgs) и [`Py_PreInitializeFromBytesArgs()`](https://python-all.ru/3.10/c-api/init_config.html#c.Py_PreInitializeFromBytesArgs) обрабатывают свой аргумент `argv` так же, как обычный Python обрабатывает аргументы командной строки: см. [Аргументы командной строки](https://python-all.ru/3.10/using/cmdline.html#using-on-cmdline).280281По умолчанию: `1` в конфигурации Python, `0` в изолированной конфигурации.282283#### `int use_environment`284285Использовать [переменные окружения](https://python-all.ru/3.10/using/cmdline.html#using-on-envvars)? См. [`PyConfig.use_environment`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.use_environment).286287По умолчанию: `1` в конфигурации Python и `0` в изолированной конфигурации.288289#### `int utf8_mode`290291Если не равно нулю, включает [Режим UTF-8 Python](https://python-all.ru/3.10/library/os.html#utf8-mode).292293Устанавливается параметром командной строки [`-X utf8`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONUTF8`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONUTF8).294295По умолчанию: `-1` в конфигурации Python и `0` в изолированной конфигурации.296297## Предварительная инициализация Python с PyPreConfig298299Предварительная инициализация Python:300301- Устанавливает распределители памяти Python ([`PyPreConfig.allocator`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig.allocator))302- Настраивает локаль LC\_CTYPE ([кодировка локали](https://python-all.ru/3.10/glossary.html#term-locale-encoding))303- Устанавливает [Режим UTF-8 Python](https://python-all.ru/3.10/library/os.html#utf8-mode) ([`PyPreConfig.utf8_mode`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig.utf8_mode))304305Текущая предварительная конфигурация (тип `PyPreConfig`) хранится в `_PyRuntime.preconfig`.306307Функции для предварительной инициализации Python:308309#### `PyStatus Py_PreInitialize(const PyPreConfig *preconfig)`310311Преинициализировать Python из предварительной конфигурации *preconfig*.312313*preconfig* не должен быть `NULL`.314315#### `PyStatus Py_PreInitializeFromBytesArgs(const PyPreConfig *preconfig, int argc, char *const *argv)`316317Преинициализировать Python из предварительной конфигурации *preconfig*.318319Обрабатывает аргументы командной строки *argv* (байтовые строки), если [`parse_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig.parse_argv) в *preconfig* не равно нулю.320321*preconfig* не должен быть `NULL`.322323#### `PyStatus Py_PreInitializeFromArgs(const PyPreConfig *preconfig, int argc, wchar_t *const *argv)`324325Преинициализировать Python из предварительной конфигурации *preconfig*.326327Разобрать аргументы командной строки *argv* (широкие строки), если [`parse_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig.parse_argv) структуры *preconfig* не равен нулю.328329*preconfig* не должен быть `NULL`.330331Вызывающий код отвечает за обработку исключений (ошибка или выход) с помощью `PyStatus_Exception()` и `Py_ExitStatusException()`.332333Для [конфигурации Python](https://python-all.ru/3.10/c-api/init_config.html#init-python-config) (`PyPreConfig_InitPythonConfig()`), если Python инициализируется с аргументами командной строки, эти аргументы также должны быть переданы в преинициализацию Python, поскольку они влияют на предварительную конфигурацию, например, на кодировки. Например, параметр командной строки [`-X utf8`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-X) включает [режим UTF-8 Python](https://python-all.ru/3.10/library/os.html#utf8-mode).334335`PyMem_SetAllocator()` можно вызывать после [`Py_PreInitialize()`](https://python-all.ru/3.10/c-api/init_config.html#c.Py_PreInitialize) и до [`Py_InitializeFromConfig()`](https://python-all.ru/3.10/c-api/init_config.html#c.Py_InitializeFromConfig), чтобы установить собственный распределитель памяти. Его можно вызывать до [`Py_PreInitialize()`](https://python-all.ru/3.10/c-api/init_config.html#c.Py_PreInitialize), если [`PyPreConfig.allocator`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig.allocator) установлен в `PYMEM_ALLOCATOR_NOT_SET`.336337Функции выделения памяти Python, такие как [`PyMem_RawMalloc()`](https://python-all.ru/3.10/c-api/memory.html#c.PyMem_RawMalloc), не должны использоваться до преинициализации Python, тогда как прямой вызов `malloc()` и `free()` всегда безопасен. [`Py_DecodeLocale()`](https://python-all.ru/3.10/c-api/sys.html#c.Py_DecodeLocale) не должна вызываться до преинициализации Python.338339Пример использования преинициализации для включения [режима UTF-8 Python](https://python-all.ru/3.10/library/os.html#utf8-mode):340341```c342PyStatus status;343PyPreConfig preconfig;344PyPreConfig_InitPythonConfig(&preconfig);345346preconfig.utf8_mode = 1;347348status = Py_PreInitialize(&preconfig);349if (PyStatus_Exception(status)) {350 Py_ExitStatusException(status);351}352353/* на этом этапе Python использует кодировку UTF-8 */354355Py_Initialize();356/* ... использовать Python API здесь ... */357Py_Finalize();358```359360## PyConfig361362#### `type PyConfig`363364Структура, содержащая большинство параметров для настройки Python.365366После завершения необходимо использовать функцию [`PyConfig_Clear()`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.PyConfig_Clear) для освобождения памяти конфигурации.367368Методы структуры:369370#### `void PyConfig_InitPythonConfig(PyConfig *config)`371372Инициализировать конфигурацию с помощью [конфигурации Python](https://python-all.ru/3.10/c-api/init_config.html#init-python-config).373374#### `void PyConfig_InitIsolatedConfig(PyConfig *config)`375376Инициализировать конфигурацию с помощью [изолированной конфигурации](https://python-all.ru/3.10/c-api/init_config.html#init-isolated-conf).377378#### `PyStatus PyConfig_SetString(PyConfig *config, wchar_t *const *config_str, const wchar_t *str)`379380Копировать широкую строку *str* в `*config_str`.381382[Предварительно инициализировать Python](https://python-all.ru/3.10/c-api/init_config.html#c-preinit) при необходимости.383384#### `PyStatus PyConfig_SetBytesString(PyConfig *config, wchar_t *const *config_str, const char *str)`385386Декодировать *str* с помощью [`Py_DecodeLocale()`](https://python-all.ru/3.10/c-api/sys.html#c.Py_DecodeLocale) и записать результат в `*config_str`.387388[Предварительно инициализировать Python](https://python-all.ru/3.10/c-api/init_config.html#c-preinit) при необходимости.389390#### `PyStatus PyConfig_SetArgv(PyConfig *config, int argc, wchar_t *const *argv)`391392Установить аргументы командной строки (поле [`argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv) структуры *config*) из списка широких строк *argv*.393394[Предварительно инициализировать Python](https://python-all.ru/3.10/c-api/init_config.html#c-preinit) при необходимости.395396#### `PyStatus PyConfig_SetBytesArgv(PyConfig *config, int argc, char *const *argv)`397398Установить аргументы командной строки (поле [`argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv) структуры *config*) из списка байтовых строк *argv*. Декодировать байты с помощью [`Py_DecodeLocale()`](https://python-all.ru/3.10/c-api/sys.html#c.Py_DecodeLocale).399400[Предварительно инициализировать Python](https://python-all.ru/3.10/c-api/init_config.html#c-preinit) при необходимости.401402#### `PyStatus PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, Py_ssize_t length, wchar_t **items)`403404Задать список широких строк *list* с длиной *length* и элементами *items*.405406[Предварительно инициализировать Python](https://python-all.ru/3.10/c-api/init_config.html#c-preinit) при необходимости.407408#### `PyStatus PyConfig_Read(PyConfig *config)`409410Считывает всю конфигурацию Python.411412Поля, которые уже инициализированы, остаются без изменений.413414Функция [`PyConfig_Read()`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.PyConfig_Read) разбирает аргументы [`PyConfig.argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv) только один раз: [`PyConfig.parse_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.parse_argv) устанавливается в `2` после разбора аргументов. Поскольку аргументы Python удаляются из [`PyConfig.argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv), повторный разбор привёл бы к интерпретации опций приложения как опций Python.415416[Предварительно инициализировать Python](https://python-all.ru/3.10/c-api/init_config.html#c-preinit) при необходимости.417418Изменено в версии 3.10: Аргументы [`PyConfig.argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv) теперь анализируются только один раз, [`PyConfig.parse_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.parse_argv) устанавливается в `2` после анализа аргументов, и аргументы анализируются только если [`PyConfig.parse_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.parse_argv) равно `1`.419420#### `void PyConfig_Clear(PyConfig *config)`421422Освобождает память конфигурации.423424Большинство методов `PyConfig` при необходимости [преинициализируют Python](https://python-all.ru/3.10/c-api/init_config.html#c-preinit). В этом случае конфигурация преинициализации Python ([`PyPreConfig`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig)) основана на [`PyConfig`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig). Если настраиваются поля конфигурации, общие с [`PyPreConfig`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig), они должны быть заданы перед вызовом метода [`PyConfig`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig):425426- [`PyConfig.dev_mode`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.dev_mode)427- [`PyConfig.isolated`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.isolated)428- [`PyConfig.parse_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.parse_argv)429- [`PyConfig.use_environment`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.use_environment)430431Более того, если используется [`PyConfig_SetArgv()`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.PyConfig_SetArgv) или [`PyConfig_SetBytesArgv()`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.PyConfig_SetBytesArgv), этот метод должен вызываться перед другими методами, так как конфигурация предварительной инициализации зависит от аргументов командной строки (если [`parse_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.parse_argv) не равно нулю).432433Вызывающий эти методы отвечает за обработку исключений (ошибка или выход) с помощью `PyStatus_Exception()` и `Py_ExitStatusException()`.434435Поля структуры:436437#### `PyWideStringList argv`438439Аргументы командной строки: [`sys.argv`](https://python-all.ru/3.10/library/sys.html#sys.argv).440441Устанавливает [`parse_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.parse_argv) в `1` для анализа [`argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv) таким же образом, как обычный Python анализирует аргументы командной строки Python, а затем для удаления аргументов Python из [`argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv).442443Если [`argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv) пуст, добавляется пустая строка, чтобы гарантировать, что [`sys.argv`](https://python-all.ru/3.10/library/sys.html#sys.argv) всегда существует и никогда не пуст.444445По умолчанию: `NULL`.446447См. также член [`orig_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.orig_argv).448449#### `wchar_t *base_exec_prefix`450451[`sys.base_exec_prefix`](https://python-all.ru/3.10/library/sys.html#sys.base_exec_prefix).452453По умолчанию: `NULL`.454455Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.10/c-api/init_config.html#init-path-config).456457#### `wchar_t *base_executable`458459Базовый исполняемый файл Python: `sys._base_executable`.460461Устанавливается переменной окружения `__PYVENV_LAUNCHER__`.462463Устанавливается из [`PyConfig.executable`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.executable), если `NULL`.464465По умолчанию: `NULL`.466467Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.10/c-api/init_config.html#init-path-config).468469#### `wchar_t *base_prefix`470471[`sys.base_prefix`](https://python-all.ru/3.10/library/sys.html#sys.base_prefix).472473По умолчанию: `NULL`.474475Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.10/c-api/init_config.html#init-path-config).476477#### `int buffered_stdio`478479Если равно 0 и [`configure_c_stdio`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.configure_c_stdio) не равно нулю, отключить буферизацию на потоках C stdout и stderr.480481Устанавливается в 0 параметром командной строки [`-u`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-u) и переменной окружения [`PYTHONUNBUFFERED`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONUNBUFFERED).482483stdin всегда открывается в буферизированном режиме.484485По умолчанию: `1`.486487#### `int bytes_warning`488489Если значение равно 1, выдавать предупреждение при сравнении [`bytes`](https://python-all.ru/3.10/library/stdtypes.html#bytes) или [`bytearray`](https://python-all.ru/3.10/library/stdtypes.html#bytearray) с [`str`](https://python-all.ru/3.10/library/stdtypes.html#str), или при сравнении [`bytes`](https://python-all.ru/3.10/library/stdtypes.html#bytes) с [`int`](https://python-all.ru/3.10/library/functions.html#int).490491Если значение больше или равно 2, в этих случаях возбуждать исключение [`BytesWarning`](https://python-all.ru/3.10/library/exceptions.html#BytesWarning).492493Увеличивается опцией командной строки [`-b`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-b).494495По умолчанию: `0`.496497#### `int warn_default_encoding`498499Если не равно нулю, выдаётся предупреждение [`EncodingWarning`](https://python-all.ru/3.10/library/exceptions.html#EncodingWarning), когда [`io.TextIOWrapper`](https://python-all.ru/3.10/library/io.html#io.TextIOWrapper) использует свою кодировку по умолчанию. Подробнее см. [Opt-in EncodingWarning](https://python-all.ru/3.10/library/io.html#io-encoding-warning).500501По умолчанию: `0`.502503Новое в версии 3.10.504505#### `wchar_t *check_hash_pycs_mode`506507Управляет поведением проверки hash-based `.pyc` файлов: значение параметра командной строки [`--check-hash-based-pycs`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-check-hash-based-pycs).508509Допустимые значения:510511- `L"always"`: Хешировать исходный файл для инвалидации независимо от значения флага ‘check\_source’.512- `L"never"`: Считать, что хеш-основанные pyc всегда корректны.513- `L"default"`: Флаг ‘check\_source’ в хеш-основанных pyc определяет недействительность.514515По умолчанию: `L"default"`.516517См. также [**PEP 552**](https://python-all.ru/3.10/c-api/init_config.html) «Детерминированные pyc».518519#### `int configure_c_stdio`520521Если не равно нулю, настраиваются стандартные потоки C:522523- В Windows устанавливается двоичный режим (`O_BINARY`) для stdin, stdout и stderr.524- Если [`buffered_stdio`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.buffered_stdio) равно нулю, буферизация потоков stdin, stdout и stderr отключается.525- Если [`interactive`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.interactive) не равно нулю, буферизация потоков stdin и stdout включается (только stdout в Windows).526527По умолчанию: `1` в конфигурации Python, `0` в изолированной конфигурации.528529#### `int dev_mode`530531Если не равно нулю, включается [режим разработки Python](https://python-all.ru/3.10/library/devmode.html#devmode).532533По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.534535#### `int dump_refs`536537Сбрасывать ссылки Python?538539Если не равно нулю, сбрасывать все объекты, которые все еще существуют при завершении.540541Устанавливается в `1` переменной окружения [`PYTHONDUMPREFS`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONDUMPREFS).542543Требуется специальная сборка Python с определённым макросом `Py_TRACE_REFS`: см. [`configure --with-trace-refs option`](https://python-all.ru/3.10/using/configure.html#cmdoption-with-trace-refs).544545По умолчанию: `0`.546547#### `wchar_t *exec_prefix`548549Префикс каталога, специфичного для сайта, где устанавливаются платформозависимые файлы Python: [`sys.exec_prefix`](https://python-all.ru/3.10/library/sys.html#sys.exec_prefix).550551По умолчанию: `NULL`.552553Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.10/c-api/init_config.html#init-path-config).554555#### `wchar_t *executable`556557Абсолютный путь к исполняемому двоичному файлу интерпретатора Python: [`sys.executable`](https://python-all.ru/3.10/library/sys.html#sys.executable).558559По умолчанию: `NULL`.560561Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.10/c-api/init_config.html#init-path-config).562563#### `int faulthandler`564565Включить faulthandler?566567Если не равно нулю, вызывается [`faulthandler.enable()`](https://python-all.ru/3.10/library/faulthandler.html#faulthandler.enable) при запуске.568569Устанавливается в `1` с помощью [`-X faulthandler`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONFAULTHANDLER`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONFAULTHANDLER).570571По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.572573#### `wchar_t *filesystem_encoding`574575[Кодировка файловой системы](https://python-all.ru/3.10/glossary.html#term-filesystem-encoding-and-error-handler): [`sys.getfilesystemencoding()`](https://python-all.ru/3.10/library/sys.html#sys.getfilesystemencoding).576577На macOS, Android и VxWorks: по умолчанию используется `"utf-8"`.578579На Windows: по умолчанию используется `"utf-8"` или `"mbcs"`, если [`legacy_windows_fs_encoding`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig.legacy_windows_fs_encoding) параметра [`PyPreConfig`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig) не равно нулю.580581Кодировка по умолчанию на других платформах:582583- `"utf-8"`, если [`PyPreConfig.utf8_mode`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig.utf8_mode) не равно нулю.584- `"ascii"`, если Python определяет, что `nl_langinfo(CODESET)` объявляет кодировку ASCII, в то время как функция `mbstowcs()` декодирует из другой кодировки (обычно Latin1).585- `"utf-8"`, если `nl_langinfo(CODESET)` возвращает пустую строку.586- В противном случае используется [кодировка локали](https://python-all.ru/3.10/glossary.html#term-locale-encoding): результат `nl_langinfo(CODESET)`.587588При запуске Python имя кодировки нормализуется до имени кодека Python. Например, `"ANSI_X3.4-1968"` заменяется на `"ascii"`.589590См. также член [`filesystem_errors`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.filesystem_errors).591592#### `wchar_t *filesystem_errors`593594[Обработчик ошибок файловой системы](https://python-all.ru/3.10/glossary.html#term-filesystem-encoding-and-error-handler): [`sys.getfilesystemencodeerrors()`](https://python-all.ru/3.10/library/sys.html#sys.getfilesystemencodeerrors).595596На Windows: по умолчанию используется `"surrogatepass"` или `"replace"`, если [`legacy_windows_fs_encoding`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig.legacy_windows_fs_encoding) параметра [`PyPreConfig`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig) не равно нулю.597598На других платформах: по умолчанию используется `"surrogateescape"`.599600Поддерживаемые обработчики ошибок:601602- `"strict"`603- `"surrogateescape"`604- `"surrogatepass"` (поддерживается только с кодировкой UTF-8)605606См. также член [`filesystem_encoding`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.filesystem_encoding).607608#### `unsigned long hash_seed`609610#### `int use_hash_seed`611612Случайное зерно хеш-функции.613614Если [`use_hash_seed`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.use_hash_seed) равен нулю, начальное значение (seed) выбирается случайным образом при запуске Python, а [`hash_seed`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.hash_seed) игнорируется.615616Устанавливается переменной окружения [`PYTHONHASHSEED`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONHASHSEED).617618Значение *use\_hash\_seed* по умолчанию: `-1` в режиме Python, `0` в изолированном режиме.619620#### `wchar_t *home`621622Домашний каталог Python.623624Если [`Py_SetPythonHome()`](https://python-all.ru/3.10/c-api/init.html#c.Py_SetPythonHome) была вызвана, используйте её аргумент, если он не равен `NULL`.625626Устанавливается переменной окружения [`PYTHONHOME`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONHOME).627628По умолчанию: `NULL`.629630Часть входных данных [конфигурации путей Python](https://python-all.ru/3.10/c-api/init_config.html#init-path-config).631632#### `int import_time`633634Если не ноль, профилировать время импорта.635636Значение `1` задаётся опцией [`-X importtime`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONPROFILEIMPORTTIME`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONPROFILEIMPORTTIME).637638По умолчанию: `0`.639640#### `int inspect`641642Войти в интерактивный режим после выполнения скрипта или команды.643644Если значение больше 0, включить инспекцию: если скрипт передан в качестве первого аргумента или используется опция -c, после выполнения скрипта или команды перейти в интерактивный режим, даже если [`sys.stdin`](https://python-all.ru/3.10/library/sys.html#sys.stdin) не выглядит как терминал.645646Увеличивается опцией командной строки [`-i`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-i). Устанавливается в `1`, если переменная окружения [`PYTHONINSPECT`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONINSPECT) не пуста.647648По умолчанию: `0`.649650#### `int install_signal_handlers`651652Устанавливать обработчики сигналов Python?653654По умолчанию: `1` в режиме Python, `0` в изолированном режиме.655656#### `int interactive`657658Если значение больше 0, включить интерактивный режим (REPL).659660Увеличивается опцией командной строки [`-i`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-i).661662По умолчанию: `0`.663664#### `int isolated`665666Если значение больше 0, включить изолированный режим:667668- [`sys.path`](https://python-all.ru/3.10/library/sys.html#sys.path) не содержит ни каталог скрипта (вычисленный из `argv[0]` или текущего каталога), ни каталог site-packages пользователя.669- REPL Python не импортирует [`readline`](https://python-all.ru/3.10/library/readline.html#module-readline) и не включает стандартную конфигурацию readline в интерактивных приглашениях.670- Установить [`use_environment`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.use_environment) и [`user_site_directory`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.user_site_directory) в 0.671672По умолчанию: `0` в режиме Python, `1` в изолированном режиме.673674См. также [`PyPreConfig.isolated`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig.isolated).675676#### `int legacy_windows_stdio`677678Если не ноль, использовать [`io.FileIO`](https://python-all.ru/3.10/library/io.html#io.FileIO) вместо `io.WindowsConsoleIO` для [`sys.stdin`](https://python-all.ru/3.10/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.10/library/sys.html#sys.stdout) и [`sys.stderr`](https://python-all.ru/3.10/library/sys.html#sys.stderr).679680Устанавливается в `1`, если переменная окружения [`PYTHONLEGACYWINDOWSSTDIO`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONLEGACYWINDOWSSTDIO) установлена в непустую строку.681682Доступно только в Windows. Макрос `#ifdef MS_WINDOWS` можно использовать для кода, зависящего от Windows.683684По умолчанию: `0`.685686См. также [**PEP 528**](https://python-all.ru/3.10/c-api/init_config.html) (Изменение кодировки консоли Windows на UTF-8).687688#### `int malloc_stats`689690Если не ноль, вывести статистику по [аллокатору памяти Python pymalloc](https://python-all.ru/3.10/c-api/memory.html#pymalloc) при завершении.691692Устанавливается в `1` переменной окружения [`PYTHONMALLOCSTATS`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONMALLOCSTATS).693694Параметр игнорируется, если Python [`configured using the --without-pymalloc option`](https://python-all.ru/3.10/using/configure.html#cmdoption-without-pymalloc).695696По умолчанию: `0`.697698#### `wchar_t *platlibdir`699700Имя каталога библиотек платформы: [`sys.platlibdir`](https://python-all.ru/3.10/library/sys.html#sys.platlibdir).701702Устанавливается переменной окружения [`PYTHONPLATLIBDIR`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONPLATLIBDIR).703704По умолчанию: значение макроса `PLATLIBDIR`, который задаётся [`configure --with-platlibdir option`](https://python-all.ru/3.10/using/configure.html#cmdoption-with-platlibdir) (по умолчанию: `"lib"`).705706Часть входных данных [конфигурации путей Python](https://python-all.ru/3.10/c-api/init_config.html#init-path-config).707708Новое в версии 3.9.709710#### `wchar_t *pythonpath_env`711712Пути поиска модулей ([`sys.path`](https://python-all.ru/3.10/library/sys.html#sys.path)) в виде строки, разделённой `DELIM` (`os.path.pathsep`).713714Устанавливается переменной окружения [`PYTHONPATH`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONPATH).715716По умолчанию: `NULL`.717718Часть входных данных [конфигурации путей Python](https://python-all.ru/3.10/c-api/init_config.html#init-path-config).719720#### `PyWideStringList module_search_paths`721722#### `int module_search_paths_set`723724Пути поиска модулей: [`sys.path`](https://python-all.ru/3.10/library/sys.html#sys.path).725726Если [`module_search_paths_set`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.module_search_paths_set) равно 0, функция, вычисляющая [конфигурацию путей Python](https://python-all.ru/3.10/c-api/init_config.html#init-path-config), переопределяет [`module_search_paths`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.module_search_paths) и устанавливает [`module_search_paths_set`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.module_search_paths_set) в `1`.727728По умолчанию: пустой список (`module_search_paths`) и `0` (`module_search_paths_set`).729730Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.10/c-api/init_config.html#init-path-config).731732#### `int optimization_level`733734Уровень оптимизации компиляции:735736- `0`: Оптимизатор Peephole, устанавливает `__debug__` в `True`.737- `1`: Уровень 0, удаляет утверждения, устанавливает `__debug__` в `False`.738- `2`: Уровень 1, удаляет строки документации.739740Увеличивается опцией командной строки [`-O`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-O). Устанавливается в значение переменной окружения [`PYTHONOPTIMIZE`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONOPTIMIZE).741742По умолчанию: `0`.743744#### `PyWideStringList orig_argv`745746Список исходных аргументов командной строки, переданных исполняемому файлу Python: [`sys.orig_argv`](https://python-all.ru/3.10/library/sys.html#sys.orig_argv).747748Если список [`orig_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.orig_argv) пуст, а [`argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv) не является списком, содержащим только пустую строку, то [`PyConfig_Read()`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.PyConfig_Read) копирует [`argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv) в [`orig_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.orig_argv) перед изменением [`argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv) (если [`parse_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.parse_argv) не равно нулю).749750См. также элемент [`argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv) и функцию [`Py_GetArgcArgv()`](https://python-all.ru/3.10/c-api/init_config.html#c.Py_GetArgcArgv).751752По умолчанию: пустой список.753754Новое в версии 3.10.755756#### `int parse_argv`757758Разбирать аргументы командной строки?759760Если равно `1`, разбирать [`argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv) так же, как обычный Python разбирает [аргументы командной строки](https://python-all.ru/3.10/using/cmdline.html#using-on-cmdline), и удалять аргументы Python из [`argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv).761762Функция [`PyConfig_Read()`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.PyConfig_Read) разбирает аргументы [`PyConfig.argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv) только один раз: [`PyConfig.parse_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.parse_argv) устанавливается в `2` после разбора аргументов. Поскольку аргументы Python удаляются из [`PyConfig.argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv), повторный разбор привёл бы к интерпретации опций приложения как опций Python.763764По умолчанию: `1` в режиме Python, `0` в изолированном режиме.765766Изменено в версии 3.10: Аргументы [`PyConfig.argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv) теперь разбираются только если [`PyConfig.parse_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.parse_argv) равно `1`.767768#### `int parser_debug`769770Режим отладки парсера. Если больше 0, включает вывод отладочной информации парсера (только для экспертов, зависит от опций компиляции).771772Увеличивается опцией командной строки [`-d`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-d). Устанавливается в значение переменной окружения [`PYTHONDEBUG`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONDEBUG).773774По умолчанию: `0`.775776#### `int pathconfig_warnings`777778В Unix, если не равно нулю, вычисление [конфигурации путей Python](https://python-all.ru/3.10/c-api/init_config.html#init-path-config) может записывать предупреждения в `stderr`. Если равно 0, подавлять эти предупреждения.779780Не оказывает эффекта на Windows.781782По умолчанию: `1` в режиме Python, `0` в изолированном режиме.783784Часть входных данных [конфигурации путей Python](https://python-all.ru/3.10/c-api/init_config.html#init-path-config).785786#### `wchar_t *prefix`787788Префикс каталога, специфичный для сайта, в который устанавливаются платформонезависимые файлы Python: [`sys.prefix`](https://python-all.ru/3.10/library/sys.html#sys.prefix).789790По умолчанию: `NULL`.791792Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.10/c-api/init_config.html#init-path-config).793794#### `wchar_t *program_name`795796Имя программы, используемое для инициализации [`executable`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.executable) и в ранних сообщениях об ошибках во время инициализации Python.797798- Если `Py_SetProgramName()` был вызван, используется его аргумент.799- На macOS используется переменная окружения [`PYTHONEXECUTABLE`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONEXECUTABLE), если она установлена.800- Если определён макрос `WITH_NEXT_FRAMEWORK`, используется переменная окружения `__PYVENV_LAUNCHER__`, если она установлена.801- Используется `argv[0]` из [`argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv), если она доступна и непустая.802- В противном случае используется `L"python"` на Windows или `L"python3"` на других платформах.803804По умолчанию: `NULL`.805806Часть входных данных [конфигурации путей Python](https://python-all.ru/3.10/c-api/init_config.html#init-path-config).807808#### `wchar_t *pycache_prefix`809810Каталог, в который записываются кэшированные файлы `.pyc`: [`sys.pycache_prefix`](https://python-all.ru/3.10/library/sys.html#sys.pycache_prefix).811812Устанавливается [`-X pycache_prefix=PATH`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-X) опцией командной строки и переменной окружения [`PYTHONPYCACHEPREFIX`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONPYCACHEPREFIX).813814Если `NULL`, [`sys.pycache_prefix`](https://python-all.ru/3.10/library/sys.html#sys.pycache_prefix) устанавливается в `None`.815816По умолчанию: `NULL`.817818#### `int quiet`819820Тихий режим. Если больше 0, не отображать информацию об авторских правах и версии при запуске Python в интерактивном режиме.821822Увеличивается опцией командной строки [`-q`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-q).823824По умолчанию: `0`.825826#### `wchar_t *run_command`827828Значение параметра командной строки [`-c`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-c).829830Используется [`Py_RunMain()`](https://python-all.ru/3.10/c-api/init_config.html#c.Py_RunMain).831832По умолчанию: `NULL`.833834#### `wchar_t *run_filename`835836Имя файла, переданное в командной строке: последний аргумент командной строки без [`-c`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-c) или [`-m`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-m).837838Например, устанавливается в `script.py` командой `python3 script.py arg`.839840Используется [`Py_RunMain()`](https://python-all.ru/3.10/c-api/init_config.html#c.Py_RunMain).841842По умолчанию: `NULL`.843844#### `wchar_t *run_module`845846Значение параметра командной строки [`-m`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-m).847848Используется [`Py_RunMain()`](https://python-all.ru/3.10/c-api/init_config.html#c.Py_RunMain).849850По умолчанию: `NULL`.851852#### `int show_ref_count`853854Показывать общее количество ссылок при завершении?855856Устанавливается в 1 опцией командной строки [`-X showrefcount`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-X).857858Требуется [отладочная сборка Python](https://python-all.ru/3.10/using/configure.html#debug-build) (макрос `Py_REF_DEBUG` должен быть определён).859860По умолчанию: `0`.861862#### `int site_import`863864Импортировать модуль [`site`](https://python-all.ru/3.10/library/site.html#module-site) при запуске?865866Если равно нулю, импорт модуля site и зависящие от site манипуляции с [`sys.path`](https://python-all.ru/3.10/library/sys.html#sys.path) отключаются.867868Также отключает эти манипуляции, если модуль [`site`](https://python-all.ru/3.10/library/site.html#module-site) импортирован явно (вызовите [`site.main()`](https://python-all.ru/3.10/library/site.html#site.main), чтобы включить их).869870Устанавливается в `0` параметром командной строки [`-S`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-S).871872`sys.flags.no_site` устанавливается в инвертированное значение [`site_import`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.site_import).873874По умолчанию: `1`.875876#### `int skip_source_first_line`877878Если не ноль, пропустить первую строку исходного кода [`PyConfig.run_filename`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.run_filename).879880Это позволяет использовать не-Unix формы `#!cmd`. Предназначено только для DOS-специфичного хака.881882Устанавливается в `1` параметром командной строки [`-x`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-x).883884По умолчанию: `0`.885886#### `wchar_t *stdio_encoding`887888#### `wchar_t *stdio_errors`889890Кодировка и ошибки кодирования для [`sys.stdin`](https://python-all.ru/3.10/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.10/library/sys.html#sys.stdout) и [`sys.stderr`](https://python-all.ru/3.10/library/sys.html#sys.stderr) (но [`sys.stderr`](https://python-all.ru/3.10/library/sys.html#sys.stderr) всегда использует обработчик ошибок `"backslashreplace"`).891892Если [`Py_SetStandardStreamEncoding()`](https://python-all.ru/3.10/c-api/init.html#c.Py_SetStandardStreamEncoding) была вызвана, используются её аргументы *error* и *errors*, если они не `NULL`.893894Использовать переменную окружения [`PYTHONIOENCODING`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONIOENCODING), если она не пуста.895896Кодировка по умолчанию:897898- `"UTF-8"`, если [`PyPreConfig.utf8_mode`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig.utf8_mode) не равно нулю.899- В противном случае используется [кодировка локали](https://python-all.ru/3.10/glossary.html#term-locale-encoding).900901Обработчик ошибок по умолчанию:902903- В Windows: используется `"surrogateescape"`.904- `"surrogateescape"`, если [`PyPreConfig.utf8_mode`](https://python-all.ru/3.10/c-api/init_config.html#c.PyPreConfig.utf8_mode) не равно нулю, или если локаль LC\_CTYPE имеет значение «C» или «POSIX».905- `"strict"` в противном случае.906907#### `int tracemalloc`908909Включить tracemalloc?910911Если не равно нулю, вызывается [`tracemalloc.start()`](https://python-all.ru/3.10/library/tracemalloc.html#tracemalloc.start) при запуске.912913Устанавливается параметром командной строки [`-X tracemalloc=N`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONTRACEMALLOC`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONTRACEMALLOC).914915По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.916917#### `int use_environment`918919Использовать [переменные окружения](https://python-all.ru/3.10/using/cmdline.html#using-on-envvars)?920921Если равно нулю, игнорируются [переменные окружения](https://python-all.ru/3.10/using/cmdline.html#using-on-envvars).922923По умолчанию: `1` в конфигурации Python и `0` в изолированной конфигурации.924925#### `int user_site_directory`926927Если не равно нулю, в [`sys.path`](https://python-all.ru/3.10/library/sys.html#sys.path) добавляется каталог пользовательского site.928929Устанавливается в `0` с помощью опций командной строки [`-s`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-s) и [`-I`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-I).930931Устанавливается в `0` переменной окружения [`PYTHONNOUSERSITE`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONNOUSERSITE).932933По умолчанию: `1` в режиме Python, `0` в изолированном режиме.934935#### `int verbose`936937Подробный режим. Если больше 0, выводить сообщение каждый раз при импорте модуля, показывая источник (имя файла или встроенный модуль), из которого он загружается.938939Если больше или равно 2, выводить сообщение для каждого проверяемого файла при поиске модуля. Также предоставляет информацию об очистке модулей при завершении.940941Увеличивается опцией командной строки [`-v`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-1).942943Устанавливается в значение переменной окружения [`PYTHONVERBOSE`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONVERBOSE).944945По умолчанию: `0`.946947#### `PyWideStringList warnoptions`948949Опции модуля [`warnings`](https://python-all.ru/3.10/library/warnings.html#module-warnings) для построения фильтров предупреждений, от низшего к высшему приоритету: [`sys.warnoptions`](https://python-all.ru/3.10/library/sys.html#sys.warnoptions).950951Модуль [`warnings`](https://python-all.ru/3.10/library/warnings.html#module-warnings) добавляет [`sys.warnoptions`](https://python-all.ru/3.10/library/sys.html#sys.warnoptions) в обратном порядке: последний элемент [`PyConfig.warnoptions`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.warnoptions) становится первым элементом `warnings.filters`, который проверяется первым (наивысший приоритет).952953Опция командной строки [`-W`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-W) добавляет своё значение в [`warnoptions`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.warnoptions); её можно использовать несколько раз.954955Переменная окружения [`PYTHONWARNINGS`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONWARNINGS) также может использоваться для добавления опций предупреждений. Можно указать несколько опций, разделённых запятыми (`,`).956957По умолчанию: пустой список.958959#### `int write_bytecode`960961Если равно 0, Python не будет пытаться записывать файлы `.pyc` при импорте исходных модулей.962963Устанавливается в `0` опцией командной строки [`-B`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-B) и переменной окружения [`PYTHONDONTWRITEBYTECODE`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONDONTWRITEBYTECODE).964965[`sys.dont_write_bytecode`](https://python-all.ru/3.10/library/sys.html#sys.dont_write_bytecode) инициализируется инвертированным значением [`write_bytecode`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.write_bytecode).966967По умолчанию: `1`.968969#### `PyWideStringList xoptions`970971Значения опций командной строки [`-X`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-X): [`sys._xoptions`](https://python-all.ru/3.10/library/sys.html#sys._xoptions).972973По умолчанию: пустой список.974975Если [`parse_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.parse_argv) не равно нулю, аргументы [`argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv) разбираются так же, как обычный Python разбирает [аргументы командной строки](https://python-all.ru/3.10/using/cmdline.html#using-on-cmdline), а аргументы Python удаляются из [`argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv).976977Параметры [`xoptions`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.xoptions) разбираются для установки других опций: см. опцию командной строки [`-X`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-X).978979Изменено в версии 3.9: Поле `show_alloc_count` было удалено.980981## Инициализация с PyConfig982983Функция для инициализации Python:984985#### `PyStatus Py_InitializeFromConfig(const PyConfig *config)`986987Инициализирует Python из конфигурации *config*.988989Вызывающий код отвечает за обработку исключений (ошибка или выход) с помощью `PyStatus_Exception()` и `Py_ExitStatusException()`.990991Если используются [`PyImport_FrozenModules()`](https://python-all.ru/3.10/c-api/import.html#c.PyImport_FrozenModules), [`PyImport_AppendInittab()`](https://python-all.ru/3.10/c-api/import.html#c.PyImport_AppendInittab) или [`PyImport_ExtendInittab()`](https://python-all.ru/3.10/c-api/import.html#c.PyImport_ExtendInittab), они должны быть установлены или вызваны после предварительной инициализации Python и до инициализации Python. Если Python инициализируется несколько раз, [`PyImport_AppendInittab()`](https://python-all.ru/3.10/c-api/import.html#c.PyImport_AppendInittab) или [`PyImport_ExtendInittab()`](https://python-all.ru/3.10/c-api/import.html#c.PyImport_ExtendInittab) должны вызываться перед каждой инициализацией Python.992993Текущая конфигурация (тип `PyConfig`) хранится в `PyInterpreterState.config`.994995Пример установки имени программы:996997```c998void init_python(void)999{1000 PyStatus status;10011002 PyConfig config;1003 PyConfig_InitPythonConfig(&config);10041005 /* Установить имя программы. Неявно предварительно инициализировать Python. */1006 status = PyConfig_SetString(&config, &config.program_name,1007 L"/path/to/my_program");1008 if (PyStatus_Exception(status)) {1009 goto exception;1010 }10111012 status = Py_InitializeFromConfig(&config);1013 if (PyStatus_Exception(status)) {1014 goto exception;1015 }1016 PyConfig_Clear(&config);1017 return;10181019exception:1020 PyConfig_Clear(&config);1021 Py_ExitStatusException(status);1022}1023```10241025Более полный пример изменения конфигурации по умолчанию: чтение конфигурации и последующее переопределение некоторых параметров:10261027```c1028PyStatus init_python(const char *program_name)1029{1030 PyStatus status;10311032 PyConfig config;1033 PyConfig_InitPythonConfig(&config);10341035 /* Установить имя программы перед чтением конфигурации1036 (декодировать байтовую строку из кодировки локали).10371038 Неявно предварительно инициализировать Python. */1039 status = PyConfig_SetBytesString(&config, &config.program_name,1040 program_name);1041 if (PyStatus_Exception(status)) {1042 goto done;1043 }10441045 /* Прочитать всю конфигурацию сразу */1046 status = PyConfig_Read(&config);1047 if (PyStatus_Exception(status)) {1048 goto done;1049 }10501051 /* Добавляет пользовательский путь поиска в sys.path */1052 status = PyWideStringList_Append(&config.module_search_paths,1053 L"/path/to/more/modules");1054 if (PyStatus_Exception(status)) {1055 goto done;1056 }10571058 /* Переопределить исполняемый файл, вычисленный PyConfig_Read() */1059 status = PyConfig_SetString(&config, &config.executable,1060 L"/path/to/my_executable");1061 if (PyStatus_Exception(status)) {1062 goto done;1063 }10641065 status = Py_InitializeFromConfig(&config);10661067done:1068 PyConfig_Clear(&config);1069 return status;1070}1071```10721073## Изолированная конфигурация10741075Функции `PyPreConfig_InitIsolatedConfig()` и `PyConfig_InitIsolatedConfig()` создают конфигурацию для изоляции Python от системы. Например, для встраивания Python в приложение.10761077Эта конфигурация игнорирует глобальные переменные конфигурации, переменные окружения, аргументы командной строки ([`PyConfig.argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.argv) не разбирается) и каталог пользовательских сайтов. Стандартные потоки C (например: `stdout`) и локаль LC\_CTYPE остаются без изменений. Обработчики сигналов не устанавливаются.10781079Файлы конфигурации по-прежнему используются с этой конфигурацией. Установите [Python Path Configuration](https://python-all.ru/3.10/c-api/init_config.html#init-path-config) («выходные поля»), чтобы игнорировать эти файлы конфигурации и избежать вычисления функцией пути конфигурации по умолчанию.10801081## Конфигурация Python10821083Функции `PyPreConfig_InitPythonConfig()` и `PyConfig_InitPythonConfig()` создают конфигурацию для сборки настраиваемого Python, который ведёт себя как обычный Python.10841085Переменные окружения и аргументы командной строки используются для настройки Python, тогда как глобальные переменные конфигурации игнорируются.10861087Эта функция включает принудительное использование локали C ([**PEP 538**](https://python-all.ru/3.10/c-api/init_config.html)) и [Режим Python UTF-8](https://python-all.ru/3.10/library/os.html#utf8-mode) ([**PEP 540**](https://python-all.ru/3.10/c-api/init_config.html)) в зависимости от локали LC\_CTYPE, переменных окружения [`PYTHONUTF8`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONUTF8) и [`PYTHONCOERCECLOCALE`](https://python-all.ru/3.10/using/cmdline.html#envvar-PYTHONCOERCECLOCALE).10881089## Конфигурация путей Python10901091[`PyConfig`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig) содержит несколько полей для конфигурации путей:10921093- Входные данные конфигурации путей:10941095 - [`PyConfig.home`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.home)1096 - [`PyConfig.platlibdir`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.platlibdir)1097 - [`PyConfig.pathconfig_warnings`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.pathconfig_warnings)1098 - [`PyConfig.program_name`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.program_name)1099 - [`PyConfig.pythonpath_env`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.pythonpath_env)1100 - текущий рабочий каталог: для получения абсолютных путей1101 - переменная окружения `PATH` для получения полного пути программы (из [`PyConfig.program_name`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.program_name))1102 - переменная окружения `__PYVENV_LAUNCHER__`1103 - (только Windows) Пути приложений в реестре в разделе “SoftwarePythonPythonCoreX.YPythonPath” для HKEY\_CURRENT\_USER и HKEY\_LOCAL\_MACHINE (где X.Y – версия Python).1104- Выходные поля конфигурации путей:11051106 - [`PyConfig.base_exec_prefix`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.base_exec_prefix)1107 - [`PyConfig.base_executable`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.base_executable)1108 - [`PyConfig.base_prefix`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.base_prefix)1109 - [`PyConfig.exec_prefix`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.exec_prefix)1110 - [`PyConfig.executable`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.executable)1111 - [`PyConfig.module_search_paths_set`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.module_search_paths_set), [`PyConfig.module_search_paths`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.module_search_paths)1112 - [`PyConfig.prefix`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.prefix)11131114Если хотя бы одно «выходное поле» не установлено, Python вычисляет конфигурацию пути, чтобы заполнить неустановленные поля. Если [`module_search_paths_set`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.module_search_paths_set) равно 0, [`module_search_paths`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.module_search_paths) переопределяется и [`module_search_paths_set`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.module_search_paths_set) устанавливается в 1.11151116Можно полностью игнорировать функцию вычисления конфигурации пути по умолчанию, явно задав все перечисленные выше выходные поля конфигурации пути. Строка считается установленной, даже если она непуста. `module_search_paths` считается установленным, если `module_search_paths_set` установлено в 1. В этом случае входные поля конфигурации пути также игнорируются.11171118Установите [`pathconfig_warnings`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.pathconfig_warnings) в 0, чтобы подавить предупреждения при вычислении конфигурации пути (только Unix; Windows не выводит предупреждения).11191120Если поля [`base_prefix`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.base_prefix) или [`base_exec_prefix`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.base_exec_prefix) не заданы, они наследуют свои значения от [`prefix`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.prefix) и [`exec_prefix`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.exec_prefix) соответственно.11211122[`Py_RunMain()`](https://python-all.ru/3.10/c-api/init_config.html#c.Py_RunMain) и [`Py_Main()`](https://python-all.ru/3.10/c-api/veryhigh.html#c.Py_Main) изменяют [`sys.path`](https://python-all.ru/3.10/library/sys.html#sys.path):11231124- Если [`run_filename`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.run_filename) задано и является каталогом, содержащим скрипт `__main__.py`, добавьте [`run_filename`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.run_filename) в начало [`sys.path`](https://python-all.ru/3.10/library/sys.html#sys.path).1125- Если [`isolated`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.isolated) равно нулю:11261127 - Если [`run_module`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.run_module) задан, добавьте текущий каталог в начало [`sys.path`](https://python-all.ru/3.10/library/sys.html#sys.path). Ничего не делайте, если текущий каталог не может быть прочитан.1128 - Если [`run_filename`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.run_filename) задан, добавьте каталог файла в начало [`sys.path`](https://python-all.ru/3.10/library/sys.html#sys.path).1129 - В противном случае пустая строка добавляется в начало [`sys.path`](https://python-all.ru/3.10/library/sys.html#sys.path).11301131Если [`site_import`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.site_import) не равно нулю, то [`sys.path`](https://python-all.ru/3.10/library/sys.html#sys.path) может быть изменён модулем [`site`](https://python-all.ru/3.10/library/site.html#module-site). Если [`user_site_directory`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.user_site_directory) не равно нулю и каталог пакетов сайта пользователя существует, модуль [`site`](https://python-all.ru/3.10/library/site.html#module-site) добавляет каталог пакетов сайта пользователя в [`sys.path`](https://python-all.ru/3.10/library/sys.html#sys.path).11321133При конфигурации путей используются следующие файлы конфигурации:11341135- `pyvenv.cfg`1136- `python._pth` (только Windows)1137- `pybuilddir.txt` (только Unix)11381139Переменная окружения `__PYVENV_LAUNCHER__` используется для установки [`PyConfig.base_executable`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.base_executable).11401141## Py\_RunMain()11421143#### `int Py_RunMain(void)`11441145Выполняет команду ([`PyConfig.run_command`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.run_command)), скрипт ([`PyConfig.run_filename`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.run_filename)) или модуль ([`PyConfig.run_module`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.run_module)), указанные в командной строке или в конфигурации.11461147По умолчанию, а также при использовании опции [`-i`](https://python-all.ru/3.10/using/cmdline.html#cmdoption-i), запускается REPL.11481149Наконец, завершает работу Python и возвращает код завершения, который можно передать функции `exit()`.11501151См. [Python Configuration](https://python-all.ru/3.10/c-api/init_config.html#init-python-config) для примера настройки Python для постоянной работы в изолированном режиме с помощью [`Py_RunMain()`](https://python-all.ru/3.10/c-api/init_config.html#c.Py_RunMain).11521153## Py\_GetArgcArgv()11541155#### `void Py_GetArgcArgv(int *argc, wchar_t ***argv)`11561157Возвращает исходные аргументы командной строки до того, как Python их изменил.11581159См. также элемент [`PyConfig.orig_argv`](https://python-all.ru/3.10/c-api/init_config.html#c.PyConfig.orig_argv).11601161## Многофазная инициализация (частный временный API)11621163Данный раздел представляет собой частный временный API, вводящий многофазную инициализацию – ключевую возможность [**PEP 432**](https://python-all.ru/3.10/c-api/init_config.html):11641165- Фаза «базовой» инициализации, «минимальный Python»:11661167 - Встроенные типы;1168 - Встроенные исключения;1169 - Встроенные и замороженные модули;1170 - Модуль [`sys`](https://python-all.ru/3.10/library/sys.html#module-sys) инициализирован лишь частично (например, [`sys.path`](https://python-all.ru/3.10/library/sys.html#sys.path) ещё не существует).1171- Фаза «основной» инициализации, Python полностью инициализирован:11721173 - Устанавливает и настраивает [`importlib`](https://python-all.ru/3.10/library/importlib.html#module-importlib);1174 - Применяет [конфигурацию путей](https://python-all.ru/3.10/c-api/init_config.html#init-path-config);1175 - Устанавливает обработчики сигналов;1176 - Завершает инициализацию модуля [`sys`](https://python-all.ru/3.10/library/sys.html#module-sys) (например, создаёт [`sys.stdout`](https://python-all.ru/3.10/library/sys.html#sys.stdout) и [`sys.path`](https://python-all.ru/3.10/library/sys.html#sys.path));1177 - Включает опциональные возможности, такие как [`faulthandler`](https://python-all.ru/3.10/library/faulthandler.html#module-faulthandler) и [`tracemalloc`](https://python-all.ru/3.10/library/tracemalloc.html#module-tracemalloc);1178 - Импортировать модуль [`site`](https://python-all.ru/3.10/library/site.html#module-site);1179 - и т. д.11801181Частный временный API:11821183- `PyConfig._init_main`: если установлено в 0, [`Py_InitializeFromConfig()`](https://python-all.ru/3.10/c-api/init_config.html#c.Py_InitializeFromConfig) останавливается на фазе инициализации «Core».1184- `PyConfig._isolated_interpreter`: если не равно нулю, запретить потоки, подпроцессы и fork.11851186#### `PyStatus _Py_InitializeMain(void)`11871188Переход к фазе инициализации «Main», завершение инициализации Python.11891190Во время фазы «Core» не импортируется ни один модуль, а модуль `importlib` не настроен: [Path Configuration](https://python-all.ru/3.10/c-api/init_config.html#init-path-config) применяется только во время фазы «Main». Это может позволить настраивать Python из Python, чтобы переопределить или настроить [Path Configuration](https://python-all.ru/3.10/c-api/init_config.html#init-path-config), возможно, установить пользовательский импортёр [`sys.meta_path`](https://python-all.ru/3.10/library/sys.html#sys.meta_path) или хук импорта и т. д.11911192Возможно, станет возможным вычислять [конфигурацию путей](https://python-all.ru/3.10/c-api/init_config.html#init-path-config) в Python после этапа Core и до этапа Main, что является одной из мотиваций [**PEP 432**](https://python-all.ru/3.10/c-api/init_config.html).11931194Фаза «Core» не определена должным образом: что должно и что не должно быть доступно на этой фазе, пока не указано. API помечен как частный и временный: API может быть изменён или даже удалён в любое время, пока не будет спроектирован надлежащий публичный API.11951196Пример выполнения кода Python между фазами инициализации «Core» и «Main»:11971198```c1199void init_python(void)1200{1201 PyStatus status;12021203 PyConfig config;1204 PyConfig_InitPythonConfig(&config);1205 config._init_main = 0;12061207 /* настроить конфигурацию 'config' */12081209 status = Py_InitializeFromConfig(&config);1210 PyConfig_Clear(&config);1211 if (PyStatus_Exception(status)) {1212 Py_ExitStatusException(status);1213 }12141215 /* ... разместить здесь дополнительный код конфигурации ...1216 вызывается _Py_InitializeMain() */1217 int res = PyRun_SimpleString(1218 "import sys; "1219 "print('Run Python code before _Py_InitializeMain', "1220 "file=sys.stderr)");1221 if (res < 0) {1222 exit(1);1223 }12241225 /* ... добавьте сюда дополнительный код конфигурации ... */12261227 status = _Py_InitializeMain();1228 if (PyStatus_Exception(status)) {1229 Py_ExitStatusException(status);1230 }1231}1232```1233