init_config.md
1> **Источник:** https://python-all.ru/3.11/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.11/c-api/init_config.html#c.Py_InitializeFromConfig) и структуры [`PyConfig`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig). Он может быть предварительно инициализирован с помощью [`Py_PreInitialize()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_PreInitialize) и структуры [`PyPreConfig`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig).1213Существует два вида конфигурации:1415- [Конфигурация Python](https://python-all.ru/3.11/c-api/init_config.html#init-python-config) может использоваться для создания настраиваемого Python, который ведёт себя как обычный Python. Например, переменные окружения и аргументы командной строки используются для настройки Python.16- [Изолированная конфигурация](https://python-all.ru/3.11/c-api/init_config.html#init-isolated-conf) может использоваться для встраивания Python в приложение. Она изолирует Python от системы. Например, переменные окружения игнорируются, локаль LC\_CTYPE остаётся неизменной и не регистрируется ни один обработчик сигналов.1718Функция [`Py_RunMain()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_RunMain) может использоваться для написания настраиваемой программы на Python.1920См. также [Инициализация, финализация и потоки](https://python-all.ru/3.11/c-api/init.html#initialization).2122> **См. также**23>24> [**PEP 587**](https://python-all.ru/3.11/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.11/c-api/init_config.html#c.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.11/c-api/init_config.html#init-python-config).200201#### `void PyPreConfig_InitIsolatedConfig(PyPreConfig *preconfig)`202203Инициализировать предварительную конфигурацию с [Изолированной конфигурацией](https://python-all.ru/3.11/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.11/c-api/memory.html#default-memory-allocators).213- `PYMEM_ALLOCATOR_DEBUG` (`2`): [стандартные распределители памяти](https://python-all.ru/3.11/c-api/memory.html#default-memory-allocators) с [отладочными перехватчиками](https://python-all.ru/3.11/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.11/c-api/memory.html#pymem-debug-hooks).216- `PYMEM_ALLOCATOR_PYMALLOC` (`5`): [распределитель памяти pymalloc из Python](https://python-all.ru/3.11/c-api/memory.html#pymalloc).217- `PYMEM_ALLOCATOR_PYMALLOC_DEBUG` (`6`): [распределитель памяти pymalloc из Python](https://python-all.ru/3.11/c-api/memory.html#pymalloc) с [отладочными перехватчиками](https://python-all.ru/3.11/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.11/using/configure.html#cmdoption-without-pymalloc).220221См. [Управление памятью](https://python-all.ru/3.11/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.11/c-api/init_config.html#c.PyPreConfig.coerce_c_locale) и [`coerce_c_locale_warn`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig.coerce_c_locale_warn) в `0`.230231См. [кодировку локали](https://python-all.ru/3.11/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.11/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.11/library/devmode.html#devmode): см. [`PyConfig.dev_mode`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.dev_mode).254255По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.256257#### `int isolated`258259Изолированный режим: см. [`PyConfig.isolated`](https://python-all.ru/3.11/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.11/c-api/init_config.html#c.PyPreConfig.utf8_mode) в `0`,268- Устанавливает [`PyConfig.filesystem_encoding`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.filesystem_encoding) в `"mbcs"`,269- Устанавливает [`PyConfig.filesystem_errors`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.filesystem_errors) в `"replace"`.270271Инициализировано из значения переменной окружения [`PYTHONLEGACYWINDOWSFSENCODING`](https://python-all.ru/3.11/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.11/c-api/init_config.html#c.Py_PreInitializeFromArgs) и [`Py_PreInitializeFromBytesArgs()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_PreInitializeFromBytesArgs) обрабатывают свой аргумент `argv` так же, как обычный Python обрабатывает аргументы командной строки: см. [Аргументы командной строки](https://python-all.ru/3.11/using/cmdline.html#using-on-cmdline).280281По умолчанию: `1` в конфигурации Python, `0` в изолированной конфигурации.282283#### `int use_environment`284285Использовать [переменные окружения](https://python-all.ru/3.11/using/cmdline.html#using-on-envvars)? См. [`PyConfig.use_environment`](https://python-all.ru/3.11/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.11/library/os.html#utf8-mode).292293Устанавливается в `0` или `1` опцией командной строки [`-X utf8`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONUTF8`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONUTF8).294295Также устанавливается в `1`, если локаль `LC_CTYPE` равна `C` или `POSIX`.296297По умолчанию: `-1` в конфигурации Python и `0` в изолированной конфигурации.298299## Предварительная инициализация Python с PyPreConfig300301Предварительная инициализация Python:302303- Устанавливает распределители памяти Python ([`PyPreConfig.allocator`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig.allocator))304- Настраивает локаль LC\_CTYPE ([кодировка локали](https://python-all.ru/3.11/glossary.html#term-locale-encoding))305- Устанавливает [Режим UTF-8 Python](https://python-all.ru/3.11/library/os.html#utf8-mode) ([`PyPreConfig.utf8_mode`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig.utf8_mode))306307Текущая предварительная конфигурация (тип `PyPreConfig`) хранится в `_PyRuntime.preconfig`.308309Функции для предварительной инициализации Python:310311#### `PyStatus Py_PreInitialize(const PyPreConfig *preconfig)`312313Преинициализировать Python из предварительной конфигурации *preconfig*.314315*preconfig* не должен быть `NULL`.316317#### `PyStatus Py_PreInitializeFromBytesArgs(const PyPreConfig *preconfig, int argc, char *const *argv)`318319Преинициализировать Python из предварительной конфигурации *preconfig*.320321Обрабатывает аргументы командной строки *argv* (байтовые строки), если [`parse_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig.parse_argv) в *preconfig* не равно нулю.322323*preconfig* не должен быть `NULL`.324325#### `PyStatus Py_PreInitializeFromArgs(const PyPreConfig *preconfig, int argc, wchar_t *const *argv)`326327Преинициализировать Python из предварительной конфигурации *preconfig*.328329Разобрать аргументы командной строки *argv* (широкие строки), если [`parse_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig.parse_argv) структуры *preconfig* не равен нулю.330331*preconfig* не должен быть `NULL`.332333Вызывающий код отвечает за обработку исключений (ошибка или выход) с помощью [`PyStatus_Exception()`](https://python-all.ru/3.11/c-api/init_config.html#c.PyStatus_Exception) и [`Py_ExitStatusException()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_ExitStatusException).334335Для [конфигурации Python](https://python-all.ru/3.11/c-api/init_config.html#init-python-config) ([`PyPreConfig_InitPythonConfig()`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig_InitPythonConfig)), если Python инициализируется с аргументами командной строки, эти аргументы также должны быть переданы в преинициализацию Python, поскольку они влияют на предварительную конфигурацию, например, на кодировки. Например, параметр командной строки [`-X utf8`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-X) включает [режим UTF-8 Python](https://python-all.ru/3.11/library/os.html#utf8-mode).336337`PyMem_SetAllocator()` можно вызывать после [`Py_PreInitialize()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_PreInitialize) и до [`Py_InitializeFromConfig()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_InitializeFromConfig), чтобы установить собственный распределитель памяти. Его можно вызывать до [`Py_PreInitialize()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_PreInitialize), если [`PyPreConfig.allocator`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig.allocator) установлен в `PYMEM_ALLOCATOR_NOT_SET`.338339Функции выделения памяти Python, такие как [`PyMem_RawMalloc()`](https://python-all.ru/3.11/c-api/memory.html#c.PyMem_RawMalloc), не должны использоваться до преинициализации Python, тогда как прямой вызов `malloc()` и `free()` всегда безопасен. [`Py_DecodeLocale()`](https://python-all.ru/3.11/c-api/sys.html#c.Py_DecodeLocale) не должна вызываться до преинициализации Python.340341Пример использования преинициализации для включения [режима UTF-8 Python](https://python-all.ru/3.11/library/os.html#utf8-mode):342343```c344PyStatus status;345PyPreConfig preconfig;346PyPreConfig_InitPythonConfig(&preconfig);347348preconfig.utf8_mode = 1;349350status = Py_PreInitialize(&preconfig);351if (PyStatus_Exception(status)) {352 Py_ExitStatusException(status);353}354355/* на этом этапе Python использует кодировку UTF-8 */356357Py_Initialize();358/* ... использовать Python API здесь ... */359Py_Finalize();360```361362## PyConfig363364#### `type PyConfig`365366Структура, содержащая большинство параметров для настройки Python.367368После завершения необходимо использовать функцию [`PyConfig_Clear()`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig_Clear) для освобождения памяти конфигурации.369370Методы структуры:371372#### `void PyConfig_InitPythonConfig(PyConfig *config)`373374Инициализировать конфигурацию с помощью [конфигурации Python](https://python-all.ru/3.11/c-api/init_config.html#init-python-config).375376#### `void PyConfig_InitIsolatedConfig(PyConfig *config)`377378Инициализировать конфигурацию с помощью [изолированной конфигурации](https://python-all.ru/3.11/c-api/init_config.html#init-isolated-conf).379380#### `PyStatus PyConfig_SetString(PyConfig *config, wchar_t *const *config_str, const wchar_t *str)`381382Копировать широкую строку *str* в `*config_str`.383384[Предварительно инициализировать Python](https://python-all.ru/3.11/c-api/init_config.html#c-preinit) при необходимости.385386#### `PyStatus PyConfig_SetBytesString(PyConfig *config, wchar_t *const *config_str, const char *str)`387388Декодировать *str* с помощью [`Py_DecodeLocale()`](https://python-all.ru/3.11/c-api/sys.html#c.Py_DecodeLocale) и записать результат в `*config_str`.389390[Предварительно инициализировать Python](https://python-all.ru/3.11/c-api/init_config.html#c-preinit) при необходимости.391392#### `PyStatus PyConfig_SetArgv(PyConfig *config, int argc, wchar_t *const *argv)`393394Установить аргументы командной строки (поле [`argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) структуры *config*) из списка широких строк *argv*.395396[Предварительно инициализировать Python](https://python-all.ru/3.11/c-api/init_config.html#c-preinit) при необходимости.397398#### `PyStatus PyConfig_SetBytesArgv(PyConfig *config, int argc, char *const *argv)`399400Установить аргументы командной строки (поле [`argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) структуры *config*) из списка байтовых строк *argv*. Декодировать байты с помощью [`Py_DecodeLocale()`](https://python-all.ru/3.11/c-api/sys.html#c.Py_DecodeLocale).401402[Предварительно инициализировать Python](https://python-all.ru/3.11/c-api/init_config.html#c-preinit) при необходимости.403404#### `PyStatus PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, Py_ssize_t length, wchar_t **items)`405406Задать список широких строк *list* с длиной *length* и элементами *items*.407408[Предварительно инициализировать Python](https://python-all.ru/3.11/c-api/init_config.html#c-preinit) при необходимости.409410#### `PyStatus PyConfig_Read(PyConfig *config)`411412Считывает всю конфигурацию Python.413414Поля, которые уже инициализированы, остаются без изменений.415416Поля для [конфигурации путей](https://python-all.ru/3.11/c-api/init_config.html#init-path-config) больше не вычисляются и не изменяются при вызове этой функции, начиная с Python 3.11.417418Функция [`PyConfig_Read()`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig_Read) разбирает аргументы [`PyConfig.argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) только один раз: после разбора аргументов [`PyConfig.parse_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.parse_argv) устанавливается в `2`. Поскольку аргументы Python удаляются из [`PyConfig.argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv), повторный разбор аргументов приведёт к тому, что параметры приложения будут интерпретироваться как параметры Python.419420[Предварительно инициализировать Python](https://python-all.ru/3.11/c-api/init_config.html#c-preinit) при необходимости.421422Изменено в версии 3.10: Аргументы [`PyConfig.argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) теперь анализируются только один раз, [`PyConfig.parse_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.parse_argv) устанавливается в `2` после анализа аргументов, и аргументы анализируются только если [`PyConfig.parse_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.parse_argv) равно `1`.423424Изменено в версии 3.11: [`PyConfig_Read()`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig_Read) больше не вычисляет все пути, и поэтому поля, перечисленные в [Конфигурации путей Python](https://python-all.ru/3.11/c-api/init_config.html#init-path-config), могут больше не обновляться до вызова [`Py_InitializeFromConfig()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_InitializeFromConfig).425426#### `void PyConfig_Clear(PyConfig *config)`427428Освобождает память конфигурации.429430Большинство методов `PyConfig` при необходимости [преинициализируют Python](https://python-all.ru/3.11/c-api/init_config.html#c-preinit). В этом случае конфигурация преинициализации Python ([`PyPreConfig`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig)) основана на [`PyConfig`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig). Если настраиваются поля конфигурации, общие с [`PyPreConfig`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig), они должны быть заданы перед вызовом метода [`PyConfig`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig):431432- [`PyConfig.dev_mode`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.dev_mode)433- [`PyConfig.isolated`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.isolated)434- [`PyConfig.parse_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.parse_argv)435- [`PyConfig.use_environment`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.use_environment)436437Более того, если используется [`PyConfig_SetArgv()`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig_SetArgv) или [`PyConfig_SetBytesArgv()`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig_SetBytesArgv), этот метод должен вызываться перед другими методами, так как конфигурация предварительной инициализации зависит от аргументов командной строки (если [`parse_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.parse_argv) не равно нулю).438439Вызывающий эти методы отвечает за обработку исключений (ошибка или выход) с помощью `PyStatus_Exception()` и `Py_ExitStatusException()`.440441Поля структуры:442443#### `PyWideStringList argv`444445Аргументы командной строки: [`sys.argv`](https://python-all.ru/3.11/library/sys.html#sys.argv).446447Устанавливает [`parse_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.parse_argv) в `1` для анализа [`argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) таким же образом, как обычный Python анализирует аргументы командной строки Python, а затем для удаления аргументов Python из [`argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv).448449Если [`argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) пуст, добавляется пустая строка, чтобы гарантировать, что [`sys.argv`](https://python-all.ru/3.11/library/sys.html#sys.argv) всегда существует и никогда не пуст.450451По умолчанию: `NULL`.452453См. также член [`orig_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.orig_argv).454455#### `int safe_path`456457Если равно нулю, `Py_RunMain()` добавляет потенциально небезопасный путь в начало [`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path) при запуске:458459- Если [`argv[0]`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) равен `L"-m"` (`python -m module`), добавляет текущий рабочий каталог в начало.460- Если выполняется скрипт (`python script.py`), добавляет каталог скрипта в начало. Если это символическая ссылка, разрешает символические ссылки.461- В противном случае (`python -c code` и `python`) добавляет пустую строку в начало, что означает текущий рабочий каталог.462463Устанавливается в `1` опцией командной строки [`-P`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-P) и переменной окружения [`PYTHONSAFEPATH`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONSAFEPATH).464465По умолчанию: `0` в конфигурации Python, `1` в изолированной конфигурации.466467Новое в версии 3.11.468469#### `wchar_t *base_exec_prefix`470471[`sys.base_exec_prefix`](https://python-all.ru/3.11/library/sys.html#sys.base_exec_prefix).472473По умолчанию: `NULL`.474475Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.11/c-api/init_config.html#init-path-config).476477#### `wchar_t *base_executable`478479Базовый исполняемый файл Python: `sys._base_executable`.480481Устанавливается переменной окружения `__PYVENV_LAUNCHER__`.482483Устанавливается из [`PyConfig.executable`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.executable), если `NULL`.484485По умолчанию: `NULL`.486487Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.11/c-api/init_config.html#init-path-config).488489#### `wchar_t *base_prefix`490491[`sys.base_prefix`](https://python-all.ru/3.11/library/sys.html#sys.base_prefix).492493По умолчанию: `NULL`.494495Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.11/c-api/init_config.html#init-path-config).496497#### `int buffered_stdio`498499Если равно `0`, а [`configure_c_stdio`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.configure_c_stdio) не равно нулю, отключает буферизацию для потоков C stdout и stderr.500501Устанавливается в `0` опцией командной строки [`-u`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-u) и переменной окружения [`PYTHONUNBUFFERED`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONUNBUFFERED).502503stdin всегда открывается в буферизированном режиме.504505По умолчанию: `1`.506507#### `int bytes_warning`508509Если равно `1`, выдаётся предупреждение при сравнении [`bytes`](https://python-all.ru/3.11/library/stdtypes.html#bytes) или [`bytearray`](https://python-all.ru/3.11/library/stdtypes.html#bytearray) с [`str`](https://python-all.ru/3.11/library/stdtypes.html#str), или при сравнении [`bytes`](https://python-all.ru/3.11/library/stdtypes.html#bytes) с [`int`](https://python-all.ru/3.11/library/functions.html#int).510511Если больше или равно `2`, в таких случаях возбуждается исключение [`BytesWarning`](https://python-all.ru/3.11/library/exceptions.html#BytesWarning).512513Увеличивается опцией командной строки [`-b`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-b).514515По умолчанию: `0`.516517#### `int warn_default_encoding`518519Если не равно нулю, выдаётся предупреждение [`EncodingWarning`](https://python-all.ru/3.11/library/exceptions.html#EncodingWarning), когда [`io.TextIOWrapper`](https://python-all.ru/3.11/library/io.html#io.TextIOWrapper) использует свою кодировку по умолчанию. Подробнее см. [Opt-in EncodingWarning](https://python-all.ru/3.11/library/io.html#io-encoding-warning).520521По умолчанию: `0`.522523Новое в версии 3.10.524525#### `int code_debug_ranges`526527Если равно `0`, отключает включение сопоставлений конечных строк и столбцов в объекты кода. Также отключает печать кареток в трассировках, указывающих на конкретные места ошибок.528529Устанавливается в `0` переменной окружения [`PYTHONNODEBUGRANGES`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONNODEBUGRANGES) и параметром командной строки [`-X no_debug_ranges`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-X).530531По умолчанию: `1`.532533Новое в версии 3.11.534535#### `wchar_t *check_hash_pycs_mode`536537Управляет поведением проверки hash-based `.pyc` файлов: значение параметра командной строки [`--check-hash-based-pycs`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-check-hash-based-pycs).538539Допустимые значения:540541- `L"always"`: Хешировать исходный файл для инвалидации независимо от значения флага ‘check\_source’.542- `L"never"`: Считать, что хеш-основанные pyc всегда корректны.543- `L"default"`: Флаг ‘check\_source’ в хеш-основанных pyc определяет недействительность.544545По умолчанию: `L"default"`.546547См. также [**PEP 552**](https://python-all.ru/3.11/c-api/init_config.html) «Детерминированные pyc».548549#### `int configure_c_stdio`550551Если не равно нулю, настраиваются стандартные потоки C:552553- В Windows устанавливается двоичный режим (`O_BINARY`) для stdin, stdout и stderr.554- Если [`buffered_stdio`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.buffered_stdio) равно нулю, буферизация потоков stdin, stdout и stderr отключается.555- Если [`interactive`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.interactive) не равно нулю, буферизация потоков stdin и stdout включается (только stdout в Windows).556557По умолчанию: `1` в конфигурации Python, `0` в изолированной конфигурации.558559#### `int dev_mode`560561Если не равно нулю, включается [режим разработки Python](https://python-all.ru/3.11/library/devmode.html#devmode).562563Устанавливается в `1` опцией [`-X dev`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONDEVMODE`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONDEVMODE).564565По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.566567#### `int dump_refs`568569Сбрасывать ссылки Python?570571Если не равно нулю, сбрасывать все объекты, которые все еще существуют при завершении.572573Устанавливается в `1` переменной окружения [`PYTHONDUMPREFS`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONDUMPREFS).574575Требуется специальная сборка Python с определённым макросом `Py_TRACE_REFS`: см. [`configure --with-trace-refs option`](https://python-all.ru/3.11/using/configure.html#cmdoption-with-trace-refs).576577По умолчанию: `0`.578579#### `wchar_t *exec_prefix`580581Префикс каталога, специфичного для сайта, где устанавливаются платформозависимые файлы Python: [`sys.exec_prefix`](https://python-all.ru/3.11/library/sys.html#sys.exec_prefix).582583По умолчанию: `NULL`.584585Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.11/c-api/init_config.html#init-path-config).586587#### `wchar_t *executable`588589Абсолютный путь к исполняемому двоичному файлу интерпретатора Python: [`sys.executable`](https://python-all.ru/3.11/library/sys.html#sys.executable).590591По умолчанию: `NULL`.592593Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.11/c-api/init_config.html#init-path-config).594595#### `int faulthandler`596597Включить faulthandler?598599Если не равно нулю, вызывается [`faulthandler.enable()`](https://python-all.ru/3.11/library/faulthandler.html#faulthandler.enable) при запуске.600601Устанавливается в `1` с помощью [`-X faulthandler`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONFAULTHANDLER`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONFAULTHANDLER).602603По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.604605#### `wchar_t *filesystem_encoding`606607[Кодировка файловой системы](https://python-all.ru/3.11/glossary.html#term-filesystem-encoding-and-error-handler): [`sys.getfilesystemencoding()`](https://python-all.ru/3.11/library/sys.html#sys.getfilesystemencoding).608609На macOS, Android и VxWorks: по умолчанию используется `"utf-8"`.610611На Windows: по умолчанию используется `"utf-8"` или `"mbcs"`, если [`legacy_windows_fs_encoding`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig.legacy_windows_fs_encoding) параметра [`PyPreConfig`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig) не равно нулю.612613Кодировка по умолчанию на других платформах:614615- `"utf-8"`, если [`PyPreConfig.utf8_mode`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig.utf8_mode) не равно нулю.616- `"ascii"`, если Python определяет, что `nl_langinfo(CODESET)` объявляет кодировку ASCII, в то время как функция `mbstowcs()` декодирует из другой кодировки (обычно Latin1).617- `"utf-8"`, если `nl_langinfo(CODESET)` возвращает пустую строку.618- В противном случае используется [кодировка локали](https://python-all.ru/3.11/glossary.html#term-locale-encoding): результат `nl_langinfo(CODESET)`.619620При запуске Python имя кодировки нормализуется до имени кодека Python. Например, `"ANSI_X3.4-1968"` заменяется на `"ascii"`.621622См. также член [`filesystem_errors`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.filesystem_errors).623624#### `wchar_t *filesystem_errors`625626[Обработчик ошибок файловой системы](https://python-all.ru/3.11/glossary.html#term-filesystem-encoding-and-error-handler): [`sys.getfilesystemencodeerrors()`](https://python-all.ru/3.11/library/sys.html#sys.getfilesystemencodeerrors).627628На Windows: по умолчанию используется `"surrogatepass"` или `"replace"`, если [`legacy_windows_fs_encoding`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig.legacy_windows_fs_encoding) параметра [`PyPreConfig`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig) не равно нулю.629630На других платформах: по умолчанию используется `"surrogateescape"`.631632Поддерживаемые обработчики ошибок:633634- `"strict"`635- `"surrogateescape"`636- `"surrogatepass"` (поддерживается только с кодировкой UTF-8)637638См. также член [`filesystem_encoding`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.filesystem_encoding).639640#### `unsigned long hash_seed`641642#### `int use_hash_seed`643644Случайное зерно хеш-функции.645646Если [`use_hash_seed`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.use_hash_seed) равен нулю, начальное значение (seed) выбирается случайным образом при запуске Python, а [`hash_seed`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.hash_seed) игнорируется.647648Устанавливается переменной окружения [`PYTHONHASHSEED`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONHASHSEED).649650Значение *use\_hash\_seed* по умолчанию: `-1` в режиме Python, `0` в изолированном режиме.651652#### `wchar_t *home`653654Домашний каталог Python.655656Если [`Py_SetPythonHome()`](https://python-all.ru/3.11/c-api/init.html#c.Py_SetPythonHome) была вызвана, используйте её аргумент, если он не равен `NULL`.657658Устанавливается переменной окружения [`PYTHONHOME`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONHOME).659660По умолчанию: `NULL`.661662Часть входных данных [конфигурации путей Python](https://python-all.ru/3.11/c-api/init_config.html#init-path-config).663664#### `int import_time`665666Если не ноль, профилировать время импорта.667668Значение `1` задаётся опцией [`-X importtime`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONPROFILEIMPORTTIME`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONPROFILEIMPORTTIME).669670По умолчанию: `0`.671672#### `int inspect`673674Войти в интерактивный режим после выполнения скрипта или команды.675676Если больше `0`, включить inspect: когда скрипт передан первым аргументом или используется опция -c, войти в интерактивный режим после выполнения скрипта или команды, даже если [`sys.stdin`](https://python-all.ru/3.11/library/sys.html#sys.stdin) не выглядит как терминал.677678Увеличивается опцией командной строки [`-i`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-i). Устанавливается в `1`, если переменная окружения [`PYTHONINSPECT`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONINSPECT) не пуста.679680По умолчанию: `0`.681682#### `int install_signal_handlers`683684Устанавливать обработчики сигналов Python?685686По умолчанию: `1` в режиме Python, `0` в изолированном режиме.687688#### `int interactive`689690Если больше `0`, включить интерактивный режим (REPL).691692Увеличивается опцией командной строки [`-i`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-i).693694По умолчанию: `0`.695696#### `int isolated`697698Если больше `0`, включить изолированный режим:699700- Установить [`safe_path`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.safe_path) в `1`: не добавлять потенциально небезопасный путь к [`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path) при запуске Python.701- Устанавливает [`use_environment`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.use_environment) в `0`.702- Установить [`user_site_directory`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.user_site_directory) в `0`: не добавлять каталог пользовательских сайт-пакетов в [`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path).703- REPL Python не импортирует [`readline`](https://python-all.ru/3.11/library/readline.html#module-readline) и не включает стандартную конфигурацию readline в интерактивных приглашениях.704705Устанавливается в `1` параметром командной строки [`-I`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-I).706707По умолчанию: `0` в режиме Python, `1` в изолированном режиме.708709См. также [`PyPreConfig.isolated`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig.isolated).710711#### `int legacy_windows_stdio`712713Если не ноль, использовать [`io.FileIO`](https://python-all.ru/3.11/library/io.html#io.FileIO) вместо `io._WindowsConsoleIO` для [`sys.stdin`](https://python-all.ru/3.11/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.11/library/sys.html#sys.stdout) и [`sys.stderr`](https://python-all.ru/3.11/library/sys.html#sys.stderr).714715Устанавливается в `1`, если переменная окружения [`PYTHONLEGACYWINDOWSSTDIO`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONLEGACYWINDOWSSTDIO) установлена в непустую строку.716717Доступно только в Windows. Макрос `#ifdef MS_WINDOWS` можно использовать для кода, зависящего от Windows.718719По умолчанию: `0`.720721См. также [**PEP 528**](https://python-all.ru/3.11/c-api/init_config.html) (Изменение кодировки консоли Windows на UTF-8).722723#### `int malloc_stats`724725Если не ноль, вывести статистику по [аллокатору памяти Python pymalloc](https://python-all.ru/3.11/c-api/memory.html#pymalloc) при завершении.726727Устанавливается в `1` переменной окружения [`PYTHONMALLOCSTATS`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONMALLOCSTATS).728729Параметр игнорируется, если Python [`configured using the --without-pymalloc option`](https://python-all.ru/3.11/using/configure.html#cmdoption-without-pymalloc).730731По умолчанию: `0`.732733#### `wchar_t *platlibdir`734735Имя каталога библиотек платформы: [`sys.platlibdir`](https://python-all.ru/3.11/library/sys.html#sys.platlibdir).736737Устанавливается переменной окружения [`PYTHONPLATLIBDIR`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONPLATLIBDIR).738739По умолчанию: значение макроса `PLATLIBDIR`, которое задаётся [`configure --with-platlibdir option`](https://python-all.ru/3.11/using/configure.html#cmdoption-with-platlibdir) (по умолчанию: `"lib"` или `"DLLs"` в Windows).740741Часть входных данных [конфигурации путей Python](https://python-all.ru/3.11/c-api/init_config.html#init-path-config).742743Новое в версии 3.9.744745Изменено в версии 3.11: Этот макрос теперь используется в Windows для поиска модулей расширения стандартной библиотеки, обычно в `DLLs`. Однако для совместимости учтите, что это значение игнорируется для любых нестандартных расположений, включая сборки в дереве исходников и виртуальные окружения.746747#### `wchar_t *pythonpath_env`748749Пути поиска модулей ([`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path)) в виде строки, разделённой `DELIM` ([`os.pathsep`](https://python-all.ru/3.11/library/os.html#os.pathsep)).750751Устанавливается переменной окружения [`PYTHONPATH`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONPATH).752753По умолчанию: `NULL`.754755Часть входных данных [конфигурации путей Python](https://python-all.ru/3.11/c-api/init_config.html#init-path-config).756757#### `PyWideStringList module_search_paths`758759#### `int module_search_paths_set`760761Пути поиска модулей: [`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path).762763Если [`module_search_paths_set`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.module_search_paths_set) равно `0`, [`Py_InitializeFromConfig()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_InitializeFromConfig) заменит [`module_search_paths`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.module_search_paths) и установит [`module_search_paths_set`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.module_search_paths_set) в `1`.764765По умолчанию: пустой список (`module_search_paths`) и `0` (`module_search_paths_set`).766767Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.11/c-api/init_config.html#init-path-config).768769#### `int optimization_level`770771Уровень оптимизации компиляции:772773- `0`: Оптимизатор Peephole, устанавливает `__debug__` в `True`.774- `1`: Уровень 0, удаляет утверждения, устанавливает `__debug__` в `False`.775- `2`: Уровень 1, удаляет строки документации.776777Увеличивается опцией командной строки [`-O`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-O). Устанавливается в значение переменной окружения [`PYTHONOPTIMIZE`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONOPTIMIZE).778779По умолчанию: `0`.780781#### `PyWideStringList orig_argv`782783Список исходных аргументов командной строки, переданных исполняемому файлу Python: [`sys.orig_argv`](https://python-all.ru/3.11/library/sys.html#sys.orig_argv).784785Если список [`orig_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.orig_argv) пуст, а [`argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) не является списком, содержащим только пустую строку, то [`PyConfig_Read()`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig_Read) копирует [`argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) в [`orig_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.orig_argv) перед изменением [`argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) (если [`parse_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.parse_argv) не равно нулю).786787См. также элемент [`argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) и функцию [`Py_GetArgcArgv()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_GetArgcArgv).788789По умолчанию: пустой список.790791Новое в версии 3.10.792793#### `int parse_argv`794795Разбирать аргументы командной строки?796797Если равно `1`, разбирать [`argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) так же, как обычный Python разбирает [аргументы командной строки](https://python-all.ru/3.11/using/cmdline.html#using-on-cmdline), и удалять аргументы Python из [`argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv).798799Функция [`PyConfig_Read()`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig_Read) разбирает аргументы [`PyConfig.argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) только один раз: [`PyConfig.parse_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.parse_argv) устанавливается в `2` после разбора аргументов. Поскольку аргументы Python удаляются из [`PyConfig.argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv), повторный разбор привёл бы к интерпретации опций приложения как опций Python.800801По умолчанию: `1` в режиме Python, `0` в изолированном режиме.802803Изменено в версии 3.10: Аргументы [`PyConfig.argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) теперь разбираются только если [`PyConfig.parse_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.parse_argv) равно `1`.804805#### `int parser_debug`806807Режим отладки синтаксического анализатора. Если больше `0`, включает вывод отладки анализатора (только для экспертов, зависит от параметров компиляции).808809Увеличивается опцией командной строки [`-d`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-d). Устанавливается в значение переменной окружения [`PYTHONDEBUG`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONDEBUG).810811По умолчанию: `0`.812813#### `int pathconfig_warnings`814815Если не равно нулю, вычисление конфигурации путей может записывать предупреждения в `stderr`. Если равно `0`, подавлять эти предупреждения.816817По умолчанию: `1` в режиме Python, `0` в изолированном режиме.818819Часть входных данных [конфигурации путей Python](https://python-all.ru/3.11/c-api/init_config.html#init-path-config).820821Изменено в версии 3.11: теперь также применяется на Windows.822823#### `wchar_t *prefix`824825Префикс каталога, специфичный для сайта, в который устанавливаются платформонезависимые файлы Python: [`sys.prefix`](https://python-all.ru/3.11/library/sys.html#sys.prefix).826827По умолчанию: `NULL`.828829Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.11/c-api/init_config.html#init-path-config).830831#### `wchar_t *program_name`832833Имя программы, используемое для инициализации [`executable`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.executable) и в ранних сообщениях об ошибках во время инициализации Python.834835- Если `Py_SetProgramName()` был вызван, используется его аргумент.836- На macOS используется переменная окружения [`PYTHONEXECUTABLE`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONEXECUTABLE), если она установлена.837- Если определён макрос `WITH_NEXT_FRAMEWORK`, используется переменная окружения `__PYVENV_LAUNCHER__`, если она установлена.838- Используется `argv[0]` из [`argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv), если она доступна и непустая.839- В противном случае используется `L"python"` на Windows или `L"python3"` на других платформах.840841По умолчанию: `NULL`.842843Часть входных данных [конфигурации путей Python](https://python-all.ru/3.11/c-api/init_config.html#init-path-config).844845#### `wchar_t *pycache_prefix`846847Каталог, в который записываются кэшированные файлы `.pyc`: [`sys.pycache_prefix`](https://python-all.ru/3.11/library/sys.html#sys.pycache_prefix).848849Устанавливается [`-X pycache_prefix=PATH`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-X) опцией командной строки и переменной окружения [`PYTHONPYCACHEPREFIX`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONPYCACHEPREFIX).850851Если `NULL`, [`sys.pycache_prefix`](https://python-all.ru/3.11/library/sys.html#sys.pycache_prefix) устанавливается в `None`.852853По умолчанию: `NULL`.854855#### `int quiet`856857Тихий режим. Если больше `0`, не отображать авторские права и версию при запуске Python в интерактивном режиме.858859Увеличивается опцией командной строки [`-q`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-q).860861По умолчанию: `0`.862863#### `wchar_t *run_command`864865Значение параметра командной строки [`-c`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-c).866867Используется [`Py_RunMain()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_RunMain).868869По умолчанию: `NULL`.870871#### `wchar_t *run_filename`872873Имя файла, переданное в командной строке: последний аргумент командной строки без [`-c`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-c) или [`-m`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-m). Используется функцией [`Py_RunMain()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_RunMain).874875Например, устанавливается в `script.py` командной строкой `python3 script.py arg` .876877См. также опцию [`PyConfig.skip_source_first_line`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.skip_source_first_line).878879По умолчанию: `NULL`.880881#### `wchar_t *run_module`882883Значение параметра командной строки [`-m`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-m).884885Используется [`Py_RunMain()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_RunMain).886887По умолчанию: `NULL`.888889#### `int show_ref_count`890891Показывать общее количество ссылок при завершении?892893Устанавливается в `1` параметром командной строки [`-X showrefcount`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-X).894895Требуется [отладочная сборка Python](https://python-all.ru/3.11/using/configure.html#debug-build) (макрос `Py_REF_DEBUG` должен быть определён).896897По умолчанию: `0`.898899#### `int site_import`900901Импортировать модуль [`site`](https://python-all.ru/3.11/library/site.html#module-site) при запуске?902903Если равно нулю, импорт модуля site и зависящие от site манипуляции с [`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path) отключаются.904905Также отключает эти манипуляции, если модуль [`site`](https://python-all.ru/3.11/library/site.html#module-site) импортирован явно (вызовите [`site.main()`](https://python-all.ru/3.11/library/site.html#site.main), чтобы включить их).906907Устанавливается в `0` параметром командной строки [`-S`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-S).908909[`sys.flags.no_site`](https://python-all.ru/3.11/library/sys.html#sys.flags) устанавливается в инвертированное значение [`site_import`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.site_import).910911По умолчанию: `1`.912913#### `int skip_source_first_line`914915Если не ноль, пропустить первую строку исходного кода [`PyConfig.run_filename`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.run_filename).916917Это позволяет использовать не-Unix формы `#!cmd`. Предназначено только для DOS-специфичного хака.918919Устанавливается в `1` параметром командной строки [`-x`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-x).920921По умолчанию: `0`.922923#### `wchar_t *stdio_encoding`924925#### `wchar_t *stdio_errors`926927Кодировка и ошибки кодирования для [`sys.stdin`](https://python-all.ru/3.11/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.11/library/sys.html#sys.stdout) и [`sys.stderr`](https://python-all.ru/3.11/library/sys.html#sys.stderr) (но [`sys.stderr`](https://python-all.ru/3.11/library/sys.html#sys.stderr) всегда использует обработчик ошибок `"backslashreplace"`).928929Если [`Py_SetStandardStreamEncoding()`](https://python-all.ru/3.11/c-api/init.html#c.Py_SetStandardStreamEncoding) была вызвана, используются её аргументы *error* и *errors*, если они не `NULL`.930931Использовать переменную окружения [`PYTHONIOENCODING`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONIOENCODING), если она не пуста.932933Кодировка по умолчанию:934935- `"UTF-8"`, если [`PyPreConfig.utf8_mode`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig.utf8_mode) не равно нулю.936- В противном случае используется [кодировка локали](https://python-all.ru/3.11/glossary.html#term-locale-encoding).937938Обработчик ошибок по умолчанию:939940- В Windows: используется `"surrogateescape"`.941- `"surrogateescape"`, если [`PyPreConfig.utf8_mode`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig.utf8_mode) не равно нулю, или если локаль LC\_CTYPE имеет значение «C» или «POSIX».942- `"strict"` в противном случае.943944#### `int tracemalloc`945946Включить tracemalloc?947948Если не равно нулю, вызывается [`tracemalloc.start()`](https://python-all.ru/3.11/library/tracemalloc.html#tracemalloc.start) при запуске.949950Устанавливается параметром командной строки [`-X tracemalloc=N`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONTRACEMALLOC`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONTRACEMALLOC).951952По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.953954#### `int use_environment`955956Использовать [переменные окружения](https://python-all.ru/3.11/using/cmdline.html#using-on-envvars)?957958Если равно нулю, игнорируются [переменные окружения](https://python-all.ru/3.11/using/cmdline.html#using-on-envvars).959960Устанавливается в `0` переменной окружения [`-E`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-E).961962По умолчанию: `1` в конфигурации Python и `0` в изолированной конфигурации.963964#### `int user_site_directory`965966Если не равно нулю, в [`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path) добавляется каталог пользовательского site.967968Устанавливается в `0` с помощью опций командной строки [`-s`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-s) и [`-I`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-I).969970Устанавливается в `0` переменной окружения [`PYTHONNOUSERSITE`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONNOUSERSITE).971972По умолчанию: `1` в режиме Python, `0` в изолированном режиме.973974#### `int verbose`975976Подробный режим. Если больше `0`, выводится сообщение каждый раз, когда модуль импортируется, с указанием места (имя файла или встроенный модуль), откуда он загружается.977978Если больше или равно `2`, выводить сообщение для каждого файла, который проверяется при поиске модуля. Также предоставляет информацию об очистке модулей при завершении.979980Увеличивается опцией командной строки [`-v`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-v).981982Устанавливается в значение переменной окружения [`PYTHONVERBOSE`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONVERBOSE).983984По умолчанию: `0`.985986#### `PyWideStringList warnoptions`987988Опции модуля [`warnings`](https://python-all.ru/3.11/library/warnings.html#module-warnings) для построения фильтров предупреждений, от низшего к высшему приоритету: [`sys.warnoptions`](https://python-all.ru/3.11/library/sys.html#sys.warnoptions).989990Модуль [`warnings`](https://python-all.ru/3.11/library/warnings.html#module-warnings) добавляет [`sys.warnoptions`](https://python-all.ru/3.11/library/sys.html#sys.warnoptions) в обратном порядке: последний элемент [`PyConfig.warnoptions`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.warnoptions) становится первым элементом `warnings.filters`, который проверяется первым (наивысший приоритет).991992Опция командной строки [`-W`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-W) добавляет своё значение в [`warnoptions`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.warnoptions); её можно использовать несколько раз.993994Переменная окружения [`PYTHONWARNINGS`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONWARNINGS) также может использоваться для добавления опций предупреждений. Можно указать несколько опций, разделённых запятыми (`,`).995996По умолчанию: пустой список.997998#### `int write_bytecode`9991000Если равно `0`, Python не будет пытаться записывать файлы `.pyc` при импорте исходных модулей.10011002Устанавливается в `0` опцией командной строки [`-B`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-B) и переменной окружения [`PYTHONDONTWRITEBYTECODE`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONDONTWRITEBYTECODE).10031004[`sys.dont_write_bytecode`](https://python-all.ru/3.11/library/sys.html#sys.dont_write_bytecode) инициализируется инвертированным значением [`write_bytecode`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.write_bytecode).10051006По умолчанию: `1`.10071008#### `PyWideStringList xoptions`10091010Значения опций командной строки [`-X`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-X): [`sys._xoptions`](https://python-all.ru/3.11/library/sys.html#sys._xoptions).10111012По умолчанию: пустой список.10131014Если [`parse_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.parse_argv) не равно нулю, аргументы [`argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) разбираются так же, как обычный Python разбирает [аргументы командной строки](https://python-all.ru/3.11/using/cmdline.html#using-on-cmdline), а аргументы Python удаляются из [`argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv).10151016Параметры [`xoptions`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.xoptions) разбираются для установки других опций: см. опцию командной строки [`-X`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-X).10171018Изменено в версии 3.9: Поле `show_alloc_count` было удалено.10191020## Инициализация с PyConfig10211022Функция для инициализации Python:10231024#### `PyStatus Py_InitializeFromConfig(const PyConfig *config)`10251026Инициализирует Python из конфигурации *config*.10271028Вызывающий код отвечает за обработку исключений (ошибка или выход) с помощью [`PyStatus_Exception()`](https://python-all.ru/3.11/c-api/init_config.html#c.PyStatus_Exception) и [`Py_ExitStatusException()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_ExitStatusException).10291030Если используются [`PyImport_FrozenModules()`](https://python-all.ru/3.11/c-api/import.html#c.PyImport_FrozenModules), [`PyImport_AppendInittab()`](https://python-all.ru/3.11/c-api/import.html#c.PyImport_AppendInittab) или [`PyImport_ExtendInittab()`](https://python-all.ru/3.11/c-api/import.html#c.PyImport_ExtendInittab), они должны быть установлены или вызваны после предварительной инициализации Python и до инициализации Python. Если Python инициализируется несколько раз, [`PyImport_AppendInittab()`](https://python-all.ru/3.11/c-api/import.html#c.PyImport_AppendInittab) или [`PyImport_ExtendInittab()`](https://python-all.ru/3.11/c-api/import.html#c.PyImport_ExtendInittab) должны вызываться перед каждой инициализацией Python.10311032Текущая конфигурация (тип `PyConfig`) хранится в `PyInterpreterState.config`.10331034Пример установки имени программы:10351036```c1037void init_python(void)1038{1039 PyStatus status;10401041 PyConfig config;1042 PyConfig_InitPythonConfig(&config);10431044 /* Установить имя программы. Неявно предварительно инициализировать Python. */1045 status = PyConfig_SetString(&config, &config.program_name,1046 L"/path/to/my_program");1047 if (PyStatus_Exception(status)) {1048 goto exception;1049 }10501051 status = Py_InitializeFromConfig(&config);1052 if (PyStatus_Exception(status)) {1053 goto exception;1054 }1055 PyConfig_Clear(&config);1056 return;10571058exception:1059 PyConfig_Clear(&config);1060 Py_ExitStatusException(status);1061}1062```10631064Более полный пример изменения конфигурации по умолчанию: прочитать конфигурацию, а затем переопределить некоторые параметры. Обратите внимание, что начиная с версии 3.11 многие параметры не вычисляются до инициализации, поэтому их значения нельзя прочитать из структуры конфигурации. Любые значения, установленные до вызова инициализации, останутся без изменений после инициализации:10651066```c1067PyStatus init_python(const char *program_name)1068{1069 PyStatus status;10701071 PyConfig config;1072 PyConfig_InitPythonConfig(&config);10731074 /* Установить имя программы перед чтением конфигурации1075 (декодировать байтовую строку из кодировки локали).10761077 Неявно предварительно инициализировать Python. */1078 status = PyConfig_SetBytesString(&config, &config.program_name,1079 program_name);1080 if (PyStatus_Exception(status)) {1081 goto done;1082 }10831084 /* Прочитать всю конфигурацию сразу */1085 status = PyConfig_Read(&config);1086 if (PyStatus_Exception(status)) {1087 goto done;1088 }10891090 /* Указать sys.path явно */1091 /* Если требуется изменить стандартный набор путей, завершите1092 сначала инициализация, а затем использование PySys_GetObject("path") */1093 config.module_search_paths_set = 1;1094 status = PyWideStringList_Append(&config.module_search_paths,1095 L"/path/to/stdlib");1096 if (PyStatus_Exception(status)) {1097 goto done;1098 }1099 status = PyWideStringList_Append(&config.module_search_paths,1100 L"/path/to/more/modules");1101 if (PyStatus_Exception(status)) {1102 goto done;1103 }11041105 /* Переопределить исполняемый файл, вычисленный PyConfig_Read() */1106 status = PyConfig_SetString(&config, &config.executable,1107 L"/path/to/my_executable");1108 if (PyStatus_Exception(status)) {1109 goto done;1110 }11111112 status = Py_InitializeFromConfig(&config);11131114done:1115 PyConfig_Clear(&config);1116 return status;1117}1118```11191120## Изолированная конфигурация11211122Функции [`PyPreConfig_InitIsolatedConfig()`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig_InitIsolatedConfig) и [`PyConfig_InitIsolatedConfig()`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig_InitIsolatedConfig) создают конфигурацию для изоляции Python от системы. Например, для встраивания Python в приложение.11231124Эта конфигурация игнорирует глобальные переменные конфигурации, переменные окружения, аргументы командной строки ([`PyConfig.argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.argv) не разбирается) и каталог пользовательских сайтов. Стандартные потоки C (например: `stdout`) и локаль LC\_CTYPE остаются без изменений. Обработчики сигналов не устанавливаются.11251126Конфигурационные файлы по-прежнему используются с этой конфигурацией для определения путей, которые не указаны. Убедитесь, что [`PyConfig.home`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.home) указан, чтобы избежать вычисления конфигурации путей по умолчанию.11271128## Конфигурация Python11291130Функции [`PyPreConfig_InitPythonConfig()`](https://python-all.ru/3.11/c-api/init_config.html#c.PyPreConfig_InitPythonConfig) и [`PyConfig_InitPythonConfig()`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig_InitPythonConfig) создают конфигурацию для сборки настраиваемого Python, который ведёт себя как обычный Python.11311132Переменные окружения и аргументы командной строки используются для настройки Python, тогда как глобальные переменные конфигурации игнорируются.11331134Эта функция включает принудительное использование локали C ([**PEP 538**](https://python-all.ru/3.11/c-api/init_config.html)) и [Режим Python UTF-8](https://python-all.ru/3.11/library/os.html#utf8-mode) ([**PEP 540**](https://python-all.ru/3.11/c-api/init_config.html)) в зависимости от локали LC\_CTYPE, переменных окружения [`PYTHONUTF8`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONUTF8) и [`PYTHONCOERCECLOCALE`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONCOERCECLOCALE).11351136## Конфигурация путей Python11371138[`PyConfig`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig) содержит несколько полей для конфигурации путей:11391140- Входные данные конфигурации путей:11411142 - [`PyConfig.home`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.home)1143 - [`PyConfig.platlibdir`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.platlibdir)1144 - [`PyConfig.pathconfig_warnings`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.pathconfig_warnings)1145 - [`PyConfig.program_name`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.program_name)1146 - [`PyConfig.pythonpath_env`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.pythonpath_env)1147 - текущий рабочий каталог: для получения абсолютных путей1148 - переменная окружения `PATH` для получения полного пути программы (из [`PyConfig.program_name`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.program_name))1149 - переменная окружения `__PYVENV_LAUNCHER__`1150 - (только Windows) Пути приложений в реестре в разделе “SoftwarePythonPythonCoreX.YPythonPath” для HKEY\_CURRENT\_USER и HKEY\_LOCAL\_MACHINE (где X.Y – версия Python).1151- Выходные поля конфигурации путей:11521153 - [`PyConfig.base_exec_prefix`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.base_exec_prefix)1154 - [`PyConfig.base_executable`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.base_executable)1155 - [`PyConfig.base_prefix`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.base_prefix)1156 - [`PyConfig.exec_prefix`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.exec_prefix)1157 - [`PyConfig.executable`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.executable)1158 - [`PyConfig.module_search_paths_set`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.module_search_paths_set), [`PyConfig.module_search_paths`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.module_search_paths)1159 - [`PyConfig.prefix`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.prefix)11601161Если хотя бы одно «выходное поле» не установлено, Python вычисляет конфигурацию путей, чтобы заполнить неустановленные поля. Если [`module_search_paths_set`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.module_search_paths_set) равно `0`, [`module_search_paths`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.module_search_paths) переопределяется, а [`module_search_paths_set`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.module_search_paths_set) устанавливается в `1`.11621163Можно полностью игнорировать функцию, вычисляющую конфигурацию путей по умолчанию, явно задав все перечисленные выше выходные поля конфигурации путей. Строка считается заданной, даже если она не пуста. `module_search_paths` считается заданным, если `module_search_paths_set` установлено в `1`. В этом случае `module_search_paths` будет использоваться без изменений.11641165Установите [`pathconfig_warnings`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.pathconfig_warnings) в `0`, чтобы подавить предупреждения при вычислении конфигурации путей (только Unix, Windows не регистрирует предупреждения).11661167Если поля [`base_prefix`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.base_prefix) или [`base_exec_prefix`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.base_exec_prefix) не заданы, они наследуют свои значения от [`prefix`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.prefix) и [`exec_prefix`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.exec_prefix) соответственно.11681169[`Py_RunMain()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_RunMain) и [`Py_Main()`](https://python-all.ru/3.11/c-api/veryhigh.html#c.Py_Main) изменяют [`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path):11701171- Если [`run_filename`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.run_filename) задано и является каталогом, содержащим скрипт `__main__.py`, добавьте [`run_filename`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.run_filename) в начало [`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path).1172- Если [`isolated`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.isolated) равно нулю:11731174 - Если [`run_module`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.run_module) задан, добавьте текущий каталог в начало [`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path). Ничего не делайте, если текущий каталог не может быть прочитан.1175 - Если [`run_filename`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.run_filename) задан, добавьте каталог файла в начало [`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path).1176 - В противном случае пустая строка добавляется в начало [`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path).11771178Если [`site_import`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.site_import) не равно нулю, то [`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path) может быть изменён модулем [`site`](https://python-all.ru/3.11/library/site.html#module-site). Если [`user_site_directory`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.user_site_directory) не равно нулю и каталог пакетов сайта пользователя существует, модуль [`site`](https://python-all.ru/3.11/library/site.html#module-site) добавляет каталог пакетов сайта пользователя в [`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path).11791180При конфигурации путей используются следующие файлы конфигурации:11811182- `pyvenv.cfg`1183- Файл `._pth` (например, `python._pth`)1184- `pybuilddir.txt` (только Unix)11851186Если присутствует файл `._pth`:11871188- Устанавливает [`isolated`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.isolated) в `1`.1189- Устанавливает [`use_environment`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.use_environment) в `0`.1190- Устанавливает [`site_import`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.site_import) в `0`.1191- Устанавливает [`safe_path`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.safe_path) в `1`.11921193Переменная окружения `__PYVENV_LAUNCHER__` используется для установки [`PyConfig.base_executable`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.base_executable).11941195## Py\_RunMain()11961197#### `int Py_RunMain(void)`11981199Выполняет команду ([`PyConfig.run_command`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.run_command)), скрипт ([`PyConfig.run_filename`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.run_filename)) или модуль ([`PyConfig.run_module`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.run_module)), указанные в командной строке или в конфигурации.12001201По умолчанию, а также при использовании опции [`-i`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-i), запускается REPL.12021203Наконец, завершает работу Python и возвращает код завершения, который можно передать функции `exit()`.12041205См. [Python Configuration](https://python-all.ru/3.11/c-api/init_config.html#init-python-config) для примера настройки Python для постоянной работы в изолированном режиме с помощью [`Py_RunMain()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_RunMain).12061207## Py\_GetArgcArgv()12081209#### `void Py_GetArgcArgv(int *argc, wchar_t ***argv)`12101211Возвращает исходные аргументы командной строки до того, как Python их изменил.12121213См. также элемент [`PyConfig.orig_argv`](https://python-all.ru/3.11/c-api/init_config.html#c.PyConfig.orig_argv).12141215## Многофазная инициализация (частный временный API)12161217Данный раздел представляет собой частный временный API, вводящий многофазную инициализацию – ключевую возможность [**PEP 432**](https://python-all.ru/3.11/c-api/init_config.html):12181219- Фаза «базовой» инициализации, «минимальный Python»:12201221 - Встроенные типы;1222 - Встроенные исключения;1223 - Встроенные и замороженные модули;1224 - Модуль [`sys`](https://python-all.ru/3.11/library/sys.html#module-sys) инициализирован лишь частично (например, [`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path) ещё не существует).1225- Фаза «основной» инициализации, Python полностью инициализирован:12261227 - Устанавливает и настраивает [`importlib`](https://python-all.ru/3.11/library/importlib.html#module-importlib);1228 - Применяет [конфигурацию путей](https://python-all.ru/3.11/c-api/init_config.html#init-path-config);1229 - Устанавливает обработчики сигналов;1230 - Завершает инициализацию модуля [`sys`](https://python-all.ru/3.11/library/sys.html#module-sys) (например, создаёт [`sys.stdout`](https://python-all.ru/3.11/library/sys.html#sys.stdout) и [`sys.path`](https://python-all.ru/3.11/library/sys.html#sys.path));1231 - Включает опциональные возможности, такие как [`faulthandler`](https://python-all.ru/3.11/library/faulthandler.html#module-faulthandler) и [`tracemalloc`](https://python-all.ru/3.11/library/tracemalloc.html#module-tracemalloc);1232 - Импортировать модуль [`site`](https://python-all.ru/3.11/library/site.html#module-site);1233 - и т. д.12341235Частный временный API:12361237- `PyConfig._init_main`: если установлено в `0`, [`Py_InitializeFromConfig()`](https://python-all.ru/3.11/c-api/init_config.html#c.Py_InitializeFromConfig) останавливается на этапе инициализации «Core».1238- `PyConfig._isolated_interpreter`: если не равно нулю, запретить потоки, подпроцессы и fork.12391240#### `PyStatus _Py_InitializeMain(void)`12411242Переход к фазе инициализации «Main», завершение инициализации Python.12431244Во время фазы «Core» не импортируется ни один модуль, а модуль `importlib` не настроен: [Path Configuration](https://python-all.ru/3.11/c-api/init_config.html#init-path-config) применяется только во время фазы «Main». Это может позволить настраивать Python из Python, чтобы переопределить или настроить [Path Configuration](https://python-all.ru/3.11/c-api/init_config.html#init-path-config), возможно, установить пользовательский импортёр [`sys.meta_path`](https://python-all.ru/3.11/library/sys.html#sys.meta_path) или хук импорта и т. д.12451246Возможно, станет возможным вычислять [конфигурацию путей](https://python-all.ru/3.11/c-api/init_config.html#init-path-config) в Python после этапа Core и до этапа Main, что является одной из мотиваций [**PEP 432**](https://python-all.ru/3.11/c-api/init_config.html).12471248Фаза «Core» не определена должным образом: что должно и что не должно быть доступно на этой фазе, пока не указано. API помечен как частный и временный: API может быть изменён или даже удалён в любое время, пока не будет спроектирован надлежащий публичный API.12491250Пример выполнения кода Python между фазами инициализации «Core» и «Main»:12511252```c1253void init_python(void)1254{1255 PyStatus status;12561257 PyConfig config;1258 PyConfig_InitPythonConfig(&config);1259 config._init_main = 0;12601261 /* настроить конфигурацию 'config' */12621263 status = Py_InitializeFromConfig(&config);1264 PyConfig_Clear(&config);1265 if (PyStatus_Exception(status)) {1266 Py_ExitStatusException(status);1267 }12681269 /* ... разместить здесь дополнительный код конфигурации ...1270 вызывается _Py_InitializeMain() */1271 int res = PyRun_SimpleString(1272 "import sys; "1273 "print('Run Python code before _Py_InitializeMain', "1274 "file=sys.stderr)");1275 if (res < 0) {1276 exit(1);1277 }12781279 /* ... добавьте сюда дополнительный код конфигурации ... */12801281 status = _Py_InitializeMain();1282 if (PyStatus_Exception(status)) {1283 Py_ExitStatusException(status);1284 }1285}1286```1287