init_config.md
1> **Источник:** https://python-all.ru/3.13/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.13/c-api/init.html#c.Py_InitializeFromConfig) и структуры [`PyConfig`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig). Он может быть предварительно инициализирован с помощью [`Py_PreInitialize()`](https://python-all.ru/3.13/c-api/init_config.html#c.Py_PreInitialize) и структуры [`PyPreConfig`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig).1213Существует два вида конфигурации:1415- [Конфигурация Python](https://python-all.ru/3.13/c-api/init_config.html#init-python-config) может использоваться для создания настраиваемого Python, который ведёт себя как обычный Python. Например, переменные окружения и аргументы командной строки используются для настройки Python.16- [Изолированная конфигурация](https://python-all.ru/3.13/c-api/init_config.html#init-isolated-conf) может использоваться для встраивания Python в приложение. Она изолирует Python от системы. Например, переменные окружения игнорируются, локаль LC\_CTYPE остаётся неизменной и не регистрируется ни один обработчик сигналов.1718Функция [`Py_RunMain()`](https://python-all.ru/3.13/c-api/init.html#c.Py_RunMain) может использоваться для написания настраиваемой программы на Python.1920См. также [Инициализация, финализация и потоки](https://python-all.ru/3.13/c-api/init.html#initialization).2122> **См. также**23>24> [**PEP 587**](https://python-all.ru/3.13/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.13/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.13/c-api/init_config.html#init-python-config).200201#### `void PyPreConfig_InitIsolatedConfig(PyPreConfig *preconfig)`202203Инициализировать предварительную конфигурацию с [Изолированной конфигурацией](https://python-all.ru/3.13/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.13/c-api/memory.html#default-memory-allocators).213- `PYMEM_ALLOCATOR_DEBUG` (`2`): [стандартные распределители памяти](https://python-all.ru/3.13/c-api/memory.html#default-memory-allocators) с [отладочными перехватчиками](https://python-all.ru/3.13/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.13/c-api/memory.html#pymem-debug-hooks).216- `PYMEM_ALLOCATOR_PYMALLOC` (`5`): [распределитель памяти pymalloc из Python](https://python-all.ru/3.13/c-api/memory.html#pymalloc).217- `PYMEM_ALLOCATOR_PYMALLOC_DEBUG` (`6`): [распределитель памяти pymalloc из Python](https://python-all.ru/3.13/c-api/memory.html#pymalloc) с [отладочными перехватчиками](https://python-all.ru/3.13/c-api/memory.html#pymem-debug-hooks).218- `PYMEM_ALLOCATOR_MIMALLOC` (`6`): использовать `mimalloc` – быструю замену malloc.219- `PYMEM_ALLOCATOR_MIMALLOC_DEBUG` (`7`): использовать `mimalloc` – быструю замену malloc с [отладочными перехватчиками](https://python-all.ru/3.13/c-api/memory.html#pymem-debug-hooks).220221`PYMEM_ALLOCATOR_PYMALLOC` и `PYMEM_ALLOCATOR_PYMALLOC_DEBUG` не поддерживаются, если Python собран [`configured using --without-pymalloc`](https://python-all.ru/3.13/using/configure.html#cmdoption-without-pymalloc).222223`PYMEM_ALLOCATOR_MIMALLOC` и `PYMEM_ALLOCATOR_MIMALLOC_DEBUG` не поддерживаются, если Python собран [`configured using --without-mimalloc`](https://python-all.ru/3.13/using/configure.html#cmdoption-without-mimalloc) или отсутствует поддержка атомарных операций.224225См. [Управление памятью](https://python-all.ru/3.13/c-api/memory.html#memory).226227По умолчанию: `PYMEM_ALLOCATOR_NOT_SET`.228229#### `int configure_locale`230231Устанавливает локаль LC\_CTYPE в локаль, предпочитаемую пользователем.232233Если равно `0`, устанавливает элементы [`coerce_c_locale`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig.coerce_c_locale) и [`coerce_c_locale_warn`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig.coerce_c_locale_warn) в `0`.234235См. [кодировку локали](https://python-all.ru/3.13/glossary.html#term-locale-encoding).236237По умолчанию: `1` в конфигурации Python, `0` в изолированной конфигурации.238239#### `int coerce_c_locale`240241Если равно `2`, принудительно переключает локаль C.242243Если равно `1`, читает локаль LC\_CTYPE, чтобы решить, нужно ли её принудительно менять.244245См. [кодировку локали](https://python-all.ru/3.13/glossary.html#term-locale-encoding).246247По умолчанию: `-1` в конфигурации Python, `0` в изолированной конфигурации.248249#### `int coerce_c_locale_warn`250251Если не равно нулю, выводит предупреждение при принудительном переключении локали C.252253По умолчанию: `-1` в конфигурации Python, `0` в изолированной конфигурации.254255#### `int dev_mode`256257[Режим разработки Python](https://python-all.ru/3.13/library/devmode.html#devmode): см. [`PyConfig.dev_mode`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.dev_mode).258259По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.260261#### `int isolated`262263Изолированный режим: см. [`PyConfig.isolated`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.isolated).264265По умолчанию: `0` в режиме Python, `1` в изолированном режиме.266267#### `int legacy_windows_fs_encoding`268269Если не равно нулю:270271- Устанавливает [`PyPreConfig.utf8_mode`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig.utf8_mode) в `0`,272- Устанавливает [`PyConfig.filesystem_encoding`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.filesystem_encoding) в `"mbcs"`,273- Устанавливает [`PyConfig.filesystem_errors`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.filesystem_errors) в `"replace"`.274275Инициализируется из значения переменной окружения [`PYTHONLEGACYWINDOWSFSENCODING`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONLEGACYWINDOWSFSENCODING).276277Доступно только в Windows. Макрос `#ifdef MS_WINDOWS` можно использовать для кода, зависящего от Windows.278279По умолчанию: `0`.280281#### `int parse_argv`282283Если не равно нулю, [`Py_PreInitializeFromArgs()`](https://python-all.ru/3.13/c-api/init_config.html#c.Py_PreInitializeFromArgs) и [`Py_PreInitializeFromBytesArgs()`](https://python-all.ru/3.13/c-api/init_config.html#c.Py_PreInitializeFromBytesArgs) обрабатывают свой аргумент `argv` так же, как обычный Python обрабатывает аргументы командной строки: см. [Аргументы командной строки](https://python-all.ru/3.13/using/cmdline.html#using-on-cmdline).284285По умолчанию: `1` в конфигурации Python, `0` в изолированной конфигурации.286287#### `int use_environment`288289Использовать [переменные окружения](https://python-all.ru/3.13/using/cmdline.html#using-on-envvars)? См. [`PyConfig.use_environment`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.use_environment).290291По умолчанию: `1` в конфигурации Python и `0` в изолированной конфигурации.292293#### `int utf8_mode`294295Если не равно нулю, включает [Режим UTF-8 Python](https://python-all.ru/3.13/library/os.html#utf8-mode).296297Устанавливается в `0` или `1` опцией командной строки [`-X utf8`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONUTF8`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONUTF8).298299Также устанавливается в `1`, если локаль `LC_CTYPE` равна `C` или `POSIX`.300301По умолчанию: `-1` в конфигурации Python и `0` в изолированной конфигурации.302303## Предварительная инициализация Python с PyPreConfig304305Предварительная инициализация Python:306307- Устанавливает распределители памяти Python ([`PyPreConfig.allocator`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig.allocator))308- Настраивает локаль LC\_CTYPE ([кодировка локали](https://python-all.ru/3.13/glossary.html#term-locale-encoding))309- Устанавливает [Режим UTF-8 Python](https://python-all.ru/3.13/library/os.html#utf8-mode) ([`PyPreConfig.utf8_mode`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig.utf8_mode))310311Текущая предварительная конфигурация (тип `PyPreConfig`) хранится в `_PyRuntime.preconfig`.312313Функции для предварительной инициализации Python:314315#### `PyStatus Py_PreInitialize(const PyPreConfig *preconfig)`316317Преинициализировать Python из предварительной конфигурации *preconfig*.318319*preconfig* не должен быть `NULL`.320321#### `PyStatus Py_PreInitializeFromBytesArgs(const PyPreConfig *preconfig, int argc, char *const *argv)`322323Преинициализировать Python из предварительной конфигурации *preconfig*.324325Обрабатывает аргументы командной строки *argv* (байтовые строки), если [`parse_argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig.parse_argv) в *preconfig* не равно нулю.326327*preconfig* не должен быть `NULL`.328329#### `PyStatus Py_PreInitializeFromArgs(const PyPreConfig *preconfig, int argc, wchar_t *const *argv)`330331Преинициализировать Python из предварительной конфигурации *preconfig*.332333Разобрать аргументы командной строки *argv* (широкие строки), если [`parse_argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig.parse_argv) структуры *preconfig* не равен нулю.334335*preconfig* не должен быть `NULL`.336337Вызывающий код отвечает за обработку исключений (ошибка или выход) с помощью [`PyStatus_Exception()`](https://python-all.ru/3.13/c-api/init_config.html#c.PyStatus_Exception) и [`Py_ExitStatusException()`](https://python-all.ru/3.13/c-api/init_config.html#c.Py_ExitStatusException).338339Для [конфигурации Python](https://python-all.ru/3.13/c-api/init_config.html#init-python-config) ([`PyPreConfig_InitPythonConfig()`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig_InitPythonConfig)), если Python инициализируется с аргументами командной строки, эти аргументы также должны быть переданы в преинициализацию Python, поскольку они влияют на предварительную конфигурацию, например, на кодировки. Например, параметр командной строки [`-X utf8`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X) включает [режим UTF-8 Python](https://python-all.ru/3.13/library/os.html#utf8-mode).340341`PyMem_SetAllocator()` можно вызывать после [`Py_PreInitialize()`](https://python-all.ru/3.13/c-api/init_config.html#c.Py_PreInitialize) и до [`Py_InitializeFromConfig()`](https://python-all.ru/3.13/c-api/init.html#c.Py_InitializeFromConfig), чтобы установить собственный распределитель памяти. Его можно вызывать до `Py_PreInitialize()`, если [`PyPreConfig.allocator`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig.allocator) установлен в `PYMEM_ALLOCATOR_NOT_SET`.342343Функции выделения памяти Python, такие как [`PyMem_RawMalloc()`](https://python-all.ru/3.13/c-api/memory.html#c.PyMem_RawMalloc), не должны использоваться до преинициализации Python, тогда как прямой вызов `malloc()` и `free()` всегда безопасен. [`Py_DecodeLocale()`](https://python-all.ru/3.13/c-api/sys.html#c.Py_DecodeLocale) не должна вызываться до преинициализации Python.344345Пример использования преинициализации для включения [режима UTF-8 Python](https://python-all.ru/3.13/library/os.html#utf8-mode):346347```c348PyStatus status;349PyPreConfig preconfig;350PyPreConfig_InitPythonConfig(&preconfig);351352preconfig.utf8_mode = 1;353354status = Py_PreInitialize(&preconfig);355if (PyStatus_Exception(status)) {356 Py_ExitStatusException(status);357}358359/* на этом этапе Python использует кодировку UTF-8 */360361Py_Initialize();362/* ... использовать Python API здесь ... */363Py_Finalize();364```365366## PyConfig367368#### `type PyConfig`369370Структура, содержащая большинство параметров для настройки Python.371372После завершения необходимо использовать функцию [`PyConfig_Clear()`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig_Clear) для освобождения памяти конфигурации.373374Методы структуры:375376#### `void PyConfig_InitPythonConfig(PyConfig *config)`377378Инициализировать конфигурацию с помощью [конфигурации Python](https://python-all.ru/3.13/c-api/init_config.html#init-python-config).379380#### `void PyConfig_InitIsolatedConfig(PyConfig *config)`381382Инициализировать конфигурацию с помощью [изолированной конфигурации](https://python-all.ru/3.13/c-api/init_config.html#init-isolated-conf).383384#### `PyStatus PyConfig_SetString(PyConfig *config, wchar_t *const *config_str, const wchar_t *str)`385386Копировать широкую строку *str* в `*config_str`.387388[Предварительно инициализировать Python](https://python-all.ru/3.13/c-api/init_config.html#c-preinit) при необходимости.389390#### `PyStatus PyConfig_SetBytesString(PyConfig *config, wchar_t *const *config_str, const char *str)`391392Декодировать *str* с помощью [`Py_DecodeLocale()`](https://python-all.ru/3.13/c-api/sys.html#c.Py_DecodeLocale) и записать результат в `*config_str`.393394[Предварительно инициализировать Python](https://python-all.ru/3.13/c-api/init_config.html#c-preinit) при необходимости.395396#### `PyStatus PyConfig_SetArgv(PyConfig *config, int argc, wchar_t *const *argv)`397398Установить аргументы командной строки (поле [`argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv) структуры *config*) из списка широких строк *argv*.399400[Предварительно инициализировать Python](https://python-all.ru/3.13/c-api/init_config.html#c-preinit) при необходимости.401402#### `PyStatus PyConfig_SetBytesArgv(PyConfig *config, int argc, char *const *argv)`403404Установить аргументы командной строки (поле [`argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv) структуры *config*) из списка байтовых строк *argv*. Декодировать байты с помощью [`Py_DecodeLocale()`](https://python-all.ru/3.13/c-api/sys.html#c.Py_DecodeLocale).405406[Предварительно инициализировать Python](https://python-all.ru/3.13/c-api/init_config.html#c-preinit) при необходимости.407408#### `PyStatus PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, Py_ssize_t length, wchar_t **items)`409410Задать список широких строк *list* с длиной *length* и элементами *items*.411412[Предварительно инициализировать Python](https://python-all.ru/3.13/c-api/init_config.html#c-preinit) при необходимости.413414#### `PyStatus PyConfig_Read(PyConfig *config)`415416Считывает всю конфигурацию Python.417418Поля, которые уже инициализированы, остаются без изменений.419420Поля для [конфигурации путей](https://python-all.ru/3.13/c-api/init_config.html#init-path-config) больше не вычисляются и не изменяются при вызове этой функции, начиная с Python 3.11.421422Функция [`PyConfig_Read()`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig_Read) разбирает аргументы [`PyConfig.argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv) только один раз: [`PyConfig.parse_argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.parse_argv) устанавливается в `2` после разбора аргументов. Поскольку аргументы Python удаляются из `PyConfig.argv`, повторный разбор аргументов приведёт к тому, что параметры приложения будут интерпретироваться как параметры Python.423424[Предварительно инициализировать Python](https://python-all.ru/3.13/c-api/init_config.html#c-preinit) при необходимости.425426Изменено в версии 3.10: Аргументы [`PyConfig.argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv) теперь анализируются только один раз, [`PyConfig.parse_argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.parse_argv) устанавливается в `2` после анализа аргументов, и аргументы анализируются только если `PyConfig.parse_argv` равно `1`.427428Изменено в версии 3.11: [`PyConfig_Read()`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig_Read) больше не вычисляет все пути, и поэтому поля, перечисленные в [Конфигурации путей Python](https://python-all.ru/3.13/c-api/init_config.html#init-path-config), могут больше не обновляться до вызова [`Py_InitializeFromConfig()`](https://python-all.ru/3.13/c-api/init.html#c.Py_InitializeFromConfig).429430#### `void PyConfig_Clear(PyConfig *config)`431432Освобождает память конфигурации.433434Большинство методов `PyConfig` [предварительно инициализируют Python](https://python-all.ru/3.13/c-api/init_config.html#c-preinit) при необходимости. В этом случае конфигурация предварительной инициализации Python ([`PyPreConfig`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig)) основывается на [`PyConfig`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig). Если настраиваются поля конфигурации, общие с `PyPreConfig`, они должны быть установлены до вызова метода `PyConfig`:435436- [`PyConfig.dev_mode`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.dev_mode)437- [`PyConfig.isolated`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.isolated)438- [`PyConfig.parse_argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.parse_argv)439- [`PyConfig.use_environment`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.use_environment)440441Более того, если используется [`PyConfig_SetArgv()`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig_SetArgv) или [`PyConfig_SetBytesArgv()`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig_SetBytesArgv), этот метод должен вызываться перед другими методами, так как конфигурация предварительной инициализации зависит от аргументов командной строки (если [`parse_argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.parse_argv) не равно нулю).442443Вызывающий эти методы отвечает за обработку исключений (ошибка или выход) с помощью `PyStatus_Exception()` и `Py_ExitStatusException()`.444445Поля структуры:446447#### `PyWideStringList argv`448449Устанавливает аргументы командной строки [`sys.argv`](https://python-all.ru/3.13/library/sys.html#sys.argv) на основе [`argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv). Эти параметры похожи на передаваемые функции `main()` программы, с той разницей, что первый элемент должен указывать на исполняемый скрипт, а не на исполняемый файл, запускающий интерпретатор Python. Если скрипт для запуска отсутствует, первый элемент в `argv` может быть пустой строкой.450451Устанавливает [`parse_argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.parse_argv) в `1` для анализа [`argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv) таким же образом, как обычный Python анализирует аргументы командной строки Python, а затем для удаления аргументов Python из `argv`.452453Если [`argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv) пуст, добавляется пустая строка, чтобы гарантировать, что [`sys.argv`](https://python-all.ru/3.13/library/sys.html#sys.argv) всегда существует и никогда не пуст.454455По умолчанию: `NULL`.456457См. также член [`orig_argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.orig_argv).458459#### `int safe_path`460461Если равно нулю, `Py_RunMain()` добавляет потенциально небезопасный путь в начало [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path) при запуске:462463- Если [`argv[0]`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv) равен `L"-m"` (`python -m module`), добавляет текущий рабочий каталог в начало.464- Если выполняется скрипт (`python script.py`), добавляет каталог скрипта в начало. Если это символическая ссылка, разрешает символические ссылки.465- В противном случае (`python -c code` и `python`) добавляет пустую строку в начало, что означает текущий рабочий каталог.466467Устанавливается в `1` опцией командной строки [`-P`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-P) и переменной окружения [`PYTHONSAFEPATH`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONSAFEPATH).468469По умолчанию: `0` в конфигурации Python, `1` в изолированной конфигурации.470471Добавлено в версии 3.12.472473#### `wchar_t *base_exec_prefix`474475[`sys.base_exec_prefix`](https://python-all.ru/3.13/library/sys.html#sys.base_exec_prefix).476477По умолчанию: `NULL`.478479Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.13/c-api/init_config.html#init-path-config).480481См. также [`PyConfig.exec_prefix`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.exec_prefix).482483#### `wchar_t *base_executable`484485Базовый исполняемый файл Python: `sys._base_executable`.486487Устанавливается переменной окружения `__PYVENV_LAUNCHER__`.488489Устанавливается из [`PyConfig.executable`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.executable), если `NULL`.490491По умолчанию: `NULL`.492493Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.13/c-api/init_config.html#init-path-config).494495См. также [`PyConfig.executable`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.executable).496497#### `wchar_t *base_prefix`498499[`sys.base_prefix`](https://python-all.ru/3.13/library/sys.html#sys.base_prefix).500501По умолчанию: `NULL`.502503Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.13/c-api/init_config.html#init-path-config).504505См. также [`PyConfig.prefix`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.prefix).506507#### `int buffered_stdio`508509Если равно `0`, а [`configure_c_stdio`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.configure_c_stdio) не равно нулю, отключает буферизацию для потоков C stdout и stderr.510511Устанавливается в `0` опцией командной строки [`-u`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-u) и переменной окружения [`PYTHONUNBUFFERED`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONUNBUFFERED).512513stdin всегда открывается в буферизированном режиме.514515По умолчанию: `1`.516517#### `int bytes_warning`518519Если равно `1`, выдаётся предупреждение при сравнении [`bytes`](https://python-all.ru/3.13/library/stdtypes.html#bytes) или [`bytearray`](https://python-all.ru/3.13/library/stdtypes.html#bytearray) с [`str`](https://python-all.ru/3.13/library/stdtypes.html#str), или при сравнении `bytes` с [`int`](https://python-all.ru/3.13/library/functions.html#int).520521Если больше или равно `2`, в таких случаях возбуждается исключение [`BytesWarning`](https://python-all.ru/3.13/library/exceptions.html#BytesWarning).522523Увеличивается опцией командной строки [`-b`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-b).524525По умолчанию: `0`.526527#### `int warn_default_encoding`528529Если не равно нулю, выдаётся предупреждение [`EncodingWarning`](https://python-all.ru/3.13/library/exceptions.html#EncodingWarning), когда [`io.TextIOWrapper`](https://python-all.ru/3.13/library/io.html#io.TextIOWrapper) использует свою кодировку по умолчанию. Подробнее см. [Opt-in EncodingWarning](https://python-all.ru/3.13/library/io.html#io-encoding-warning).530531По умолчанию: `0`.532533Добавлено в версии 3.10.534535#### `int code_debug_ranges`536537Если равно `0`, отключает включение сопоставлений конечных строк и столбцов в объекты кода. Также отключает печать кареток в трассировках, указывающих на конкретные места ошибок.538539Устанавливается в `0` переменной окружения [`PYTHONNODEBUGRANGES`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONNODEBUGRANGES) и параметром командной строки [`-X no_debug_ranges`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X).540541По умолчанию: `1`.542543Добавлено в версии 3.12.544545#### `wchar_t *check_hash_pycs_mode`546547Управляет поведением проверки hash-based `.pyc` файлов: значение параметра командной строки [`--check-hash-based-pycs`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-check-hash-based-pycs).548549Допустимые значения:550551- `L"always"`: Хешировать исходный файл для инвалидации независимо от значения флага ‘check\_source’.552- `L"never"`: Считать, что хеш-основанные pyc всегда корректны.553- `L"default"`: Флаг ‘check\_source’ в хеш-основанных pyc определяет недействительность.554555По умолчанию: `L"default"`.556557См. также [**PEP 552**](https://python-all.ru/3.13/c-api/init_config.html) «Детерминированные pyc».558559#### `int configure_c_stdio`560561Если не равно нулю, настраиваются стандартные потоки C:562563- В Windows устанавливается двоичный режим (`O_BINARY`) для stdin, stdout и stderr.564- Если [`buffered_stdio`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.buffered_stdio) равно нулю, буферизация потоков stdin, stdout и stderr отключается.565- Если [`interactive`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.interactive) не равно нулю, буферизация потоков stdin и stdout включается (только stdout в Windows).566567По умолчанию: `1` в конфигурации Python, `0` в изолированной конфигурации.568569#### `int dev_mode`570571Если не равно нулю, включается [режим разработки Python](https://python-all.ru/3.13/library/devmode.html#devmode).572573Устанавливается в `1` опцией [`-X dev`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONDEVMODE`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONDEVMODE).574575По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.576577#### `int dump_refs`578579Сбрасывать ссылки Python?580581Если не равно нулю, сбрасывать все объекты, которые все еще существуют при завершении.582583Устанавливается в `1` переменной окружения [`PYTHONDUMPREFS`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONDUMPREFS).584585Требуется специальная сборка Python с определённым макросом `Py_TRACE_REFS`: см. [`configure --with-trace-refs option`](https://python-all.ru/3.13/using/configure.html#cmdoption-with-trace-refs).586587По умолчанию: `0`.588589#### `wchar_t *exec_prefix`590591Префикс каталога, специфичного для сайта, где устанавливаются платформозависимые файлы Python: [`sys.exec_prefix`](https://python-all.ru/3.13/library/sys.html#sys.exec_prefix).592593По умолчанию: `NULL`.594595Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.13/c-api/init_config.html#init-path-config).596597См. также [`PyConfig.base_exec_prefix`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.base_exec_prefix).598599#### `wchar_t *executable`600601Абсолютный путь к исполняемому двоичному файлу интерпретатора Python: [`sys.executable`](https://python-all.ru/3.13/library/sys.html#sys.executable).602603По умолчанию: `NULL`.604605Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.13/c-api/init_config.html#init-path-config).606607См. также [`PyConfig.base_executable`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.base_executable).608609#### `int faulthandler`610611Включить faulthandler?612613Если не равно нулю, вызывается [`faulthandler.enable()`](https://python-all.ru/3.13/library/faulthandler.html#faulthandler.enable) при запуске.614615Устанавливается в `1` с помощью [`-X faulthandler`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONFAULTHANDLER`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONFAULTHANDLER).616617По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.618619#### `wchar_t *filesystem_encoding`620621[Кодировка файловой системы](https://python-all.ru/3.13/glossary.html#term-filesystem-encoding-and-error-handler): [`sys.getfilesystemencoding()`](https://python-all.ru/3.13/library/sys.html#sys.getfilesystemencoding).622623На macOS, Android и VxWorks: по умолчанию используется `"utf-8"`.624625На Windows: по умолчанию используется `"utf-8"` или `"mbcs"`, если [`legacy_windows_fs_encoding`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig.legacy_windows_fs_encoding) параметра [`PyPreConfig`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig) не равно нулю.626627Кодировка по умолчанию на других платформах:628629- `"utf-8"`, если [`PyPreConfig.utf8_mode`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig.utf8_mode) не равно нулю.630- `"ascii"`, если Python определяет, что `nl_langinfo(CODESET)` объявляет кодировку ASCII, в то время как функция `mbstowcs()` декодирует из другой кодировки (обычно Latin1).631- `"utf-8"`, если `nl_langinfo(CODESET)` возвращает пустую строку.632- В противном случае используется [кодировка локали](https://python-all.ru/3.13/glossary.html#term-locale-encoding): результат `nl_langinfo(CODESET)`.633634При запуске Python имя кодировки нормализуется до имени кодека Python. Например, `"ANSI_X3.4-1968"` заменяется на `"ascii"`.635636См. также член [`filesystem_errors`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.filesystem_errors).637638#### `wchar_t *filesystem_errors`639640[Обработчик ошибок файловой системы](https://python-all.ru/3.13/glossary.html#term-filesystem-encoding-and-error-handler): [`sys.getfilesystemencodeerrors()`](https://python-all.ru/3.13/library/sys.html#sys.getfilesystemencodeerrors).641642На Windows: по умолчанию используется `"surrogatepass"` или `"replace"`, если [`legacy_windows_fs_encoding`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig.legacy_windows_fs_encoding) параметра [`PyPreConfig`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig) не равно нулю.643644На других платформах: по умолчанию используется `"surrogateescape"`.645646Поддерживаемые обработчики ошибок:647648- `"strict"`649- `"surrogateescape"`650- `"surrogatepass"` (поддерживается только с кодировкой UTF-8)651652См. также член [`filesystem_encoding`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.filesystem_encoding).653654#### `unsigned long hash_seed`655656#### `int use_hash_seed`657658Случайное зерно хеш-функции.659660Если [`use_hash_seed`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.use_hash_seed) равен нулю, начальное значение (seed) выбирается случайным образом при запуске Python, а [`hash_seed`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.hash_seed) игнорируется.661662Устанавливается переменной окружения [`PYTHONHASHSEED`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONHASHSEED).663664Значение *use\_hash\_seed* по умолчанию: `-1` в режиме Python, `0` в изолированном режиме.665666#### `wchar_t *home`667668Задаёт каталог Python «home» по умолчанию, то есть расположение стандартных библиотек Python (см. [`PYTHONHOME`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONHOME)).669670Устанавливается переменной окружения [`PYTHONHOME`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONHOME).671672По умолчанию: `NULL`.673674Часть входных данных [конфигурации путей Python](https://python-all.ru/3.13/c-api/init_config.html#init-path-config).675676#### `int import_time`677678Если не ноль, профилировать время импорта.679680Значение `1` задаётся опцией [`-X importtime`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONPROFILEIMPORTTIME`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONPROFILEIMPORTTIME).681682По умолчанию: `0`.683684#### `int inspect`685686Войти в интерактивный режим после выполнения скрипта или команды.687688Если больше `0`, включить inspect: когда скрипт передан первым аргументом или используется опция -c, войти в интерактивный режим после выполнения скрипта или команды, даже если [`sys.stdin`](https://python-all.ru/3.13/library/sys.html#sys.stdin) не выглядит как терминал.689690Увеличивается опцией командной строки [`-i`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-i). Устанавливается в `1`, если переменная окружения [`PYTHONINSPECT`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONINSPECT) не пуста.691692По умолчанию: `0`.693694#### `int install_signal_handlers`695696Устанавливать обработчики сигналов Python?697698По умолчанию: `1` в режиме Python, `0` в изолированном режиме.699700#### `int interactive`701702Если больше `0`, включить интерактивный режим (REPL).703704Увеличивается опцией командной строки [`-i`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-i).705706По умолчанию: `0`.707708#### `int int_max_str_digits`709710Настраивает [ограничение длины преобразования целого числа в строку](https://python-all.ru/3.13/library/stdtypes.html#int-max-str-digits). Начальное значение `-1` означает, что значение будет взято из командной строки или окружения, либо по умолчанию равно 4300 ([`sys.int_info.default_max_str_digits`](https://python-all.ru/3.13/library/sys.html#sys.int_info.default_max_str_digits)). Значение `0` отключает ограничение. Значения больше нуля, но меньше 640 ([`sys.int_info.str_digits_check_threshold`](https://python-all.ru/3.13/library/sys.html#sys.int_info.str_digits_check_threshold)) не поддерживаются и вызовут ошибку.711712Настраивается флагом командной строки [`-X int_max_str_digits`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X) или переменной окружения [`PYTHONINTMAXSTRDIGITS`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONINTMAXSTRDIGITS).713714По умолчанию: `-1` в режиме Python. 4300 ([`sys.int_info.default_max_str_digits`](https://python-all.ru/3.13/library/sys.html#sys.int_info.default_max_str_digits)) в изолированном режиме.715716Добавлено в версии 3.12.717718#### `int cpu_count`719720Если значение [`cpu_count`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.cpu_count) не равно `-1`, то оно переопределит возвращаемые значения [`os.cpu_count()`](https://python-all.ru/3.13/library/os.html#os.cpu_count), [`os.process_cpu_count()`](https://python-all.ru/3.13/library/os.html#os.process_cpu_count) и [`multiprocessing.cpu_count()`](https://python-all.ru/3.13/library/multiprocessing.html#multiprocessing.cpu_count).721722Настраивается флагом командной строки `-X cpu_count=n|default` или переменной окружения [`PYTHON_CPU_COUNT`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHON_CPU_COUNT).723724По умолчанию: `-1`.725726Добавлено в версии 3.13.727728#### `int isolated`729730Если больше `0`, включить изолированный режим:731732- Установить [`safe_path`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.safe_path) в `1`: не добавлять потенциально небезопасный путь к [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path) при запуске Python, например, текущий каталог, каталог скрипта или пустую строку.733- Установить [`use_environment`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.use_environment) в `0`: игнорировать переменные окружения `PYTHON`.734- Установить [`user_site_directory`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.user_site_directory) в `0`: не добавлять каталог пользовательских сайт-пакетов в [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path).735- REPL Python не импортирует [`readline`](https://python-all.ru/3.13/library/readline.html#module-readline) и не включает стандартную конфигурацию readline в интерактивных приглашениях.736737Устанавливается в `1` параметром командной строки [`-I`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-I).738739По умолчанию: `0` в режиме Python, `1` в изолированном режиме.740741См. также [Изолированная конфигурация](https://python-all.ru/3.13/c-api/init_config.html#init-isolated-conf) и [`PyPreConfig.isolated`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig.isolated).742743#### `int legacy_windows_stdio`744745Если не ноль, использовать [`io.FileIO`](https://python-all.ru/3.13/library/io.html#io.FileIO) вместо `io._WindowsConsoleIO` для [`sys.stdin`](https://python-all.ru/3.13/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.13/library/sys.html#sys.stdout) и [`sys.stderr`](https://python-all.ru/3.13/library/sys.html#sys.stderr).746747Устанавливается в `1`, если переменная окружения [`PYTHONLEGACYWINDOWSSTDIO`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONLEGACYWINDOWSSTDIO) установлена в непустую строку.748749Доступно только в Windows. Макрос `#ifdef MS_WINDOWS` можно использовать для кода, зависящего от Windows.750751По умолчанию: `0`.752753См. также [**PEP 528**](https://python-all.ru/3.13/c-api/init_config.html) (Изменение кодировки консоли Windows на UTF-8).754755#### `int malloc_stats`756757Если не ноль, вывести статистику по [аллокатору памяти Python pymalloc](https://python-all.ru/3.13/c-api/memory.html#pymalloc) при завершении.758759Устанавливается в `1` переменной окружения [`PYTHONMALLOCSTATS`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONMALLOCSTATS).760761Параметр игнорируется, если Python [`configured using the --without-pymalloc option`](https://python-all.ru/3.13/using/configure.html#cmdoption-without-pymalloc).762763По умолчанию: `0`.764765#### `wchar_t *platlibdir`766767Имя каталога библиотек платформы: [`sys.platlibdir`](https://python-all.ru/3.13/library/sys.html#sys.platlibdir).768769Устанавливается переменной окружения [`PYTHONPLATLIBDIR`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONPLATLIBDIR).770771По умолчанию: значение макроса `PLATLIBDIR`, которое задаётся [`configure --with-platlibdir option`](https://python-all.ru/3.13/using/configure.html#cmdoption-with-platlibdir) (по умолчанию: `"lib"` или `"DLLs"` в Windows).772773Часть входных данных [конфигурации путей Python](https://python-all.ru/3.13/c-api/init_config.html#init-path-config).774775Добавлено в версии 3.9.776777Изменено в версии 3.11: Этот макрос теперь используется в Windows для поиска модулей расширения стандартной библиотеки, обычно в `DLLs`. Однако для совместимости учтите, что это значение игнорируется для любых нестандартных расположений, включая сборки в дереве исходников и виртуальные окружения.778779#### `wchar_t *pythonpath_env`780781Пути поиска модулей ([`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path)) в виде строки, разделённой `DELIM` ([`os.pathsep`](https://python-all.ru/3.13/library/os.html#os.pathsep)).782783Устанавливается переменной окружения [`PYTHONPATH`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONPATH).784785По умолчанию: `NULL`.786787Часть входных данных [конфигурации путей Python](https://python-all.ru/3.13/c-api/init_config.html#init-path-config).788789#### `PyWideStringList module_search_paths`790791#### `int module_search_paths_set`792793Пути поиска модулей: [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path).794795Если [`module_search_paths_set`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.module_search_paths_set) равно `0`, [`Py_InitializeFromConfig()`](https://python-all.ru/3.13/c-api/init.html#c.Py_InitializeFromConfig) заменит [`module_search_paths`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.module_search_paths) и установит `module_search_paths_set` в `1`.796797По умолчанию: пустой список (`module_search_paths`) и `0` (`module_search_paths_set`).798799Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.13/c-api/init_config.html#init-path-config).800801#### `int optimization_level`802803Уровень оптимизации компиляции:804805- `0`: Оптимизатор Peephole, устанавливает `__debug__` в `True`.806- `1`: Уровень 0, удаляет утверждения, устанавливает `__debug__` в `False`.807- `2`: Уровень 1, удаляет строки документации.808809Увеличивается опцией командной строки [`-O`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-O). Устанавливается в значение переменной окружения [`PYTHONOPTIMIZE`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONOPTIMIZE).810811По умолчанию: `0`.812813#### `PyWideStringList orig_argv`814815Список исходных аргументов командной строки, переданных исполняемому файлу Python: [`sys.orig_argv`](https://python-all.ru/3.13/library/sys.html#sys.orig_argv).816817Если список [`orig_argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.orig_argv) пуст, а [`argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv) не является списком, содержащим только пустую строку, то [`PyConfig_Read()`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig_Read) копирует `argv` в `orig_argv` перед изменением `argv` (если [`parse_argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.parse_argv) не равно нулю).818819См. также элемент [`argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv) и функцию [`Py_GetArgcArgv()`](https://python-all.ru/3.13/c-api/init_config.html#c.Py_GetArgcArgv).820821По умолчанию: пустой список.822823Добавлено в версии 3.10.824825#### `int parse_argv`826827Разбирать аргументы командной строки?828829Если равно `1`, разбирать [`argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv) так же, как обычный Python разбирает [аргументы командной строки](https://python-all.ru/3.13/using/cmdline.html#using-on-cmdline), и удалять аргументы Python из `argv`.830831Функция [`PyConfig_Read()`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig_Read) разбирает аргументы [`PyConfig.argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv) только один раз: [`PyConfig.parse_argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.parse_argv) устанавливается в `2` после разбора аргументов. Поскольку аргументы Python удаляются из `PyConfig.argv`, повторный разбор аргументов приведёт к тому, что параметры приложения будут интерпретироваться как параметры Python.832833По умолчанию: `1` в режиме Python, `0` в изолированном режиме.834835Изменено в версии 3.10: Аргументы [`PyConfig.argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv) теперь разбираются только если [`PyConfig.parse_argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.parse_argv) равно `1`.836837#### `int parser_debug`838839Режим отладки синтаксического анализатора. Если больше `0`, включает вывод отладки анализатора (только для экспертов, зависит от параметров компиляции).840841Увеличивается опцией командной строки [`-d`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-d). Устанавливается в значение переменной окружения [`PYTHONDEBUG`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONDEBUG).842843Требуется [отладочная сборка Python](https://python-all.ru/3.13/using/configure.html#debug-build) (макрос `Py_DEBUG` должен быть определён).844845По умолчанию: `0`.846847#### `int pathconfig_warnings`848849Если не равно нулю, вычисление конфигурации путей может записывать предупреждения в `stderr`. Если равно `0`, подавлять эти предупреждения.850851По умолчанию: `1` в режиме Python, `0` в изолированном режиме.852853Часть входных данных [конфигурации путей Python](https://python-all.ru/3.13/c-api/init_config.html#init-path-config).854855Изменено в версии 3.11: теперь также применяется на Windows.856857#### `wchar_t *prefix`858859Префикс каталога, специфичный для сайта, в который устанавливаются платформонезависимые файлы Python: [`sys.prefix`](https://python-all.ru/3.13/library/sys.html#sys.prefix).860861По умолчанию: `NULL`.862863Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.13/c-api/init_config.html#init-path-config).864865См. также [`PyConfig.base_prefix`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.base_prefix).866867#### `wchar_t *program_name`868869Имя программы, используемое для инициализации [`executable`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.executable) и в ранних сообщениях об ошибках во время инициализации Python.870871- На macOS используется переменная окружения [`PYTHONEXECUTABLE`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONEXECUTABLE), если она установлена.872- Если определён макрос `WITH_NEXT_FRAMEWORK`, используется переменная окружения `__PYVENV_LAUNCHER__`, если она установлена.873- Используется `argv[0]` из [`argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv), если она доступна и непустая.874- В противном случае используется `L"python"` на Windows или `L"python3"` на других платформах.875876По умолчанию: `NULL`.877878Часть входных данных [конфигурации путей Python](https://python-all.ru/3.13/c-api/init_config.html#init-path-config).879880#### `wchar_t *pycache_prefix`881882Каталог, в который записываются кэшированные файлы `.pyc`: [`sys.pycache_prefix`](https://python-all.ru/3.13/library/sys.html#sys.pycache_prefix).883884Устанавливается опцией командной строки [`-X pycache_prefix=PATH`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONPYCACHEPREFIX`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONPYCACHEPREFIX). Опция командной строки имеет приоритет.885886Если `NULL`, [`sys.pycache_prefix`](https://python-all.ru/3.13/library/sys.html#sys.pycache_prefix) устанавливается в `None`.887888По умолчанию: `NULL`.889890#### `int quiet`891892Тихий режим. Если больше `0`, не отображать авторские права и версию при запуске Python в интерактивном режиме.893894Увеличивается опцией командной строки [`-q`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-q).895896По умолчанию: `0`.897898#### `wchar_t *run_command`899900Значение параметра командной строки [`-c`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-c).901902Используется [`Py_RunMain()`](https://python-all.ru/3.13/c-api/init.html#c.Py_RunMain).903904По умолчанию: `NULL`.905906#### `wchar_t *run_filename`907908Имя файла, переданное в командной строке: последний аргумент командной строки без [`-c`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-c) или [`-m`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-m). Используется функцией [`Py_RunMain()`](https://python-all.ru/3.13/c-api/init.html#c.Py_RunMain).909910Например, устанавливается в `script.py` командной строкой `python3 script.py arg` .911912См. также опцию [`PyConfig.skip_source_first_line`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.skip_source_first_line).913914По умолчанию: `NULL`.915916#### `wchar_t *run_module`917918Значение параметра командной строки [`-m`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-m).919920Используется [`Py_RunMain()`](https://python-all.ru/3.13/c-api/init.html#c.Py_RunMain).921922По умолчанию: `NULL`.923924#### `wchar_t *run_presite`925926`package.module` путь к модулю, который должен быть импортирован до `site.py` запуска927928Устанавливается параметром командной строки [`-X presite=package.module`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHON_PRESITE`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHON_PRESITE). Параметр командной строки имеет приоритет.929930Требуется [отладочная сборка Python](https://python-all.ru/3.13/using/configure.html#debug-build) (макрос `Py_DEBUG` должен быть определён).931932По умолчанию: `NULL`.933934#### `int show_ref_count`935936Показывать общее количество ссылок при выходе (исключая [бессмертные](https://python-all.ru/3.13/glossary.html#term-immortal) объекты)?937938Устанавливается в `1` параметром командной строки [`-X showrefcount`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X).939940Требуется [отладочная сборка Python](https://python-all.ru/3.13/using/configure.html#debug-build) (макрос `Py_REF_DEBUG` должен быть определён).941942По умолчанию: `0`.943944#### `int site_import`945946Импортировать модуль [`site`](https://python-all.ru/3.13/library/site.html#module-site) при запуске?947948Если равно нулю, импорт модуля site и зависящие от site манипуляции с [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path) отключаются.949950Также отключает эти манипуляции, если модуль [`site`](https://python-all.ru/3.13/library/site.html#module-site) импортирован явно (вызовите [`site.main()`](https://python-all.ru/3.13/library/site.html#site.main), чтобы включить их).951952Устанавливается в `0` параметром командной строки [`-S`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-S).953954[`sys.flags.no_site`](https://python-all.ru/3.13/library/sys.html#sys.flags) устанавливается в инвертированное значение [`site_import`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.site_import).955956По умолчанию: `1`.957958#### `int skip_source_first_line`959960Если не ноль, пропустить первую строку исходного кода [`PyConfig.run_filename`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.run_filename).961962Это позволяет использовать не-Unix формы `#!cmd`. Предназначено только для DOS-специфичного хака.963964Устанавливается в `1` параметром командной строки [`-x`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-x).965966По умолчанию: `0`.967968#### `wchar_t *stdio_encoding`969970#### `wchar_t *stdio_errors`971972Кодировка и ошибки кодирования для [`sys.stdin`](https://python-all.ru/3.13/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.13/library/sys.html#sys.stdout) и [`sys.stderr`](https://python-all.ru/3.13/library/sys.html#sys.stderr) (но `sys.stderr` всегда использует обработчик ошибок `"backslashreplace"`).973974Использовать переменную окружения [`PYTHONIOENCODING`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONIOENCODING), если она не пуста.975976Кодировка по умолчанию:977978- `"UTF-8"`, если [`PyPreConfig.utf8_mode`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig.utf8_mode) не равно нулю.979- В противном случае используется [кодировка локали](https://python-all.ru/3.13/glossary.html#term-locale-encoding).980981Обработчик ошибок по умолчанию:982983- В Windows: используется `"surrogateescape"`.984- `"surrogateescape"`, если [`PyPreConfig.utf8_mode`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig.utf8_mode) не равно нулю, или если локаль LC\_CTYPE имеет значение «C» или «POSIX».985- `"strict"` в противном случае.986987См. также [`PyConfig.legacy_windows_stdio`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.legacy_windows_stdio).988989#### `int tracemalloc`990991Включить tracemalloc?992993Если не равно нулю, вызывается [`tracemalloc.start()`](https://python-all.ru/3.13/library/tracemalloc.html#tracemalloc.start) при запуске.994995Устанавливается параметром командной строки [`-X tracemalloc=N`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONTRACEMALLOC`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONTRACEMALLOC).996997По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.998999#### `int perf_profiling`10001001Включить режим совместимости с профилировщиком perf?10021003Если не ноль, инициализировать трамплин perf. См. [Поддержка Python для профилировщика perf в Linux](https://python-all.ru/3.13/howto/perf_profiling.html#perf-profiling) для получения дополнительной информации.10041005Устанавливается параметром командной строки [`-X perf`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHON_PERF_JIT_SUPPORT`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHON_PERF_JIT_SUPPORT) для поддержки perf с указателями стека, а также параметром командной строки `-X perf_jit` и переменной окружения `PYTHON_PERF_JIT_SUPPORT` для поддержки perf с информацией DWARF JIT.10061007По умолчанию: `-1`.10081009Добавлено в версии 3.12.10101011#### `int use_environment`10121013Использовать [переменные окружения](https://python-all.ru/3.13/using/cmdline.html#using-on-envvars)?10141015Если равно нулю, игнорируются [переменные окружения](https://python-all.ru/3.13/using/cmdline.html#using-on-envvars).10161017Устанавливается в `0` переменной окружения [`-E`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-E).10181019По умолчанию: `1` в конфигурации Python и `0` в изолированной конфигурации.10201021#### `int user_site_directory`10221023Если не равно нулю, в [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path) добавляется каталог пользовательского site.10241025Устанавливается в `0` с помощью опций командной строки [`-s`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-s) и [`-I`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-I).10261027Устанавливается в `0` переменной окружения [`PYTHONNOUSERSITE`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONNOUSERSITE).10281029По умолчанию: `1` в режиме Python, `0` в изолированном режиме.10301031#### `int verbose`10321033Подробный режим. Если больше `0`, выводится сообщение каждый раз, когда модуль импортируется, с указанием места (имя файла или встроенный модуль), откуда он загружается.10341035Если больше или равно `2`, выводится сообщение для каждого файла, который проверяется при поиске модуля. Также предоставляет информацию об очистке модулей при завершении.10361037Увеличивается опцией командной строки [`-v`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-v).10381039Устанавливается значением переменной окружения [`PYTHONVERBOSE`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONVERBOSE).10401041По умолчанию: `0`.10421043#### `PyWideStringList warnoptions`10441045Опции модуля [`warnings`](https://python-all.ru/3.13/library/warnings.html#module-warnings) для построения фильтров предупреждений, от низшего к высшему приоритету: [`sys.warnoptions`](https://python-all.ru/3.13/library/sys.html#sys.warnoptions).10461047Модуль [`warnings`](https://python-all.ru/3.13/library/warnings.html#module-warnings) добавляет [`sys.warnoptions`](https://python-all.ru/3.13/library/sys.html#sys.warnoptions) в обратном порядке: последний элемент [`PyConfig.warnoptions`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.warnoptions) становится первым элементом `warnings.filters`, который проверяется первым (наивысший приоритет).10481049Опция командной строки [`-W`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-W) добавляет своё значение в [`warnoptions`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.warnoptions); её можно использовать несколько раз.10501051Переменная окружения [`PYTHONWARNINGS`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONWARNINGS) также может использоваться для добавления опций предупреждений. Можно указать несколько опций, разделённых запятыми (`,`).10521053По умолчанию: пустой список.10541055#### `int write_bytecode`10561057Если равно `0`, Python не будет пытаться записывать файлы `.pyc` при импорте исходных модулей.10581059Устанавливается в `0` опцией командной строки [`-B`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-B) и переменной окружения [`PYTHONDONTWRITEBYTECODE`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONDONTWRITEBYTECODE).10601061[`sys.dont_write_bytecode`](https://python-all.ru/3.13/library/sys.html#sys.dont_write_bytecode) инициализируется инвертированным значением [`write_bytecode`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.write_bytecode).10621063По умолчанию: `1`.10641065#### `PyWideStringList xoptions`10661067Значения опций командной строки [`-X`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X): [`sys._xoptions`](https://python-all.ru/3.13/library/sys.html#sys._xoptions).10681069По умолчанию: пустой список.10701071Если [`parse_argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.parse_argv) не равно нулю, аргументы [`argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv) разбираются так же, как обычный Python разбирает [аргументы командной строки](https://python-all.ru/3.13/using/cmdline.html#using-on-cmdline), а аргументы Python удаляются из `argv`.10721073Параметры [`xoptions`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.xoptions) разбираются для установки других опций: см. опцию командной строки [`-X`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X).10741075Изменено в версии 3.9: Поле `show_alloc_count` было удалено.10761077## Инициализация с PyConfig10781079Инициализация интерпретатора из заполненной структуры конфигурации выполняется вызовом [`Py_InitializeFromConfig()`](https://python-all.ru/3.13/c-api/init.html#c.Py_InitializeFromConfig).10801081Вызывающий код отвечает за обработку исключений (ошибка или выход) с помощью [`PyStatus_Exception()`](https://python-all.ru/3.13/c-api/init_config.html#c.PyStatus_Exception) и [`Py_ExitStatusException()`](https://python-all.ru/3.13/c-api/init_config.html#c.Py_ExitStatusException).10821083Если используются [`PyImport_FrozenModules()`](https://python-all.ru/3.13/c-api/import.html#c.PyImport_FrozenModules), [`PyImport_AppendInittab()`](https://python-all.ru/3.13/c-api/import.html#c.PyImport_AppendInittab) или [`PyImport_ExtendInittab()`](https://python-all.ru/3.13/c-api/import.html#c.PyImport_ExtendInittab), они должны быть установлены или вызваны после предварительной инициализации Python и до инициализации Python. Если Python инициализируется несколько раз, `PyImport_AppendInittab()` или `PyImport_ExtendInittab()` должны вызываться перед каждой инициализацией Python.10841085Текущая конфигурация (тип `PyConfig`) хранится в `PyInterpreterState.config`.10861087Пример установки имени программы:10881089```c1090void init_python(void)1091{1092 PyStatus status;10931094 PyConfig config;1095 PyConfig_InitPythonConfig(&config);10961097 /* Установить имя программы. Неявно предварительно инициализировать Python. */1098 status = PyConfig_SetString(&config, &config.program_name,1099 L"/path/to/my_program");1100 if (PyStatus_Exception(status)) {1101 goto exception;1102 }11031104 status = Py_InitializeFromConfig(&config);1105 if (PyStatus_Exception(status)) {1106 goto exception;1107 }1108 PyConfig_Clear(&config);1109 return;11101111exception:1112 PyConfig_Clear(&config);1113 Py_ExitStatusException(status);1114}1115```11161117Более полный пример изменения конфигурации по умолчанию: прочитать конфигурацию, а затем переопределить некоторые параметры. Обратите внимание, что начиная с версии 3.11 многие параметры не вычисляются до инициализации, поэтому их значения нельзя прочитать из структуры конфигурации. Любые значения, установленные до вызова инициализации, останутся без изменений после инициализации:11181119```c1120PyStatus init_python(const char *program_name)1121{1122 PyStatus status;11231124 PyConfig config;1125 PyConfig_InitPythonConfig(&config);11261127 /* Установить имя программы перед чтением конфигурации1128 (декодировать байтовую строку из кодировки локали).11291130 Неявно предварительно инициализировать Python. */1131 status = PyConfig_SetBytesString(&config, &config.program_name,1132 program_name);1133 if (PyStatus_Exception(status)) {1134 goto done;1135 }11361137 /* Прочитать всю конфигурацию сразу */1138 status = PyConfig_Read(&config);1139 if (PyStatus_Exception(status)) {1140 goto done;1141 }11421143 /* Указать sys.path явно */1144 /* Если требуется изменить стандартный набор путей, завершите1145 сначала инициализация, а затем использование PySys_GetObject("path") */1146 config.module_search_paths_set = 1;1147 status = PyWideStringList_Append(&config.module_search_paths,1148 L"/path/to/stdlib");1149 if (PyStatus_Exception(status)) {1150 goto done;1151 }1152 status = PyWideStringList_Append(&config.module_search_paths,1153 L"/path/to/more/modules");1154 if (PyStatus_Exception(status)) {1155 goto done;1156 }11571158 /* Переопределить исполняемый файл, вычисленный PyConfig_Read() */1159 status = PyConfig_SetString(&config, &config.executable,1160 L"/path/to/my_executable");1161 if (PyStatus_Exception(status)) {1162 goto done;1163 }11641165 status = Py_InitializeFromConfig(&config);11661167done:1168 PyConfig_Clear(&config);1169 return status;1170}1171```11721173## Изолированная конфигурация11741175Функции [`PyPreConfig_InitIsolatedConfig()`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig_InitIsolatedConfig) и [`PyConfig_InitIsolatedConfig()`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig_InitIsolatedConfig) создают конфигурацию для изоляции Python от системы. Например, для встраивания Python в приложение.11761177Эта конфигурация игнорирует глобальные переменные конфигурации, переменные окружения, аргументы командной строки ([`PyConfig.argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.argv) не разбирается) и каталог пользовательских сайтов. Стандартные потоки C (например: `stdout`) и локаль LC\_CTYPE остаются без изменений. Обработчики сигналов не устанавливаются.11781179Конфигурационные файлы по-прежнему используются с этой конфигурацией для определения путей, которые не указаны. Убедитесь, что [`PyConfig.home`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.home) указан, чтобы избежать вычисления конфигурации путей по умолчанию.11801181## Конфигурация Python11821183Функции [`PyPreConfig_InitPythonConfig()`](https://python-all.ru/3.13/c-api/init_config.html#c.PyPreConfig_InitPythonConfig) и [`PyConfig_InitPythonConfig()`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig_InitPythonConfig) создают конфигурацию для сборки настраиваемого Python, который ведёт себя как обычный Python.11841185Переменные окружения и аргументы командной строки используются для настройки Python, тогда как глобальные переменные конфигурации игнорируются.11861187Эта функция включает принудительное использование локали C ([**PEP 538**](https://python-all.ru/3.13/c-api/init_config.html)) и [Режим Python UTF-8](https://python-all.ru/3.13/library/os.html#utf8-mode) ([**PEP 540**](https://python-all.ru/3.13/c-api/init_config.html)) в зависимости от локали LC\_CTYPE, переменных окружения [`PYTHONUTF8`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONUTF8) и [`PYTHONCOERCECLOCALE`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONCOERCECLOCALE).11881189## Конфигурация путей Python11901191[`PyConfig`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig) содержит несколько полей для конфигурации путей:11921193- Входные данные конфигурации путей:11941195 - [`PyConfig.home`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.home)1196 - [`PyConfig.platlibdir`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.platlibdir)1197 - [`PyConfig.pathconfig_warnings`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.pathconfig_warnings)1198 - [`PyConfig.program_name`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.program_name)1199 - [`PyConfig.pythonpath_env`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.pythonpath_env)1200 - текущий рабочий каталог: для получения абсолютных путей1201 - переменная окружения `PATH` для получения полного пути программы (из [`PyConfig.program_name`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.program_name))1202 - переменная окружения `__PYVENV_LAUNCHER__`1203 - (только Windows) Пути приложений в реестре в разделе “SoftwarePythonPythonCoreX.YPythonPath” для HKEY\_CURRENT\_USER и HKEY\_LOCAL\_MACHINE (где X.Y – версия Python).1204- Выходные поля конфигурации путей:12051206 - [`PyConfig.base_exec_prefix`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.base_exec_prefix)1207 - [`PyConfig.base_executable`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.base_executable)1208 - [`PyConfig.base_prefix`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.base_prefix)1209 - [`PyConfig.exec_prefix`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.exec_prefix)1210 - [`PyConfig.executable`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.executable)1211 - [`PyConfig.module_search_paths_set`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.module_search_paths_set), [`PyConfig.module_search_paths`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.module_search_paths)1212 - [`PyConfig.prefix`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.prefix)12131214Если хотя бы одно «выходное поле» не установлено, Python вычисляет конфигурацию путей, чтобы заполнить неустановленные поля. Если [`module_search_paths_set`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.module_search_paths_set) равно `0`, [`module_search_paths`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.module_search_paths) переопределяется, а `module_search_paths_set` устанавливается в `1`.12151216Можно полностью игнорировать функцию, вычисляющую конфигурацию путей по умолчанию, явно задав все перечисленные выше выходные поля конфигурации путей. Строка считается заданной, даже если она не пуста. `module_search_paths` считается заданным, если `module_search_paths_set` установлено в `1`. В этом случае `module_search_paths` будет использоваться без изменений.12171218Установите [`pathconfig_warnings`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.pathconfig_warnings) в `0`, чтобы подавить предупреждения при вычислении конфигурации путей (только Unix, Windows не регистрирует предупреждения).12191220Если поля [`base_prefix`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.base_prefix) или [`base_exec_prefix`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.base_exec_prefix) не заданы, они наследуют свои значения от [`prefix`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.prefix) и [`exec_prefix`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.exec_prefix) соответственно.12211222[`Py_RunMain()`](https://python-all.ru/3.13/c-api/init.html#c.Py_RunMain) и [`Py_Main()`](https://python-all.ru/3.13/c-api/init.html#c.Py_Main) изменяют [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path):12231224- Если [`run_filename`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.run_filename) задано и является каталогом, содержащим скрипт `__main__.py`, добавьте `run_filename` в начало [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path).1225- Если [`isolated`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.isolated) равно нулю:12261227 - Если [`run_module`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.run_module) задан, добавьте текущий каталог в начало [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path). Ничего не делайте, если текущий каталог не может быть прочитан.1228 - Если [`run_filename`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.run_filename) задан, добавьте каталог файла в начало [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path).1229 - В противном случае пустая строка добавляется в начало [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path).12301231Если [`site_import`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.site_import) не равно нулю, то [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path) может быть изменён модулем [`site`](https://python-all.ru/3.13/library/site.html#module-site). Если [`user_site_directory`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.user_site_directory) не равно нулю и каталог пакетов сайта пользователя существует, модуль `site` добавляет каталог пакетов сайта пользователя в `sys.path`.12321233При конфигурации путей используются следующие файлы конфигурации:12341235- `pyvenv.cfg`1236- Файл `._pth` (например, `python._pth`)1237- `pybuilddir.txt` (только Unix)12381239Если присутствует файл `._pth`:12401241- Устанавливает [`isolated`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.isolated) в `1`.1242- Устанавливает [`use_environment`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.use_environment) в `0`.1243- Устанавливает [`site_import`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.site_import) в `0`.1244- Устанавливает [`safe_path`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.safe_path) в `1`.12451246Переменная окружения `__PYVENV_LAUNCHER__` используется для установки [`PyConfig.base_executable`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.base_executable).12471248## Py\_GetArgcArgv()12491250#### `void Py_GetArgcArgv(int *argc, wchar_t ***argv)`12511252Возвращает исходные аргументы командной строки до того, как Python их изменил.12531254См. также элемент [`PyConfig.orig_argv`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.orig_argv).12551256## Многофазная инициализация (частный временный API)12571258Данный раздел представляет собой частный временный API, вводящий многофазную инициализацию – ключевую возможность [**PEP 432**](https://python-all.ru/3.13/c-api/init_config.html):12591260- Фаза «базовой» инициализации, «минимальный Python»:12611262 - Встроенные типы;1263 - Встроенные исключения;1264 - Встроенные и замороженные модули;1265 - Модуль [`sys`](https://python-all.ru/3.13/library/sys.html#module-sys) инициализирован лишь частично (например, [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path) ещё не существует).1266- Фаза «основной» инициализации, Python полностью инициализирован:12671268 - Устанавливает и настраивает [`importlib`](https://python-all.ru/3.13/library/importlib.html#module-importlib);1269 - Применяет [конфигурацию путей](https://python-all.ru/3.13/c-api/init_config.html#init-path-config);1270 - Устанавливает обработчики сигналов;1271 - Завершает инициализацию модуля [`sys`](https://python-all.ru/3.13/library/sys.html#module-sys) (например, создаёт [`sys.stdout`](https://python-all.ru/3.13/library/sys.html#sys.stdout) и [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path));1272 - Включает опциональные возможности, такие как [`faulthandler`](https://python-all.ru/3.13/library/faulthandler.html#module-faulthandler) и [`tracemalloc`](https://python-all.ru/3.13/library/tracemalloc.html#module-tracemalloc);1273 - Импортировать модуль [`site`](https://python-all.ru/3.13/library/site.html#module-site);1274 - и т. д.12751276Частный временный API:12771278- `PyConfig._init_main`: если установлено в `0`, [`Py_InitializeFromConfig()`](https://python-all.ru/3.13/c-api/init.html#c.Py_InitializeFromConfig) останавливается на этапе инициализации «Core».12791280#### `PyStatus _Py_InitializeMain(void)`12811282Переход к фазе инициализации «Main», завершение инициализации Python.12831284Во время фазы «Core» не импортируется ни один модуль, а модуль `importlib` не настроен: [Path Configuration](https://python-all.ru/3.13/c-api/init_config.html#init-path-config) применяется только во время фазы «Main». Это может позволить настраивать Python из Python, чтобы переопределить или настроить [Path Configuration](https://python-all.ru/3.13/c-api/init_config.html#init-path-config), возможно, установить пользовательский импортёр [`sys.meta_path`](https://python-all.ru/3.13/library/sys.html#sys.meta_path) или хук импорта и т. д.12851286Возможно, станет возможным вычислять [Path Configuration](https://python-all.ru/3.13/c-api/init_config.html#init-path-config) в Python после фазы Core и перед фазой Main, что является одной из [**PEP 432**](https://python-all.ru/3.13/c-api/init_config.html) мотиваций.12871288Фаза «Core» не определена должным образом: что должно и что не должно быть доступно на этой фазе, пока не указано. API помечен как частный и временный: API может быть изменён или даже удалён в любое время, пока не будет спроектирован надлежащий публичный API.12891290Пример выполнения кода Python между фазами инициализации «Core» и «Main»:12911292```c1293void init_python(void)1294{1295 PyStatus status;12961297 PyConfig config;1298 PyConfig_InitPythonConfig(&config);1299 config._init_main = 0;13001301 /* настроить конфигурацию 'config' */13021303 status = Py_InitializeFromConfig(&config);1304 PyConfig_Clear(&config);1305 if (PyStatus_Exception(status)) {1306 Py_ExitStatusException(status);1307 }13081309 /* ... разместить здесь дополнительный код конфигурации ...1310 вызывается _Py_InitializeMain() */1311 int res = PyRun_SimpleString(1312 "import sys; "1313 "print('Run Python code before _Py_InitializeMain', "1314 "file=sys.stderr)");1315 if (res < 0) {1316 exit(1);1317 }13181319 /* ... добавьте сюда дополнительный код конфигурации ... */13201321 status = _Py_InitializeMain();1322 if (PyStatus_Exception(status)) {1323 Py_ExitStatusException(status);1324 }1325}1326```1327