Документация Python неофициальный перевод

init_config.md

1730 строк · 127.4 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.16/c-api/init_config.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Конфигурация инициализации Python89## PyInitConfig C API1011Добавлено в версии 3.14.1213Python можно инициализировать с помощью [`Py_InitializeFromInitConfig()`](https://python-all.ru/3.16/c-api/init_config.html#c.Py_InitializeFromInitConfig).1415Функцию [`Py_RunMain()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_RunMain) можно использовать для написания собственной программы на Python.1617См. также [Инициализация, финализация и потоки](https://python-all.ru/3.16/c-api/interp-lifecycle.html#initialization).1819> **См. также**20>21> [**PEP 741**](https://python-all.ru/3.16/c-api/init_config.html) «Python Configuration C API».2223### Пример2425Пример собственной сборки Python, которая всегда выполняется с включённым [режимом разработки Python](https://python-all.ru/3.16/library/devmode.html#devmode); возвращает `-1` при ошибке:2627```c28int init_python(void)29{30    PyInitConfig *config = PyInitConfig_Create();31    if (config == NULL) {32        printf("PYTHON INIT ERROR: memory allocation failed\n");33        return -1;34    }3536    // Включить режим разработки Python37    if (PyInitConfig_SetInt(config, "dev_mode", 1) < 0) {38        goto error;39    }4041    // Инициализировать Python с конфигурацией42    if (Py_InitializeFromInitConfig(config) < 0) {43        goto error;44    }45    PyInitConfig_Free(config);46    return 0;4748error:49    {50        // Отобразить сообщение об ошибке.51        //52        // Этот необычный стиль скобок используется, потому что невозможно заставить53        // метки goto указывать на объявления переменных.54        const char *err_msg;55        (void)PyInitConfig_GetError(config, &err_msg);56        printf("PYTHON INIT ERROR: %s\n", err_msg);57        PyInitConfig_Free(config);58        return -1;59    }60}61```6263### Создание конфигурации6465#### `struct PyInitConfig`6667Непрозрачная структура для настройки инициализации Python.6869#### `PyInitConfig *PyInitConfig_Create(void)`7071Создаёт новую конфигурацию инициализации, используя значения по умолчанию [изолированной конфигурации](https://python-all.ru/3.16/c-api/init_config.html#init-isolated-conf).7273Её необходимо освободить с помощью [`PyInitConfig_Free()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyInitConfig_Free).7475Возвращает `NULL` при ошибке выделения памяти.7677#### `void PyInitConfig_Free(PyInitConfig *config)`7879Освобождает память, занятую конфигурацией инициализации *config*.8081Если *config* равен `NULL`, никаких действий не выполняется.8283### Обработка ошибок8485#### `int PyInitConfig_GetError(PyInitConfig *config, const char **err_msg)`8687Получает сообщение об ошибке из *config*.8889- Устанавливает *\*err\_msg* и возвращает `1`, если задана ошибка.90- Устанавливает *\*err\_msg* в `NULL` и возвращает `0` в противном случае.9192Сообщение об ошибке – это строка в кодировке UTF-8.9394Если *config* содержит код выхода, отформатировать его как сообщение об ошибке.9596Сообщение об ошибке остаётся корректным до тех пор, пока не будет вызвана другая функция `PyInitConfig` с *config*. Вызывающему не нужно освобождать память сообщения.9798#### `int PyInitConfig_GetExitCode(PyInitConfig *config, int *exitcode)`99100Получает код выхода из *config*.101102- Устанавливает *\*exitcode* и возвращает `1`, если *config* содержит код выхода.103- Возвращает `0`, если *config* не содержит код выхода.104105Только функция `Py_InitializeFromInitConfig()` может установить код выхода, если параметр `parse_argv` не равен нулю.106107Код выхода может быть установлен, если не удалось разобрать командную строку (код выхода `2`), или если параметр командной строки запрашивает отображение справки (код выхода `0`).108109### Получение параметров110111Параметр *name* параметра конфигурации должен быть ненулевой, завершающейся нулевым символом, строкой в кодировке UTF-8. См. [Параметры конфигурации](https://python-all.ru/3.16/c-api/init_config.html#pyinitconfig-opts).112113#### `int PyInitConfig_HasOption(PyInitConfig *config, const char *name)`114115Проверяет, есть ли в конфигурации опция с именем *name*.116117Возвращает `1`, если опция существует, или `0` в противном случае.118119#### `int PyInitConfig_GetInt(PyInitConfig *config, const char *name, int64_t *value)`120121Получает целочисленную опцию конфигурации.122123- Устанавливает *\*value* и возвращает `0` в случае успеха.124- Устанавливает ошибку в *config* и возвращает `-1` в случае ошибки.125126#### `int PyInitConfig_GetStr(PyInitConfig *config, const char *name, char **value)`127128Получает строковую опцию конфигурации в виде строки в кодировке UTF-8, завершённой нулевым символом.129130- Устанавливает *\*value* и возвращает `0` в случае успеха.131- Устанавливает ошибку в *config* и возвращает `-1` в случае ошибки.132133*\*value* может быть установлен в `NULL`, если опция является необязательной строкой и не задана.134135В случае успеха строку необходимо освободить с помощью `free(value)`, если она не равна `NULL`.136137#### `int PyInitConfig_GetStrList(PyInitConfig *config, const char *name, size_t *length, char ***items)`138139Получает опцию конфигурации в виде списка строк, представленного массивом строк в кодировке UTF-8, завершённых нулевым символом.140141- Устанавливает *\*length* и *\*value*, и возвращает `0` в случае успеха.142- Устанавливает ошибку в *config* и возвращает `-1` в случае ошибки.143144В случае успеха список строк необходимо освободить с помощью `PyInitConfig_FreeStrList(length, items)`.145146#### `void PyInitConfig_FreeStrList(size_t length, char **items)`147148Освобождает память, занятую списком строк, созданным с помощью `PyInitConfig_GetStrList()`.149150### Установка опций151152Параметр *name* опции конфигурации должен быть ненулевой строкой в кодировке UTF-8, завершённой нулевым символом. См. [Configuration Options](https://python-all.ru/3.16/c-api/init_config.html#pyinitconfig-opts).153154Некоторые опции конфигурации имеют побочные эффекты на другие опции. Эта логика реализована только при вызове `Py_InitializeFromInitConfig()`, а не функциями «Set», описанными ниже. Например, установка `dev_mode` в `1` не устанавливает `faulthandler` в `1`.155156#### `int PyInitConfig_SetInt(PyInitConfig *config, const char *name, int64_t value)`157158Устанавливает целочисленную опцию конфигурации.159160- Возвращает `0` в случае успеха.161- Устанавливает ошибку в *config* и возвращает `-1` в случае ошибки.162163#### `int PyInitConfig_SetStr(PyInitConfig *config, const char *name, const char *value)`164165Устанавливает строковую опцию конфигурации из строки в кодировке UTF-8, завершённой нулевым символом. Строка копируется.166167- Возвращает `0` в случае успеха.168- Устанавливает ошибку в *config* и возвращает `-1` в случае ошибки.169170#### `int PyInitConfig_SetStrList(PyInitConfig *config, const char *name, size_t length, char *const *items)`171172Устанавливает опцию конфигурации в виде списка строк из массива строк в кодировке UTF-8, завершённых нулевым символом. Список строк копируется.173174- Возвращает `0` при успехе.175- Устанавливает ошибку в *config* и возвращает `-1` при ошибке.176177### Модуль178179#### `int PyInitConfig_AddModule(PyInitConfig *config, const char *name, PyObject *(*initfunc)(void))`180181Добавляет встроенный модуль расширения в таблицу встроенных модулей.182183Новый модуль импортируется под именем *name*, а при первой попытке импорта в качестве функции инициализации вызывается функция *initfunc*.184185- Возвращает `0` при успехе.186- Устанавливает ошибку в *config* и возвращает `-1` при ошибке.187188Если Python инициализируется несколько раз, `PyInitConfig_AddModule()` должен вызываться при каждой инициализации Python.189190Аналогична функции [`PyImport_AppendInittab()`](https://python-all.ru/3.16/c-api/import.html#c.PyImport_AppendInittab).191192### Инициализация Python193194#### `int Py_InitializeFromInitConfig(PyInitConfig *config)`195196Инициализирует Python из конфигурации инициализации.197198- Возвращает `0` при успехе.199- Устанавливает ошибку в *config* и возвращает `-1` при ошибке.200- Устанавливает код выхода в *config* и возвращает `-1`, если Python хочет завершиться.201202См. `PyInitConfig_GetExitcode()` для случая с кодом выхода.203204## Параметры конфигурации205206| Параметр | Член PyConfig/PyPreConfig | Тип | Видимость |207| --- | --- | --- | --- |208| `"allocator"` | [`allocator`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.allocator) | `int` | Только для чтения |209| `"argv"` | [`argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv) | `list[str]` | Публичный |210| `"base_exec_prefix"` | [`base_exec_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.base_exec_prefix) | `str` | Публичный |211| `"base_executable"` | [`base_executable`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.base_executable) | `str` | Публичный |212| `"base_prefix"` | [`base_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.base_prefix) | `str` | Публичный |213| `"buffered_stdio"` | [`buffered_stdio`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.buffered_stdio) | `bool` | Только для чтения |214| `"bytes_warning"` | [`bytes_warning`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.bytes_warning) | `int` | Публичный |215| `"check_hash_pycs_mode"` | [`check_hash_pycs_mode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.check_hash_pycs_mode) | `str` | Только для чтения |216| `"code_debug_ranges"` | [`code_debug_ranges`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.code_debug_ranges) | `bool` | Только для чтения |217| `"coerce_c_locale"` | [`coerce_c_locale`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.coerce_c_locale) | `bool` | Только для чтения |218| `"coerce_c_locale_warn"` | [`coerce_c_locale_warn`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.coerce_c_locale_warn) | `bool` | Только для чтения |219| `"configure_c_stdio"` | [`configure_c_stdio`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.configure_c_stdio) | `bool` | Только для чтения |220| `"configure_locale"` | [`configure_locale`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.configure_locale) | `bool` | Только для чтения |221| `"cpu_count"` | [`cpu_count`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.cpu_count) | `int` | Общедоступный |222| `"dev_mode"` | [`dev_mode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.dev_mode) | `bool` | Только для чтения |223| `"dump_refs"` | [`dump_refs`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.dump_refs) | `bool` | Только для чтения |224| `"dump_refs_file"` | [`dump_refs_file`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.dump_refs_file) | `str` | Только для чтения |225| `"exec_prefix"` | [`exec_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.exec_prefix) | `str` | Общедоступный |226| `"executable"` | [`executable`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.executable) | `str` | Общедоступный |227| `"faulthandler"` | [`faulthandler`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.faulthandler) | `bool` | Только для чтения |228| `"filesystem_encoding"` | [`filesystem_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.filesystem_encoding) | `str` | Только для чтения |229| `"filesystem_errors"` | [`filesystem_errors`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.filesystem_errors) | `str` | Только для чтения |230| `"hash_seed"` | [`hash_seed`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.hash_seed) | `int` | Только для чтения |231| `"home"` | [`home`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.home) | `str` | Только для чтения |232| `"import_time"` | [`import_time`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.import_time) | `int` | Только для чтения |233| `"inspect"` | [`inspect`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.inspect) | `bool` | Общедоступный |234| `"install_signal_handlers"` | [`install_signal_handlers`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.install_signal_handlers) | `bool` | Только для чтения |235| `"int_max_str_digits"` | [`int_max_str_digits`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.int_max_str_digits) | `int` | Общедоступный |236| `"interactive"` | [`interactive`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.interactive) | `bool` | Общедоступный |237| `"isolated"` | [`isolated`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.isolated) | `bool` | Только для чтения |238| `"legacy_windows_fs_encoding"` | [`legacy_windows_fs_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.legacy_windows_fs_encoding) | `bool` | Только для чтения |239| `"legacy_windows_stdio"` | [`legacy_windows_stdio`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.legacy_windows_stdio) | `bool` | Только для чтения |240| `"malloc_stats"` | [`malloc_stats`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.malloc_stats) | `bool` | Только для чтения |241| `"module_search_paths"` | [`module_search_paths`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.module_search_paths) | `list[str]` | Общедоступный |242| `"optimization_level"` | [`optimization_level`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.optimization_level) | `int` | Общедоступный |243| `"orig_argv"` | [`orig_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.orig_argv) | `list[str]` | Только для чтения |244| `"parse_argv"` | [`parse_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.parse_argv) | `bool` | Только для чтения |245| `"parser_debug"` | [`parser_debug`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.parser_debug) | `bool` | Общедоступный |246| `"pathconfig_warnings"` | [`pathconfig_warnings`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.pathconfig_warnings) | `bool` | Только для чтения |247| `"perf_profiling"` | [`perf_profiling`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.perf_profiling) | `bool` | Только для чтения |248| `"platlibdir"` | [`platlibdir`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.platlibdir) | `str` | Общедоступный |249| `"prefix"` | [`prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.prefix) | `str` | Общедоступный |250| `"program_name"` | [`program_name`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.program_name) | `str` | Только для чтения |251| `"pycache_prefix"` | [`pycache_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.pycache_prefix) | `str` | Общий |252| `"quiet"` | [`quiet`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.quiet) | `bool` | Общий |253| `"run_command"` | [`run_command`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.run_command) | `str` | Только для чтения |254| `"run_filename"` | [`run_filename`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.run_filename) | `str` | Только для чтения |255| `"run_module"` | [`run_module`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.run_module) | `str` | Только для чтения |256| `"run_presite"` | [`run_presite`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.run_presite) | `str` | Только для чтения |257| `"safe_path"` | [`safe_path`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.safe_path) | `bool` | Только для чтения |258| `"show_ref_count"` | [`show_ref_count`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.show_ref_count) | `bool` | Только для чтения |259| `"site_import"` | [`site_import`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.site_import) | `bool` | Только для чтения |260| `"skip_source_first_line"` | [`skip_source_first_line`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.skip_source_first_line) | `bool` | Только для чтения |261| `"stdio_encoding"` | [`stdio_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.stdio_encoding) | `str` | Только для чтения |262| `"stdio_errors"` | [`stdio_errors`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.stdio_errors) | `str` | Только для чтения |263| `"stdlib_dir"` | [`stdlib_dir`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.stdlib_dir) | `str` | Общий |264| `"tracemalloc"` | [`tracemalloc`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.tracemalloc) | `int` | Только для чтения |265| `"use_environment"` | [`use_environment`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.use_environment) | `bool` | Общий |266| `"use_frozen_modules"` | [`use_frozen_modules`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.use_frozen_modules) | `bool` | Только для чтения |267| `"use_hash_seed"` | [`use_hash_seed`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.use_hash_seed) | `bool` | Только для чтения |268| `"use_system_logger"` | [`use_system_logger`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.use_system_logger) | `bool` | Только для чтения |269| `"user_site_directory"` | [`user_site_directory`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.user_site_directory) | `bool` | Только для чтения |270| `"utf8_mode"` | [`utf8_mode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.utf8_mode) | `bool` | Только для чтения |271| `"verbose"` | [`verbose`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.verbose) | `int` | Общий |272| `"warn_default_encoding"` | [`warn_default_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.warn_default_encoding) | `bool` | Только для чтения |273| `"warnoptions"` | [`warnoptions`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.warnoptions) | `list[str]` | Общий |274| `"write_bytecode"` | [`write_bytecode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.write_bytecode) | `bool` | Общий |275| `"xoptions"` | [`xoptions`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.xoptions) | `dict[str, str]` | Общий |276| `"_pystats"` | [`_pystats`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig._pystats) | `bool` | Только для чтения |277278Видимость:279280- Общий: доступен для чтения через [`PyConfig_Get()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) и для записи через [`PyConfig_Set()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Set).281- Только для чтения: доступен для чтения через [`PyConfig_Get()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get), но не может быть изменён через [`PyConfig_Set()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Set).282283## API конфигурации Python во время выполнения284285Во время выполнения можно получать и устанавливать параметры конфигурации с помощью функций [`PyConfig_Get()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) и [`PyConfig_Set()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Set).286287Параметр *name* параметра конфигурации должен быть не-NULL, завершаться нулевым символом и быть строкой в кодировке UTF-8. См. [параметры конфигурации](https://python-all.ru/3.16/c-api/init_config.html#pyinitconfig-opts).288289Некоторые параметры считываются из атрибутов [`sys`](https://python-all.ru/3.16/library/sys.html#module-sys). Например, параметр `"argv"` считывается из [`sys.argv`](https://python-all.ru/3.16/library/sys.html#sys.argv).290291#### `PyObject *PyConfig_Get(const char *name)`292293Получает текущее значение параметра конфигурации во время выполнения в виде объекта Python.294295- При успехе возвращает новую ссылку.296- Устанавливает исключение и возвращает `NULL` в случае ошибки.297298Тип объекта зависит от параметра конфигурации. Это может быть:299300- `bool`301- `int`302- `str`303- `list[str]`304- `dict[str, str]`305306Вызывающий должен иметь [прикреплённое состояние потока](https://python-all.ru/3.16/glossary.html#term-attached-thread-state). Функцию нельзя вызывать до инициализации Python или после его финализации.307308Добавлено в версии 3.14.309310#### `int PyConfig_GetInt(const char *name, int *value)`311312Аналогично [`PyConfig_Get()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get), но получает значение в виде C int.313314- Возвращает `0` при успехе.315- Устанавливает исключение и возвращает `-1` в случае ошибки.316317Добавлено в версии 3.14.318319#### `PyObject *PyConfig_Names(void)`320321Получает имена всех параметров конфигурации в виде `frozenset`.322323- При успехе возвращает новую ссылку.324- Устанавливает исключение и возвращает `NULL` в случае ошибки.325326Вызывающий должен иметь [прикреплённое состояние потока](https://python-all.ru/3.16/glossary.html#term-attached-thread-state). Функцию нельзя вызывать до инициализации Python или после его финализации.327328Добавлено в версии 3.14.329330#### `int PyConfig_Set(const char *name, PyObject *value)`331332Устанавливает текущее значение параметра конфигурации во время выполнения.333334- Возбуждает [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError), если отсутствует параметр *name*.335- Возбуждает [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError), если *value* является недопустимым значением.336- Возбуждает [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError), если параметр доступен только для чтения (не может быть установлен).337- Возбуждает [`TypeError`](https://python-all.ru/3.16/library/exceptions.html#TypeError), если *value* имеет неправильный тип.338339Вызывающий должен иметь [прикреплённое состояние потока](https://python-all.ru/3.16/glossary.html#term-attached-thread-state). Функцию нельзя вызывать до инициализации Python или после его финализации.340341Возбуждает [событие аудита](https://python-all.ru/3.16/library/sys.html#auditing) `cpython.PyConfig_Set` с аргументами `name`, `value`.342343Добавлено в версии 3.14.344345Изменено в версии 3.16.0a0 (не выпущена): Теперь функция заменяет [`sys.flags`](https://python-all.ru/3.16/library/sys.html#sys.flags) (создаёт новый объект), вместо изменения `sys.flags` на месте.346347## PyConfig C API348349Добавлено в версии 3.8.350351Python может быть инициализирован с помощью [`Py_InitializeFromConfig()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_InitializeFromConfig) и структуры [`PyConfig`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig). Он может быть предварительно инициализирован с помощью [`Py_PreInitialize()`](https://python-all.ru/3.16/c-api/init_config.html#c.Py_PreInitialize) и структуры [`PyPreConfig`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig).352353Существует два вида конфигурации:354355- [Конфигурация Python](https://python-all.ru/3.16/c-api/init_config.html#init-python-config) может использоваться для создания настраиваемого Python, который ведёт себя как обычный Python. Например, переменные окружения и аргументы командной строки используются для настройки Python.356- [Изолированная конфигурация](https://python-all.ru/3.16/c-api/init_config.html#init-isolated-conf) может использоваться для встраивания Python в приложение. Она изолирует Python от системы. Например, переменные окружения игнорируются, локаль LC\_CTYPE остаётся неизменной и не регистрируется ни один обработчик сигналов.357358Функция [`Py_RunMain()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_RunMain) может использоваться для написания настраиваемой программы на Python.359360См. также [Инициализация, финализация и потоки](https://python-all.ru/3.16/c-api/interp-lifecycle.html#initialization).361362> **См. также**363>364> [**PEP 587**](https://python-all.ru/3.16/c-api/init_config.html) “Python Initialization Configuration”.365366### Пример367368Пример настройки Python для постоянной работы в изолированном режиме:369370```c371int main(int argc, char **argv)372{373    PyStatus status;374375    PyConfig config;376    PyConfig_InitPythonConfig(&config);377    config.isolated = 1;378379    /* Декодировать аргументы командной строки.380       Неявно предварительно инициализировать Python (в изолированном режиме). */381    status = PyConfig_SetBytesArgv(&config, argc, argv);382    if (PyStatus_Exception(status)) {383        goto exception;384    }385386    status = Py_InitializeFromConfig(&config);387    if (PyStatus_Exception(status)) {388        goto exception;389    }390    PyConfig_Clear(&config);391392    return Py_RunMain();393394exception:395    PyConfig_Clear(&config);396    if (PyStatus_IsExit(status)) {397        return status.exitcode;398    }399    /* Вывести сообщение об ошибке и завершить процесс с400       ненулевым кодом выхода */401    Py_ExitStatusException(status);402}403```404405### PyWideStringList406407#### `type PyWideStringList`408409Список строк `wchar_t*`.410411Если *length* не равно нулю, *items* должен быть не `NULL`, а все строки должны быть\\nне `NULL`.412413Методы:414415#### `PyStatus PyWideStringList_Append(PyWideStringList *list, const wchar_t *item)`416417Добавляет *item* в *list*.418419Для вызова этой функции Python должен быть предварительно инициализирован.420421#### `PyStatus PyWideStringList_Insert(PyWideStringList *list, Py_ssize_t index, const wchar_t *item)`422423Вставляет *item* в *list* по индексу *index*.424425Если *index* больше или равен длине *list*, добавляет *item* в\\n*list*.426427*index* должен быть больше или равен `0`.428429Для вызова этой функции Python должен быть предварительно инициализирован.430431Поля структуры:432433#### `Py_ssize_t length`434435Длина списка.436437#### `wchar_t **items`438439Элементы списка.440441### PyStatus442443#### `type PyStatus`444445Структура для хранения состояния функции инициализации: успех, ошибка\\nили завершение.446447В случае ошибки может хранить имя C-функции, вызвавшей ошибку.448449Поля структуры:450451#### `int exitcode`452453Код выхода. Аргумент, передаваемый в `exit()`.454455#### `const char *err_msg`456457Сообщение об ошибке.458459#### `const char *func`460461Имя функции, создавшей ошибку, может быть `NULL`.462463Функции создания статуса:464465#### `PyStatus PyStatus_Ok(void)`466467Успех.468469#### `PyStatus PyStatus_Error(const char *err_msg)`470471Ошибка инициализации с сообщением.472473*err\_msg* не должен быть `NULL`.474475#### `PyStatus PyStatus_NoMemory(void)`476477Сбой выделения памяти (не хватает памяти).478479#### `PyStatus PyStatus_Exit(int exitcode)`480481Завершить Python с указанным кодом выхода.482483Функции обработки статуса:484485#### `int PyStatus_Exception(PyStatus status)`486487Является ли статус ошибкой или выходом? Если да, исключение должно быть обработано, например, вызовом [`Py_ExitStatusException()`](https://python-all.ru/3.16/c-api/init_config.html#c.Py_ExitStatusException).488489#### `int PyStatus_IsError(PyStatus status)`490491Является ли результат ошибкой?492493#### `int PyStatus_IsExit(PyStatus status)`494495Является ли результат выходом?496497#### `void Py_ExitStatusException(PyStatus status)`498499Вызвать `exit(exitcode)`, если *status* – это выход. Вывести сообщение об ошибке и завершиться с ненулевым кодом выхода, если *status* – это ошибка. Должна вызываться, только если `PyStatus_Exception(status)` не равен нулю.500501> **Примечание**502>503> Внутренне Python использует макросы, которые устанавливают `PyStatus.func`, тогда как функции создания статуса устанавливают `func` в `NULL`.504505Пример:506507```c508PyStatus alloc(void **ptr, size_t size)509{510    *ptr = PyMem_RawMalloc(size);511    if (*ptr == NULL) {512        return PyStatus_NoMemory();513    }514    return PyStatus_Ok();515}516517int main(int argc, char **argv)518{519    void *ptr;520    PyStatus status = alloc(&ptr, 16);521    if (PyStatus_Exception(status)) {522        Py_ExitStatusException(status);523    }524    PyMem_Free(ptr);525    return 0;526}527```528529### PyPreConfig530531#### `type PyPreConfig`532533Структура, используемая для предварительной инициализации Python.534535Функция инициализации предварительной конфигурации:536537#### `void PyPreConfig_InitPythonConfig(PyPreConfig *preconfig)`538539Инициализировать предварительную конфигурацию с [Конфигурацией Python](https://python-all.ru/3.16/c-api/init_config.html#init-python-config).540541#### `void PyPreConfig_InitIsolatedConfig(PyPreConfig *preconfig)`542543Инициализировать предварительную конфигурацию с [Изолированной конфигурацией](https://python-all.ru/3.16/c-api/init_config.html#init-isolated-conf).544545Поля структуры:546547#### `int allocator`548549Имя распределителей памяти Python:550551- `PYMEM_ALLOCATOR_NOT_SET` (`0`): не изменять распределители памяти (использовать значения по умолчанию).552- `PYMEM_ALLOCATOR_DEFAULT` (`1`): [стандартные распределители памяти](https://python-all.ru/3.16/c-api/memory.html#default-memory-allocators).553- `PYMEM_ALLOCATOR_DEBUG` (`2`): [стандартные распределители памяти](https://python-all.ru/3.16/c-api/memory.html#default-memory-allocators) с [отладочными перехватчиками](https://python-all.ru/3.16/c-api/memory.html#pymem-debug-hooks).554- `PYMEM_ALLOCATOR_MALLOC` (`3`): использовать `malloc()` из библиотеки C.555- `PYMEM_ALLOCATOR_MALLOC_DEBUG` (`4`): принудительно использовать `malloc()` с [отладочными перехватчиками](https://python-all.ru/3.16/c-api/memory.html#pymem-debug-hooks).556- `PYMEM_ALLOCATOR_PYMALLOC` (`5`): [распределитель памяти pymalloc из Python](https://python-all.ru/3.16/c-api/memory.html#pymalloc).557- `PYMEM_ALLOCATOR_PYMALLOC_DEBUG` (`6`): [распределитель памяти pymalloc из Python](https://python-all.ru/3.16/c-api/memory.html#pymalloc) с [отладочными перехватчиками](https://python-all.ru/3.16/c-api/memory.html#pymem-debug-hooks).558- `PYMEM_ALLOCATOR_MIMALLOC` (`6`): использовать `mimalloc` – быструю замену malloc.559- `PYMEM_ALLOCATOR_MIMALLOC_DEBUG` (`7`): использовать `mimalloc` – быструю замену malloc с [отладочными перехватчиками](https://python-all.ru/3.16/c-api/memory.html#pymem-debug-hooks).560561`PYMEM_ALLOCATOR_PYMALLOC` и `PYMEM_ALLOCATOR_PYMALLOC_DEBUG` не поддерживаются, если Python собран [`configured using --without-pymalloc`](https://python-all.ru/3.16/using/configure.html#cmdoption-without-pymalloc).562563`PYMEM_ALLOCATOR_MIMALLOC` и `PYMEM_ALLOCATOR_MIMALLOC_DEBUG` не поддерживаются, если Python собран [`configured using --without-mimalloc`](https://python-all.ru/3.16/using/configure.html#cmdoption-without-mimalloc) или отсутствует поддержка атомарных операций.564565См. [Управление памятью](https://python-all.ru/3.16/c-api/memory.html#memory).566567По умолчанию: `PYMEM_ALLOCATOR_NOT_SET`.568569#### `int configure_locale`570571Устанавливает локаль LC\_CTYPE в локаль, предпочитаемую пользователем.572573Если равно `0`, устанавливает элементы [`coerce_c_locale`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.coerce_c_locale) и [`coerce_c_locale_warn`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.coerce_c_locale_warn) в `0`.574575См. [кодировку локали](https://python-all.ru/3.16/glossary.html#term-locale-encoding).576577По умолчанию: `1` в конфигурации Python, `0` в изолированной конфигурации.578579#### `int coerce_c_locale`580581Если равно `2`, принудительно переключает локаль C.582583Если равно `1`, читает локаль LC\_CTYPE, чтобы решить, нужно ли её принудительно менять.584585См. [кодировку локали](https://python-all.ru/3.16/glossary.html#term-locale-encoding).586587По умолчанию: `-1` в конфигурации Python, `0` в изолированной конфигурации.588589#### `int coerce_c_locale_warn`590591Если не равно нулю, выводит предупреждение при принудительном переключении локали C.592593По умолчанию: `-1` в конфигурации Python, `0` в изолированной конфигурации.594595#### `int dev_mode`596597[Режим разработки Python](https://python-all.ru/3.16/library/devmode.html#devmode): см. [`PyConfig.dev_mode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.dev_mode).598599По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.600601#### `int isolated`602603Изолированный режим: см. [`PyConfig.isolated`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.isolated).604605По умолчанию: `0` в режиме Python, `1` в изолированном режиме.606607#### `int legacy_windows_fs_encoding`608609Если не равно нулю:610611- Устанавливает [`PyPreConfig.utf8_mode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.utf8_mode) в `0`,612- Устанавливает [`PyConfig.filesystem_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.filesystem_encoding) в `"mbcs"`,613- Устанавливает [`PyConfig.filesystem_errors`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.filesystem_errors) в `"replace"`.614615Инициализируется из значения переменной окружения [`PYTHONLEGACYWINDOWSFSENCODING`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONLEGACYWINDOWSFSENCODING).616617Доступно только в Windows. Макрос `#ifdef MS_WINDOWS` можно использовать для Windows-специфичного кода.618619По умолчанию: `0`.620621#### `int parse_argv`622623Если не равно нулю, [`Py_PreInitializeFromArgs()`](https://python-all.ru/3.16/c-api/init_config.html#c.Py_PreInitializeFromArgs) и [`Py_PreInitializeFromBytesArgs()`](https://python-all.ru/3.16/c-api/init_config.html#c.Py_PreInitializeFromBytesArgs) обрабатывают свой аргумент `argv` так же, как обычный Python обрабатывает аргументы командной строки: см. [Аргументы командной строки](https://python-all.ru/3.16/using/cmdline.html#using-on-cmdline).624625По умолчанию: `1` в конфигурации Python, `0` в изолированной конфигурации.626627#### `int use_environment`628629Использовать [переменные окружения](https://python-all.ru/3.16/using/cmdline.html#using-on-envvars)? См. [`PyConfig.use_environment`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.use_environment).630631По умолчанию: `1` в конфигурации Python и `0` в изолированной конфигурации.632633#### `int utf8_mode`634635Если не равно нулю, включает [Режим UTF-8 Python](https://python-all.ru/3.16/library/os.html#utf8-mode).636637Устанавливается в `0` или `1` опцией командной строки [`-X utf8`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONUTF8`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONUTF8).638639По умолчанию: `1`.640641### Предварительная инициализация Python с PyPreConfig642643Предварительная инициализация Python:644645- Устанавливает распределители памяти Python ([`PyPreConfig.allocator`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.allocator))646- Настраивает локаль LC\_CTYPE ([кодировка локали](https://python-all.ru/3.16/glossary.html#term-locale-encoding))647- Устанавливает [Режим UTF-8 Python](https://python-all.ru/3.16/library/os.html#utf8-mode) ([`PyPreConfig.utf8_mode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.utf8_mode))648649Текущая предварительная конфигурация (тип `PyPreConfig`) хранится в `_PyRuntime.preconfig`.650651Функции для предварительной инициализации Python:652653#### `PyStatus Py_PreInitialize(const PyPreConfig *preconfig)`654655Предварительно инициализировать Python из предварительной конфигурации *preconfig*.656657*preconfig* не должен быть `NULL`.658659#### `PyStatus Py_PreInitializeFromBytesArgs(const PyPreConfig *preconfig, int argc, char *const *argv)`660661Предварительно инициализировать Python из предварительной конфигурации *preconfig*.662663Обрабатывает аргументы командной строки *argv* (байтовые строки), если [`parse_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.parse_argv) в *preconfig* не равно нулю.664665*preconfig* не должен быть `NULL`.666667#### `PyStatus Py_PreInitializeFromArgs(const PyPreConfig *preconfig, int argc, wchar_t *const *argv)`668669Преинициализировать Python из предварительной конфигурации *preconfig*.670671Разобрать аргументы командной строки *argv* (широкие строки), если [`parse_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.parse_argv) структуры *preconfig* не равен нулю.672673*preconfig* не должен быть `NULL`.674675Вызывающий код отвечает за обработку исключений (ошибок или выхода) с помощью [`PyStatus_Exception()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyStatus_Exception) и [`Py_ExitStatusException()`](https://python-all.ru/3.16/c-api/init_config.html#c.Py_ExitStatusException).676677Для [конфигурации Python](https://python-all.ru/3.16/c-api/init_config.html#init-python-config) ([`PyPreConfig_InitPythonConfig()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig_InitPythonConfig)), если Python инициализируется с аргументами командной строки, эти аргументы также должны быть переданы в преинициализацию Python, поскольку они влияют на предварительную конфигурацию, например, на кодировки. Например, параметр командной строки [`-X utf8`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) включает [режим UTF-8 Python](https://python-all.ru/3.16/library/os.html#utf8-mode).678679`PyMem_SetAllocator()` можно вызывать после [`Py_PreInitialize()`](https://python-all.ru/3.16/c-api/init_config.html#c.Py_PreInitialize) и до [`Py_InitializeFromConfig()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_InitializeFromConfig), чтобы установить собственный распределитель памяти. Его можно вызывать до `Py_PreInitialize()`, если [`PyPreConfig.allocator`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.allocator) установлен в `PYMEM_ALLOCATOR_NOT_SET`.680681Функции выделения памяти Python, такие как [`PyMem_RawMalloc()`](https://python-all.ru/3.16/c-api/memory.html#c.PyMem_RawMalloc), не должны использоваться до преинициализации Python, тогда как прямой вызов `malloc()` и `free()` всегда безопасен. [`Py_DecodeLocale()`](https://python-all.ru/3.16/c-api/sys.html#c.Py_DecodeLocale) не должна вызываться до преинициализации Python.682683Пример использования преинициализации для включения [режима UTF-8 Python](https://python-all.ru/3.16/library/os.html#utf8-mode):684685```c686PyStatus status;687PyPreConfig preconfig;688PyPreConfig_InitPythonConfig(&preconfig);689690preconfig.utf8_mode = 1;691692status = Py_PreInitialize(&preconfig);693if (PyStatus_Exception(status)) {694    Py_ExitStatusException(status);695}696697/* на этом этапе Python использует кодировку UTF-8 */698699Py_Initialize();700/* ... использовать Python API здесь ... */701Py_Finalize();702```703704### PyConfig705706#### `type PyConfig`707708Структура, содержащая большинство параметров для настройки Python.709710После завершения необходимо использовать функцию [`PyConfig_Clear()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Clear) для освобождения памяти конфигурации.711712Методы структуры:713714#### `void PyConfig_InitPythonConfig(PyConfig *config)`715716Инициализировать конфигурацию с помощью [конфигурации Python](https://python-all.ru/3.16/c-api/init_config.html#init-python-config).717718#### `void PyConfig_InitIsolatedConfig(PyConfig *config)`719720Инициализировать конфигурацию с помощью [изолированной конфигурации](https://python-all.ru/3.16/c-api/init_config.html#init-isolated-conf).721722#### `PyStatus PyConfig_SetString(PyConfig *config, wchar_t *const *config_str, const wchar_t *str)`723724Копировать широкую строку *str* в `*config_str`.725726[Преинициализировать Python](https://python-all.ru/3.16/c-api/init_config.html#c-preinit) при необходимости.727728#### `PyStatus PyConfig_SetBytesString(PyConfig *config, wchar_t *const *config_str, const char *str)`729730Декодировать *str* с помощью [`Py_DecodeLocale()`](https://python-all.ru/3.16/c-api/sys.html#c.Py_DecodeLocale) и записать результат в `*config_str`.731732[Преинициализировать Python](https://python-all.ru/3.16/c-api/init_config.html#c-preinit) при необходимости.733734#### `PyStatus PyConfig_SetArgv(PyConfig *config, int argc, wchar_t *const *argv)`735736Установить аргументы командной строки (поле [`argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv) структуры *config*) из списка широких строк *argv*.737738[Преинициализировать Python](https://python-all.ru/3.16/c-api/init_config.html#c-preinit) при необходимости.739740#### `PyStatus PyConfig_SetBytesArgv(PyConfig *config, int argc, char *const *argv)`741742Установить аргументы командной строки (поле [`argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv) структуры *config*) из списка байтовых строк *argv*. Декодировать байты с помощью [`Py_DecodeLocale()`](https://python-all.ru/3.16/c-api/sys.html#c.Py_DecodeLocale).743744[Преинициализировать Python](https://python-all.ru/3.16/c-api/init_config.html#c-preinit) при необходимости.745746#### `PyStatus PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, Py_ssize_t length, wchar_t **items)`747748Задать список широких строк *list* с длиной *length* и элементами *items*.749750[Преинициализировать Python](https://python-all.ru/3.16/c-api/init_config.html#c-preinit) при необходимости.751752#### `PyStatus PyConfig_Read(PyConfig *config)`753754Считывает всю конфигурацию Python.755756Поля, которые уже инициализированы, остаются без изменений.757758Поля для [конфигурации путей](https://python-all.ru/3.16/c-api/init_config.html#init-path-config) больше не вычисляются и не изменяются при вызове этой функции, начиная с Python 3.11.759760Функция [`PyConfig_Read()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Read) анализирует аргументы [`PyConfig.argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv) только один раз: [`PyConfig.parse_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.parse_argv) устанавливается в `2` после анализа аргументов. Поскольку аргументы Python удаляются из `PyConfig.argv`, повторный анализ привёл бы к интерпретации аргументов приложения как аргументов Python.761762[Предварительно инициализировать Python](https://python-all.ru/3.16/c-api/init_config.html#c-preinit) при необходимости.763764Изменено в версии 3.10: Аргументы [`PyConfig.argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv) теперь анализируются только один раз, [`PyConfig.parse_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.parse_argv) устанавливается в `2` после анализа аргументов, и аргументы анализируются только если `PyConfig.parse_argv` равно `1`.765766Изменено в версии 3.11: [`PyConfig_Read()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Read) больше не вычисляет все пути, и поэтому поля, перечисленные в [Конфигурации путей Python](https://python-all.ru/3.16/c-api/init_config.html#init-path-config), могут больше не обновляться до вызова [`Py_InitializeFromConfig()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_InitializeFromConfig).767768#### `void PyConfig_Clear(PyConfig *config)`769770Освобождает память конфигурации.771772Большинство методов `PyConfig` [предварительно инициализируют Python](https://python-all.ru/3.16/c-api/init_config.html#c-preinit) при необходимости. В этом случае конфигурация предварительной инициализации Python ([`PyPreConfig`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig)) основывается на [`PyConfig`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig). Если настраиваются поля конфигурации, общие с `PyPreConfig`, они должны быть установлены до вызова метода `PyConfig`:773774- [`PyConfig.dev_mode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.dev_mode)775- [`PyConfig.isolated`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.isolated)776- [`PyConfig.parse_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.parse_argv)777- [`PyConfig.use_environment`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.use_environment)778779Более того, если используется [`PyConfig_SetArgv()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_SetArgv) или [`PyConfig_SetBytesArgv()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_SetBytesArgv), этот метод должен вызываться перед другими методами, так как конфигурация предварительной инициализации зависит от аргументов командной строки (если [`parse_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.parse_argv) не равно нулю).780781Вызывающий эти методы отвечает за обработку исключений (ошибка или выход) с помощью `PyStatus_Exception()` и `Py_ExitStatusException()`.782783Поля структуры:784785#### `PyWideStringList argv`786787Устанавливает аргументы командной строки [`sys.argv`](https://python-all.ru/3.16/library/sys.html#sys.argv) на основе [`argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv). Эти параметры похожи на передаваемые функции `main()` программы, с той разницей, что первый элемент должен указывать на исполняемый скрипт, а не на исполняемый файл, запускающий интерпретатор Python. Если скрипт для запуска отсутствует, первый элемент в `argv` может быть пустой строкой.788789Устанавливает [`parse_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.parse_argv) в `1` для анализа [`argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv) таким же образом, как обычный Python анализирует аргументы командной строки Python, а затем для удаления аргументов Python из `argv`.790791Если [`argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv) пуст, добавляется пустая строка, чтобы гарантировать, что [`sys.argv`](https://python-all.ru/3.16/library/sys.html#sys.argv) всегда существует и никогда не пуст.792793По умолчанию: `NULL`.794795См. также элемент [`orig_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.orig_argv).796797#### `int safe_path`798799Если равно нулю, `Py_RunMain()` добавляет потенциально небезопасный путь в начало [`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path) при запуске:800801- Если [`argv[0]`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv) равен `L"-m"` (`python -m module`), добавляет текущий рабочий каталог в начало.802- Если выполняется скрипт (`python script.py`), добавляет каталог скрипта в начало. Если это символическая ссылка, разрешает символические ссылки.803- В противном случае (`python -c code` и `python`) добавляет пустую строку в начало, что означает текущий рабочий каталог.804805Устанавливается в `1` параметром командной строки [`-P`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-P) и переменной окружения [`PYTHONSAFEPATH`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONSAFEPATH).806807По умолчанию: `0` в конфигурации Python, `1` в изолированной конфигурации.808809Добавлено в версии 3.12.810811#### `wchar_t *base_exec_prefix`812813[`sys.base_exec_prefix`](https://python-all.ru/3.16/library/sys.html#sys.base_exec_prefix).814815По умолчанию: `NULL`.816817Часть вывода [Конфигурации путей Python](https://python-all.ru/3.16/c-api/init_config.html#init-path-config).818819См. также [`PyConfig.exec_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.exec_prefix).820821#### `wchar_t *base_executable`822823Базовый исполняемый файл Python: `sys._base_executable`.824825Устанавливается переменной окружения `__PYVENV_LAUNCHER__`.826827Устанавливается из [`PyConfig.executable`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.executable), если `NULL`.828829По умолчанию: `NULL`.830831Часть вывода [конфигурации путей Python](https://python-all.ru/3.16/c-api/init_config.html#init-path-config).832833См. также [`PyConfig.executable`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.executable).834835#### `wchar_t *base_prefix`836837[`sys.base_prefix`](https://python-all.ru/3.16/library/sys.html#sys.base_prefix).838839По умолчанию: `NULL`.840841Часть вывода [конфигурации путей Python](https://python-all.ru/3.16/c-api/init_config.html#init-path-config).842843См. также [`PyConfig.prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.prefix).844845#### `int buffered_stdio`846847Если равно `0`, а [`configure_c_stdio`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.configure_c_stdio) не равно нулю, отключает буферизацию для потоков C stdout и stderr.848849Устанавливается в `0` параметром командной строки [`-u`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-u) и переменной окружения [`PYTHONUNBUFFERED`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONUNBUFFERED).850851stdin всегда открывается в буферизированном режиме.852853По умолчанию: `1`.854855#### `int bytes_warning`856857Если равно `1`, выдаётся предупреждение при сравнении [`bytes`](https://python-all.ru/3.16/library/stdtypes.html#bytes) или [`bytearray`](https://python-all.ru/3.16/library/stdtypes.html#bytearray) с [`str`](https://python-all.ru/3.16/library/stdtypes.html#str), или при сравнении `bytes` с [`int`](https://python-all.ru/3.16/library/functions.html#int).858859Если больше или равно `2`, в таких случаях возбуждается исключение [`BytesWarning`](https://python-all.ru/3.16/library/exceptions.html#BytesWarning).860861Увеличивается параметром командной строки [`-b`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-b).862863По умолчанию: `0`.864865Устарело с версии 3.15, будет удалено в версии 3.17: Параметры [`-b`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-b) и `-bb` станут неактивными (no-op) в 3.17. Элемент [`bytes_warning`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.bytes_warning) будет удалён в 3.17.866867#### `int warn_default_encoding`868869Если не равно нулю, выдаётся предупреждение [`EncodingWarning`](https://python-all.ru/3.16/library/exceptions.html#EncodingWarning), когда [`io.TextIOWrapper`](https://python-all.ru/3.16/library/io.html#io.TextIOWrapper) использует свою кодировку по умолчанию. Подробнее см. [Opt-in EncodingWarning](https://python-all.ru/3.16/library/io.html#io-encoding-warning).870871По умолчанию: `0`.872873Добавлено в версии 3.10.874875#### `int code_debug_ranges`876877Если равно `0`, отключает включение сопоставлений конечных строк и столбцов в объекты кода. Также отключает печать кареток в трассировках, указывающих на конкретные места ошибок.878879Устанавливается в `0` переменной окружения [`PYTHONNODEBUGRANGES`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONNODEBUGRANGES) и параметром командной строки [`-X no_debug_ranges`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X).880881По умолчанию: `1`.882883Добавлено в версии 3.12.884885#### `wchar_t *check_hash_pycs_mode`886887Управляет поведением проверки hash-based `.pyc` файлов: значение параметра командной строки [`--check-hash-based-pycs`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-check-hash-based-pycs).888889Допустимые значения:890891- `L"always"`: Хешировать исходный файл для инвалидации независимо от значения флага ‘check\_source’.892- `L"never"`: Считать, что хеш-основанные pyc всегда корректны.893- `L"default"`: Флаг ‘check\_source’ в хеш-основанных pyc определяет недействительность.894895По умолчанию: `L"default"`.896897См. также [**PEP 552**](https://python-all.ru/3.16/c-api/init_config.html) «Детерминированные pyc».898899#### `int configure_c_stdio`900901Если не равно нулю, настраиваются стандартные потоки C:902903- В Windows устанавливается двоичный режим (`O_BINARY`) для stdin, stdout и stderr.904- Если [`buffered_stdio`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.buffered_stdio) равно нулю, буферизация потоков stdin, stdout и stderr отключается.905- Если [`interactive`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.interactive) не равно нулю, буферизация потоков stdin и stdout включается (только stdout в Windows).906907По умолчанию: `1` в конфигурации Python, `0` в изолированной конфигурации.908909#### `int dev_mode`910911Если не равно нулю, включается [режим разработки Python](https://python-all.ru/3.16/library/devmode.html#devmode).912913Устанавливается в `1` опцией [`-X dev`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONDEVMODE`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONDEVMODE).914915По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.916917#### `int dump_refs`918919Сбрасывать ссылки Python?920921Если не равно нулю, сбрасывать все объекты, которые все еще существуют при завершении.922923Устанавливается в `1` переменной окружения [`PYTHONDUMPREFS`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONDUMPREFS).924925Требуется специальная сборка Python с определённым макросом `Py_TRACE_REFS`: см. [`configure --with-trace-refs option`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-trace-refs).926927По умолчанию: `0`.928929#### `wchar_t *dump_refs_file`930931Имя файла для дампа ссылок Python.932933Устанавливается переменной окружения [`PYTHONDUMPREFSFILE`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONDUMPREFSFILE).934935По умолчанию: `NULL`.936937Добавлено в версии 3.12.938939#### `wchar_t *exec_prefix`940941Префикс каталога, специфичного для сайта, где устанавливаются платформозависимые файлы Python: [`sys.exec_prefix`](https://python-all.ru/3.16/library/sys.html#sys.exec_prefix).942943По умолчанию: `NULL`.944945Часть вывода [конфигурации путей Python](https://python-all.ru/3.16/c-api/init_config.html#init-path-config).946947См. также [`PyConfig.base_exec_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.base_exec_prefix).948949#### `wchar_t *executable`950951Абсолютный путь к исполняемому двоичному файлу интерпретатора Python: [`sys.executable`](https://python-all.ru/3.16/library/sys.html#sys.executable).952953По умолчанию: `NULL`.954955Часть вывода [конфигурации путей Python](https://python-all.ru/3.16/c-api/init_config.html#init-path-config).956957См. также [`PyConfig.base_executable`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.base_executable).958959#### `int faulthandler`960961Включить faulthandler?962963Если не равно нулю, вызвать [`faulthandler.enable()`](https://python-all.ru/3.16/library/faulthandler.html#faulthandler.enable) при запуске.964965Устанавливается в `1` с помощью [`-X faulthandler`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONFAULTHANDLER`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONFAULTHANDLER).966967По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.968969#### `wchar_t *filesystem_encoding`970971[Кодировка файловой системы](https://python-all.ru/3.16/glossary.html#term-filesystem-encoding-and-error-handler): [`sys.getfilesystemencoding()`](https://python-all.ru/3.16/library/sys.html#sys.getfilesystemencoding).972973На macOS, Android и VxWorks: по умолчанию используется `"utf-8"`.974975На Windows: по умолчанию используется `"utf-8"` или `"mbcs"`, если [`legacy_windows_fs_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.legacy_windows_fs_encoding) параметра [`PyPreConfig`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig) не равно нулю.976977Кодировка по умолчанию на других платформах:978979- `"utf-8"`, если [`PyPreConfig.utf8_mode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.utf8_mode) не равно нулю.980- `"ascii"`, если Python определяет, что `nl_langinfo(CODESET)` объявляет кодировку ASCII, в то время как функция `mbstowcs()` декодирует из другой кодировки (обычно Latin1).981- `"utf-8"`, если `nl_langinfo(CODESET)` возвращает пустую строку.982- В противном случае используется [кодировка локали](https://python-all.ru/3.16/glossary.html#term-locale-encoding): результат `nl_langinfo(CODESET)`.983984При запуске Python имя кодировки нормализуется до имени кодека Python. Например, `"ANSI_X3.4-1968"` заменяется на `"ascii"`.985986См. также член [`filesystem_errors`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.filesystem_errors).987988#### `wchar_t *filesystem_errors`989990[Обработчик ошибок файловой системы](https://python-all.ru/3.16/glossary.html#term-filesystem-encoding-and-error-handler): [`sys.getfilesystemencodeerrors()`](https://python-all.ru/3.16/library/sys.html#sys.getfilesystemencodeerrors).991992На Windows: по умолчанию используется `"surrogatepass"` или `"replace"`, если [`legacy_windows_fs_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.legacy_windows_fs_encoding) параметра [`PyPreConfig`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig) не равно нулю.993994На других платформах: по умолчанию используется `"surrogateescape"`.995996Поддерживаемые обработчики ошибок:997998- `"strict"`999- `"surrogateescape"`1000- `"surrogatepass"` (поддерживается только с кодировкой UTF-8)10011002См. также член [`filesystem_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.filesystem_encoding).10031004#### `int use_frozen_modules`10051006Если не равно нулю, использовать замороженные модули.10071008Устанавливается переменной окружения [`PYTHON_FROZEN_MODULES`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_FROZEN_MODULES).10091010По умолчанию: `1` в сборке выпуска, или `0` в [отладочной сборке](https://python-all.ru/3.16/using/configure.html#debug-build).10111012#### `unsigned long hash_seed`10131014#### `int use_hash_seed`10151016Случайное зерно хеш-функции.10171018Если [`use_hash_seed`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.use_hash_seed) равен нулю, начальное значение (seed) выбирается случайным образом при запуске Python, а [`hash_seed`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.hash_seed) игнорируется.10191020Задаётся переменной окружения [`PYTHONHASHSEED`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONHASHSEED).10211022Значение *use\_hash\_seed* по умолчанию: `-1` в режиме Python, `0` в изолированном режиме.10231024#### `wchar_t *home`10251026Задаёт каталог Python «home» по умолчанию, то есть расположение стандартных библиотек Python (см. [`PYTHONHOME`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONHOME)).10271028Задаётся переменной окружения [`PYTHONHOME`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONHOME).10291030По умолчанию: `NULL`.10311032Часть входа [Python Path Configuration](https://python-all.ru/3.16/c-api/init_config.html#init-path-config).10331034#### `int import_time`10351036> Если `1`, профилировать время импорта. Если `2`, включать дополнительный вывод, указывающий, когда импортированный модуль уже был загружен.1037>1038> Задаётся опцией [`-X importtime`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONPROFILEIMPORTTIME`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONPROFILEIMPORTTIME).1039>1040> По умолчанию: `0`.10411042Изменено в версии 3.14: Добавлена поддержка `import_time = 2`10431044#### `int inspect`10451046Войти в интерактивный режим после выполнения скрипта или команды.10471048Если больше `0`, включить inspect: когда скрипт передан первым аргументом или используется опция -c, войти в интерактивный режим после выполнения скрипта или команды, даже если [`sys.stdin`](https://python-all.ru/3.16/library/sys.html#sys.stdin) не выглядит как терминал.10491050Увеличивается опцией командной строки [`-i`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-i). Устанавливается в `1`, если переменная окружения [`PYTHONINSPECT`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONINSPECT) не пуста.10511052По умолчанию: `0`.10531054#### `int install_signal_handlers`10551056Устанавливать обработчики сигналов Python?10571058По умолчанию: `1` в режиме Python, `0` в изолированном режиме.10591060#### `int interactive`10611062Если больше `0`, включить интерактивный режим (REPL).10631064Увеличивается опцией командной строки [`-i`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-i).10651066По умолчанию: `0`.10671068#### `int int_max_str_digits`10691070Настраивает [ограничение длины преобразования целого числа в строку](https://python-all.ru/3.16/library/stdtypes.html#int-max-str-digits). Начальное значение `-1` означает, что значение будет взято из командной строки или окружения, либо по умолчанию равно 4300 ([`sys.int_info.default_max_str_digits`](https://python-all.ru/3.16/library/sys.html#sys.int_info.default_max_str_digits)). Значение `0` отключает ограничение. Значения больше нуля, но меньше 640 ([`sys.int_info.str_digits_check_threshold`](https://python-all.ru/3.16/library/sys.html#sys.int_info.str_digits_check_threshold)) не поддерживаются и вызовут ошибку.10711072Настраивается флагом командной строки [`-X int_max_str_digits`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) или переменной окружения [`PYTHONINTMAXSTRDIGITS`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONINTMAXSTRDIGITS).10731074По умолчанию: `-1` в режиме Python. 4300 ([`sys.int_info.default_max_str_digits`](https://python-all.ru/3.16/library/sys.html#sys.int_info.default_max_str_digits)) в изолированном режиме.10751076Добавлено в версии 3.12.10771078#### `int cpu_count`10791080Если значение [`cpu_count`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.cpu_count) не равно `-1`, то оно переопределит возвращаемые значения [`os.cpu_count()`](https://python-all.ru/3.16/library/os.html#os.cpu_count), [`os.process_cpu_count()`](https://python-all.ru/3.16/library/os.html#os.process_cpu_count) и [`multiprocessing.cpu_count()`](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing.cpu_count).10811082Настраивается флагом командной строки `-X cpu_count=n|default` или переменной окружения [`PYTHON_CPU_COUNT`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_CPU_COUNT).10831084По умолчанию: `-1`.10851086Добавлено в версии 3.13.10871088#### `int isolated`10891090Если больше `0`, включить изолированный режим:10911092- Установить [`safe_path`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.safe_path) в `1`: не добавлять потенциально небезопасный путь к [`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path) при запуске Python, например, текущий каталог, каталог скрипта или пустую строку.1093- Установить [`use_environment`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.use_environment) в `0`: игнорировать переменные окружения `PYTHON`.1094- Установить [`user_site_directory`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.user_site_directory) в `0`: не добавлять каталог пользовательских сайт-пакетов в [`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path).1095- REPL Python не импортирует [`readline`](https://python-all.ru/3.16/library/readline.html#module-readline) и не включает стандартную конфигурацию readline в интерактивных приглашениях.10961097Устанавливается в `1` параметром командной строки [`-I`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-I).10981099По умолчанию: `0` в режиме Python, `1` в изолированном режиме.11001101См. также [Изолированная конфигурация](https://python-all.ru/3.16/c-api/init_config.html#init-isolated-conf) и [`PyPreConfig.isolated`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.isolated).11021103#### `int legacy_windows_stdio`11041105Если не ноль, использовать [`io.FileIO`](https://python-all.ru/3.16/library/io.html#io.FileIO) вместо `io._WindowsConsoleIO` для [`sys.stdin`](https://python-all.ru/3.16/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.16/library/sys.html#sys.stdout) и [`sys.stderr`](https://python-all.ru/3.16/library/sys.html#sys.stderr).11061107Устанавливается в `1`, если переменная окружения [`PYTHONLEGACYWINDOWSSTDIO`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONLEGACYWINDOWSSTDIO) задана непустой строкой.11081109Доступно только в Windows. Макрос `#ifdef MS_WINDOWS` можно использовать для кода, зависящего от Windows.11101111По умолчанию: `0`.11121113См. также [**PEP 528**](https://python-all.ru/3.16/c-api/init_config.html) (Изменение кодировки консоли Windows на UTF-8).11141115#### `int malloc_stats`11161117Если не ноль, вывести статистику по [аллокатору памяти Python pymalloc](https://python-all.ru/3.16/c-api/memory.html#pymalloc) при завершении.11181119Устанавливается в `1` переменной окружения [`PYTHONMALLOCSTATS`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONMALLOCSTATS).11201121Параметр игнорируется, если Python [`configured using the --without-pymalloc option`](https://python-all.ru/3.16/using/configure.html#cmdoption-without-pymalloc).11221123По умолчанию: `0`.11241125#### `wchar_t *platlibdir`11261127Имя каталога библиотек платформы: [`sys.platlibdir`](https://python-all.ru/3.16/library/sys.html#sys.platlibdir).11281129Устанавливается переменной окружения [`PYTHONPLATLIBDIR`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONPLATLIBDIR).11301131По умолчанию: значение макроса `PLATLIBDIR`, которое задаётся [`configure --with-platlibdir option`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-platlibdir) (по умолчанию: `"lib"` или `"DLLs"` в Windows).11321133Часть входных данных [Конфигурации путей Python](https://python-all.ru/3.16/c-api/init_config.html#init-path-config).11341135Добавлено в версии 3.9.11361137Изменено в версии 3.11: Этот макрос теперь используется в Windows для поиска модулей расширения стандартной библиотеки, обычно в `DLLs`. Однако для совместимости учтите, что это значение игнорируется для любых нестандартных расположений, включая сборки в дереве исходников и виртуальные окружения.11381139#### `wchar_t *pythonpath_env`11401141Пути поиска модулей ([`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path)) в виде строки, разделённой `DELIM` ([`os.pathsep`](https://python-all.ru/3.16/library/os.html#os.pathsep)).11421143Устанавливается переменной окружения [`PYTHONPATH`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONPATH).11441145По умолчанию: `NULL`.11461147Часть входных данных [Конфигурации путей Python](https://python-all.ru/3.16/c-api/init_config.html#init-path-config).11481149#### `PyWideStringList module_search_paths`11501151#### `int module_search_paths_set`11521153Пути поиска модулей: [`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path).11541155Если [`module_search_paths_set`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.module_search_paths_set) равно `0`, [`Py_InitializeFromConfig()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_InitializeFromConfig) заменит [`module_search_paths`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.module_search_paths) и установит `module_search_paths_set` в `1`.11561157По умолчанию: пустой список (`module_search_paths`) и `0` (`module_search_paths_set`).11581159Часть вывода [конфигурации путей Python](https://python-all.ru/3.16/c-api/init_config.html#init-path-config).11601161#### `int optimization_level`11621163Уровень оптимизации компиляции:11641165- `0`: Оптимизатор Peephole, устанавливает `__debug__` в `True`.1166- `1`: Уровень 0, удаляет утверждения, устанавливает `__debug__` в `False`.1167- `2`: Уровень 1, удаляет строки документации.11681169Увеличивается опцией командной строки [`-O`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-O). Устанавливается в значение переменной окружения [`PYTHONOPTIMIZE`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONOPTIMIZE).11701171По умолчанию: `0`.11721173#### `PyWideStringList orig_argv`11741175Список исходных аргументов командной строки, переданных исполняемому файлу Python: [`sys.orig_argv`](https://python-all.ru/3.16/library/sys.html#sys.orig_argv).11761177Если список [`orig_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.orig_argv) пуст, а [`argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv) не является списком, содержащим только пустую строку, то [`PyConfig_Read()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Read) копирует `argv` в `orig_argv` перед изменением `argv` (если [`parse_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.parse_argv) не равно нулю).11781179См. также элемент [`argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv) и функцию [`Py_GetArgcArgv()`](https://python-all.ru/3.16/c-api/init_config.html#c.Py_GetArgcArgv).11801181По умолчанию: пустой список.11821183Добавлено в версии 3.10.11841185#### `int parse_argv`11861187Разбирать аргументы командной строки?11881189Если равно `1`, разбирать [`argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv) так же, как обычный Python разбирает [аргументы командной строки](https://python-all.ru/3.16/using/cmdline.html#using-on-cmdline), и удалять аргументы Python из `argv`.11901191Функция [`PyConfig_Read()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Read) разбирает аргументы [`PyConfig.argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv) только один раз: [`PyConfig.parse_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.parse_argv) устанавливается в `2` после разбора аргументов. Поскольку аргументы Python удаляются из `PyConfig.argv`, повторный разбор аргументов приведёт к тому, что параметры приложения будут интерпретироваться как параметры Python.11921193По умолчанию: `1` в режиме Python, `0` в изолированном режиме.11941195Изменено в версии 3.10: Аргументы [`PyConfig.argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv) теперь разбираются только если [`PyConfig.parse_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.parse_argv) равно `1`.11961197#### `int parser_debug`11981199Режим отладки синтаксического анализатора. Если больше `0`, включает вывод отладки анализатора (только для экспертов, зависит от параметров компиляции).12001201Увеличивается опцией командной строки [`-d`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-d). Устанавливается в значение переменной окружения [`PYTHONDEBUG`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONDEBUG).12021203Требуется [отладочная сборка Python](https://python-all.ru/3.16/using/configure.html#debug-build) (макрос `Py_DEBUG` должен быть определён).12041205По умолчанию: `0`.12061207#### `int pathconfig_warnings`12081209Если не равно нулю, вычисление конфигурации путей может записывать предупреждения в `stderr`. Если равно `0`, подавлять эти предупреждения.12101211По умолчанию: `1` в режиме Python, `0` в изолированном режиме.12121213Часть входных данных [конфигурации путей Python](https://python-all.ru/3.16/c-api/init_config.html#init-path-config).12141215Изменено в версии 3.11: теперь также применяется на Windows.12161217#### `wchar_t *prefix`12181219Префикс каталога, специфичный для сайта, в который устанавливаются платформонезависимые файлы Python: [`sys.prefix`](https://python-all.ru/3.16/library/sys.html#sys.prefix).12201221По умолчанию: `NULL`.12221223Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.16/c-api/init_config.html#init-path-config).12241225См. также [`PyConfig.base_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.base_prefix).12261227#### `wchar_t *program_name`12281229Имя программы, используемое для инициализации [`executable`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.executable) и в ранних сообщениях об ошибках во время инициализации Python.12301231- На macOS используется переменная окружения [`PYTHONEXECUTABLE`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONEXECUTABLE), если она установлена.1232- Если определён макрос `WITH_NEXT_FRAMEWORK`, используется переменная окружения `__PYVENV_LAUNCHER__`, если она установлена.1233- Используется `argv[0]` из [`argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv), если она доступна и непустая.1234- В противном случае используется `L"python"` на Windows или `L"python3"` на других платформах.12351236По умолчанию: `NULL`.12371238Часть входных данных [конфигурации путей Python](https://python-all.ru/3.16/c-api/init_config.html#init-path-config).12391240#### `wchar_t *pycache_prefix`12411242Каталог, в который записываются кэшированные файлы `.pyc`: [`sys.pycache_prefix`](https://python-all.ru/3.16/library/sys.html#sys.pycache_prefix).12431244Устанавливается опцией командной строки [`-X pycache_prefix=PATH`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONPYCACHEPREFIX`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONPYCACHEPREFIX). Опция командной строки имеет приоритет.12451246Если `NULL`, [`sys.pycache_prefix`](https://python-all.ru/3.16/library/sys.html#sys.pycache_prefix) устанавливается в `None`.12471248По умолчанию: `NULL`.12491250#### `int quiet`12511252Тихий режим. Если больше `0`, не отображать авторские права и версию при запуске Python в интерактивном режиме.12531254Увеличивается опцией командной строки [`-q`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-q).12551256По умолчанию: `0`.12571258#### `wchar_t *run_command`12591260Значение опции командной строки [`-c`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-c).12611262Используется [`Py_RunMain()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_RunMain).12631264По умолчанию: `NULL`.12651266#### `wchar_t *run_filename`12671268Имя файла, переданное в командной строке: последний аргумент командной строки без [`-c`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-c) или [`-m`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-m). Используется функцией [`Py_RunMain()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_RunMain).12691270Например, устанавливается в `script.py` командной строкой `python3 script.py arg` .12711272См. также опцию [`PyConfig.skip_source_first_line`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.skip_source_first_line).12731274По умолчанию: `NULL`.12751276#### `wchar_t *run_module`12771278Значение параметра командной строки [`-m`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-m).12791280Используется [`Py_RunMain()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_RunMain).12811282По умолчанию: `NULL`.12831284#### `wchar_t *run_presite`12851286Точка входа `module` или `module:func`, которая выполняется до импорта модуля [`site`](https://python-all.ru/3.16/library/site.html#module-site).12871288Устанавливается параметром командной строки [`-X presite=module:func`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHON_PRESITE`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_PRESITE). Параметр командной строки имеет приоритет.12891290Требуется [отладочная сборка Python](https://python-all.ru/3.16/using/configure.html#debug-build) (макрос `Py_DEBUG` должен быть определён).12911292По умолчанию: `NULL`.12931294#### `int show_ref_count`12951296Показывать общее количество ссылок при выходе (исключая [бессмертные](https://python-all.ru/3.16/glossary.html#term-immortal) объекты)?12971298Устанавливается в `1` параметром командной строки [`-X showrefcount`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X).12991300Требуется [отладочная сборка Python](https://python-all.ru/3.16/using/configure.html#debug-build) (макрос `Py_REF_DEBUG` должен быть определён).13011302По умолчанию: `0`.13031304#### `int site_import`13051306Импортировать модуль [`site`](https://python-all.ru/3.16/library/site.html#module-site) при запуске?13071308Если равно нулю, импорт модуля site и зависящие от site манипуляции с [`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path) отключаются.13091310Также отключает эти манипуляции, если модуль [`site`](https://python-all.ru/3.16/library/site.html#module-site) импортирован явно (вызовите [`site.main()`](https://python-all.ru/3.16/library/site.html#site.main), чтобы включить их).13111312Устанавливается в `0` параметром командной строки [`-S`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-S).13131314[`sys.flags.no_site`](https://python-all.ru/3.16/library/sys.html#sys.flags) устанавливается в инвертированное значение [`site_import`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.site_import).13151316По умолчанию: `1`.13171318#### `int skip_source_first_line`13191320Если не ноль, пропустить первую строку исходного кода [`PyConfig.run_filename`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.run_filename).13211322Это позволяет использовать не-Unix формы `#!cmd`. Предназначено только для DOS-специфичного хака.13231324Устанавливается в `1` параметром командной строки [`-x`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-x).13251326По умолчанию: `0`.13271328#### `wchar_t *stdio_encoding`13291330#### `wchar_t *stdio_errors`13311332Кодировка и ошибки кодирования для [`sys.stdin`](https://python-all.ru/3.16/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.16/library/sys.html#sys.stdout) и [`sys.stderr`](https://python-all.ru/3.16/library/sys.html#sys.stderr) (но `sys.stderr` всегда использует обработчик ошибок `"backslashreplace"`).13331334Использовать переменную окружения [`PYTHONIOENCODING`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONIOENCODING), если она не пуста.13351336Кодировка по умолчанию:13371338- `"UTF-8"`, если [`PyPreConfig.utf8_mode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.utf8_mode) не равно нулю.1339- В противном случае используется [кодировка локали](https://python-all.ru/3.16/glossary.html#term-locale-encoding).13401341Обработчик ошибок по умолчанию:13421343- В Windows: используется `"surrogateescape"`.1344- `"surrogateescape"`, если [`PyPreConfig.utf8_mode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.utf8_mode) не равно нулю, или если локаль LC\_CTYPE имеет значение «C» или «POSIX».1345- `"strict"` в противном случае.13461347См. также [`PyConfig.legacy_windows_stdio`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.legacy_windows_stdio).13481349#### `int tracemalloc`13501351Включить tracemalloc?13521353Если не равно нулю, вызывается [`tracemalloc.start()`](https://python-all.ru/3.16/library/tracemalloc.html#tracemalloc.start) при запуске.13541355Устанавливается параметром командной строки [`-X tracemalloc=N`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONTRACEMALLOC`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONTRACEMALLOC).13561357По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.13581359#### `int perf_profiling`13601361Включить поддержку профилировщика Linux `perf`?13621363Если равно `1`, включается поддержка профилировщика Linux `perf`.13641365Если равно `2`, включается поддержка профилировщика Linux `perf` с поддержкой DWARF JIT.13661367Устанавливается в `1` параметром командной строки [`-X perf`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONPERFSUPPORT`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONPERFSUPPORT).13681369Устанавливается в `2` параметром командной строки [`-X perf_jit`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHON_PERF_JIT_SUPPORT`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_PERF_JIT_SUPPORT).13701371По умолчанию: `-1`.13721373> **См. также**1374>1375> См. [поддержку Python для профилировщиков, совместимых с perf map](https://python-all.ru/3.16/howto/perf_profiling.html#perf-profiling) для получения дополнительной информации.13761377Добавлено в версии 3.12.13781379#### `wchar_t *stdlib_dir`13801381Каталог стандартной библиотеки Python.13821383По умолчанию: `NULL`.13841385Добавлено в версии 3.12.13861387#### `int use_environment`13881389Использовать [переменные окружения](https://python-all.ru/3.16/using/cmdline.html#using-on-envvars)?13901391Если равно нулю, игнорируются [переменные окружения](https://python-all.ru/3.16/using/cmdline.html#using-on-envvars).13921393Устанавливается в `0` переменной окружения [`-E`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-E).13941395По умолчанию: `1` в конфигурации Python и `0` в изолированной конфигурации.13961397#### `int use_system_logger`13981399Если не равно нулю, `stdout` и `stderr` перенаправляются в системный журнал.14001401Доступно только на macOS 10.12 и новее, а также на iOS.14021403По умолчанию: `0` (не использовать системный журнал) на macOS; `1` на iOS (использовать системный журнал).14041405Добавлено в версии 3.14.14061407#### `int user_site_directory`14081409Если не равно нулю, в [`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path) добавляется каталог пользовательского site.14101411Устанавливается в `0` с помощью опций командной строки [`-s`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-s) и [`-I`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-I).14121413Устанавливается в `0` переменной окружения [`PYTHONNOUSERSITE`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONNOUSERSITE).14141415По умолчанию: `1` в режиме Python, `0` в изолированном режиме.14161417#### `int verbose`14181419Подробный режим. Если больше `0`, выводится сообщение каждый раз, когда модуль импортируется, с указанием места (имя файла или встроенный модуль), откуда он загружается.14201421Если больше или равно `2`, выводится сообщение для каждого файла, который проверяется при поиске модуля. Также предоставляет информацию об очистке модулей при завершении.14221423Увеличивается опцией командной строки [`-v`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-v).14241425Устанавливается значением переменной окружения [`PYTHONVERBOSE`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONVERBOSE).14261427По умолчанию: `0`.14281429#### `PyWideStringList warnoptions`14301431Опции модуля [`warnings`](https://python-all.ru/3.16/library/warnings.html#module-warnings) для построения фильтров предупреждений, от низшего к высшему приоритету: [`sys.warnoptions`](https://python-all.ru/3.16/library/sys.html#sys.warnoptions).14321433Модуль [`warnings`](https://python-all.ru/3.16/library/warnings.html#module-warnings) добавляет [`sys.warnoptions`](https://python-all.ru/3.16/library/sys.html#sys.warnoptions) в обратном порядке: последний элемент [`PyConfig.warnoptions`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.warnoptions) становится первым элементом `warnings.filters`, который проверяется первым (наивысший приоритет).14341435Опция командной строки [`-W`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-W) добавляет своё значение в [`warnoptions`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.warnoptions); её можно использовать несколько раз.14361437Переменная окружения [`PYTHONWARNINGS`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONWARNINGS) также может использоваться для добавления опций предупреждений. Можно указать несколько опций, разделённых запятыми (`,`).14381439По умолчанию: пустой список.14401441#### `int write_bytecode`14421443Если равно `0`, Python не будет пытаться записывать файлы `.pyc` при импорте исходных модулей.14441445Устанавливается в `0` опцией командной строки [`-B`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-B) и переменной окружения [`PYTHONDONTWRITEBYTECODE`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONDONTWRITEBYTECODE).14461447[`sys.dont_write_bytecode`](https://python-all.ru/3.16/library/sys.html#sys.dont_write_bytecode) инициализируется инвертированным значением [`write_bytecode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.write_bytecode).14481449По умолчанию: `1`.14501451#### `PyWideStringList xoptions`14521453Значения опций командной строки [`-X`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X): [`sys._xoptions`](https://python-all.ru/3.16/library/sys.html#sys._xoptions).14541455По умолчанию: пустой список.14561457#### `int _pystats`14581459Если не равно нулю, записывает статистику производительности при завершении Python.14601461Требуется специальная сборка с макросом `Py_STATS`: см. [`--enable-pystats`](https://python-all.ru/3.16/using/configure.html#cmdoption-enable-pystats).14621463По умолчанию: `0`.14641465Если [`parse_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.parse_argv) не равно нулю, аргументы [`argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv) разбираются так же, как обычный Python разбирает [аргументы командной строки](https://python-all.ru/3.16/using/cmdline.html#using-on-cmdline), а аргументы Python удаляются из `argv`.14661467Параметры [`xoptions`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.xoptions) разбираются для установки других опций: см. опцию командной строки [`-X`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X).14681469Изменено в версии 3.9: Поле `show_alloc_count` было удалено.14701471### Инициализация с PyConfig14721473Инициализация интерпретатора из заполненной структуры конфигурации выполняется вызовом [`Py_InitializeFromConfig()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_InitializeFromConfig).14741475Вызывающий код отвечает за обработку исключений (ошибка или выход) с помощью [`PyStatus_Exception()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyStatus_Exception) и [`Py_ExitStatusException()`](https://python-all.ru/3.16/c-api/init_config.html#c.Py_ExitStatusException).14761477Если используются [`PyImport_FrozenModules()`](https://python-all.ru/3.16/c-api/import.html#c.PyImport_FrozenModules), [`PyImport_AppendInittab()`](https://python-all.ru/3.16/c-api/import.html#c.PyImport_AppendInittab) или [`PyImport_ExtendInittab()`](https://python-all.ru/3.16/c-api/import.html#c.PyImport_ExtendInittab), они должны быть установлены или вызваны после предварительной инициализации Python и до инициализации Python. Если Python инициализируется несколько раз, `PyImport_AppendInittab()` или `PyImport_ExtendInittab()` должны вызываться перед каждой инициализацией Python.14781479Текущая конфигурация (тип `PyConfig`) хранится в `PyInterpreterState.config`.14801481Пример установки имени программы:14821483```c1484void init_python(void)1485{1486    PyStatus status;14871488    PyConfig config;1489    PyConfig_InitPythonConfig(&config);14901491    /* Установить имя программы. Неявно предварительно инициализировать Python. */1492    status = PyConfig_SetString(&config, &config.program_name,1493                                L"/path/to/my_program");1494    if (PyStatus_Exception(status)) {1495        goto exception;1496    }14971498    status = Py_InitializeFromConfig(&config);1499    if (PyStatus_Exception(status)) {1500        goto exception;1501    }1502    PyConfig_Clear(&config);1503    return;15041505exception:1506    PyConfig_Clear(&config);1507    Py_ExitStatusException(status);1508}1509```15101511Более полный пример изменения конфигурации по умолчанию: прочитать конфигурацию, а затем переопределить некоторые параметры. Обратите внимание, что начиная с версии 3.11 многие параметры не вычисляются до инициализации, поэтому их значения нельзя прочитать из структуры конфигурации. Любые значения, установленные до вызова инициализации, останутся без изменений после инициализации:15121513```c1514PyStatus init_python(const char *program_name)1515{1516    PyStatus status;15171518    PyConfig config;1519    PyConfig_InitPythonConfig(&config);15201521    /* Установить имя программы перед чтением конфигурации1522       (декодировать байтовую строку из кодировки локали).15231524       Неявно предварительно инициализировать Python. */1525    status = PyConfig_SetBytesString(&config, &config.program_name,1526                                     program_name);1527    if (PyStatus_Exception(status)) {1528        goto done;1529    }15301531    /* Прочитать всю конфигурацию сразу */1532    status = PyConfig_Read(&config);1533    if (PyStatus_Exception(status)) {1534        goto done;1535    }15361537    /* Указать sys.path явно */1538    /* Если требуется изменить стандартный набор путей, завершите1539       сначала инициализация, а затем используйте PySys_GetAttrString("path") */1540    config.module_search_paths_set = 1;1541    status = PyWideStringList_Append(&config.module_search_paths,1542                                     L"/path/to/stdlib");1543    if (PyStatus_Exception(status)) {1544        goto done;1545    }1546    status = PyWideStringList_Append(&config.module_search_paths,1547                                     L"/path/to/more/modules");1548    if (PyStatus_Exception(status)) {1549        goto done;1550    }15511552    /* Переопределить исполняемый файл, вычисленный PyConfig_Read() */1553    status = PyConfig_SetString(&config, &config.executable,1554                                L"/path/to/my_executable");1555    if (PyStatus_Exception(status)) {1556        goto done;1557    }15581559    status = Py_InitializeFromConfig(&config);15601561done:1562    PyConfig_Clear(&config);1563    return status;1564}1565```15661567### Изолированная конфигурация15681569Функции [`PyPreConfig_InitIsolatedConfig()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig_InitIsolatedConfig) и [`PyConfig_InitIsolatedConfig()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_InitIsolatedConfig) создают конфигурацию для изоляции Python от системы. Например, для встраивания Python в приложение.15701571Эта конфигурация игнорирует глобальные переменные конфигурации, переменные окружения, аргументы командной строки ([`PyConfig.argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv) не разбирается) и каталог пользовательских сайтов. Стандартные потоки C (например: `stdout`) и локаль LC\_CTYPE остаются без изменений. Обработчики сигналов не устанавливаются.15721573Конфигурационные файлы по-прежнему используются с этой конфигурацией для определения путей, которые не указаны. Убедитесь, что [`PyConfig.home`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.home) указан, чтобы избежать вычисления конфигурации путей по умолчанию.15741575### Конфигурация Python15761577Функции [`PyPreConfig_InitPythonConfig()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig_InitPythonConfig) и [`PyConfig_InitPythonConfig()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_InitPythonConfig) создают конфигурацию для сборки настраиваемого Python, который ведёт себя как обычный Python.15781579Переменные окружения и аргументы командной строки используются для настройки Python, тогда как глобальные переменные конфигурации игнорируются.15801581Эта функция включает принудительное использование локали C ([**PEP 538**](https://python-all.ru/3.16/c-api/init_config.html)) и [Режим Python UTF-8](https://python-all.ru/3.16/library/os.html#utf8-mode) ([**PEP 540**](https://python-all.ru/3.16/c-api/init_config.html)) в зависимости от локали LC\_CTYPE, переменных окружения [`PYTHONUTF8`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONUTF8) и [`PYTHONCOERCECLOCALE`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONCOERCECLOCALE).15821583### Конфигурация путей Python15841585[`PyConfig`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig) содержит несколько полей для конфигурации путей:15861587- Входные данные конфигурации путей:15881589  - [`PyConfig.home`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.home)1590  - [`PyConfig.platlibdir`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.platlibdir)1591  - [`PyConfig.pathconfig_warnings`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.pathconfig_warnings)1592  - [`PyConfig.program_name`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.program_name)1593  - [`PyConfig.pythonpath_env`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.pythonpath_env)1594  - текущий рабочий каталог: для получения абсолютных путей1595  - переменная окружения `PATH` для получения полного пути программы (из [`PyConfig.program_name`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.program_name))1596  - переменная окружения `__PYVENV_LAUNCHER__`1597  - (только Windows) Пути приложений в реестре в разделе “SoftwarePythonPythonCoreX.YPythonPath” для HKEY\_CURRENT\_USER и HKEY\_LOCAL\_MACHINE (где X.Y – версия Python).1598- Выходные поля конфигурации путей:15991600  - [`PyConfig.base_exec_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.base_exec_prefix)1601  - [`PyConfig.base_executable`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.base_executable)1602  - [`PyConfig.base_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.base_prefix)1603  - [`PyConfig.exec_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.exec_prefix)1604  - [`PyConfig.executable`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.executable)1605  - [`PyConfig.module_search_paths_set`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.module_search_paths_set), [`PyConfig.module_search_paths`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.module_search_paths)1606  - [`PyConfig.prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.prefix)16071608Если хотя бы одно «выходное поле» не установлено, Python вычисляет конфигурацию путей, чтобы заполнить неустановленные поля. Если [`module_search_paths_set`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.module_search_paths_set) равно `0`, [`module_search_paths`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.module_search_paths) переопределяется, а `module_search_paths_set` устанавливается в `1`.16091610Можно полностью игнорировать функцию, вычисляющую конфигурацию путей по умолчанию, явно задав все перечисленные выше выходные поля конфигурации путей. Строка считается заданной, даже если она не пуста. `module_search_paths` считается заданным, если `module_search_paths_set` установлено в `1`. В этом случае `module_search_paths` будет использоваться без изменений.16111612Установите [`pathconfig_warnings`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.pathconfig_warnings) в `0`, чтобы подавить предупреждения при вычислении конфигурации путей (только Unix, Windows не регистрирует предупреждения).16131614Если поля [`base_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.base_prefix) или [`base_exec_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.base_exec_prefix) не заданы, они наследуют свои значения от [`prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.prefix) и [`exec_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.exec_prefix) соответственно.16151616[`Py_RunMain()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_RunMain) и [`Py_Main()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_Main) изменяют [`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path):16171618- Если [`run_filename`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.run_filename) задано и является каталогом, содержащим скрипт `__main__.py`, добавьте `run_filename` в начало [`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path).1619- Если [`isolated`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.isolated) равно нулю:16201621  - Если [`run_module`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.run_module) задан, добавьте текущий каталог в начало [`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path). Ничего не делайте, если текущий каталог не может быть прочитан.1622  - Если [`run_filename`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.run_filename) задан, добавьте каталог файла в начало [`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path).1623  - В противном случае пустая строка добавляется в начало [`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path).16241625Если [`site_import`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.site_import) не равно нулю, то [`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path) может быть изменён модулем [`site`](https://python-all.ru/3.16/library/site.html#module-site). Если [`user_site_directory`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.user_site_directory) не равно нулю и каталог пакетов сайта пользователя существует, модуль `site` добавляет каталог пакетов сайта пользователя в `sys.path`.16261627При конфигурации путей используются следующие файлы конфигурации:16281629- `pyvenv.cfg`1630- Файл `._pth` (например, `python._pth`)1631- `pybuilddir.txt` (только Unix)16321633Если присутствует файл `._pth`:16341635- Устанавливает [`isolated`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.isolated) в `1`.1636- Устанавливает [`use_environment`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.use_environment) в `0`.1637- Устанавливает [`site_import`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.site_import) в `0`.1638- Устанавливает [`user_site_directory`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.user_site_directory) в `0` (начиная с версии 3.15).1639- Устанавливает [`safe_path`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.safe_path) в `1`.16401641Если [`home`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.home) не задан и файл `pyvenv.cfg` присутствует в том же каталоге, что и [`executable`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.executable), или в его родительском каталоге, то [`prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.prefix) и [`exec_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.exec_prefix) устанавливаются в этот каталог. В этом случае [`base_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.base_prefix) и [`base_exec_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.base_exec_prefix) по-прежнему сохраняют свои значения, указывая на базовую установку. Дополнительную информацию см. в разделе [Виртуальные окружения](https://python-all.ru/3.16/library/sys_path_init.html#sys-path-init-virtual-environments).16421643Переменная окружения `__PYVENV_LAUNCHER__` используется для установки [`PyConfig.base_executable`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.base_executable).16441645Изменено в версии 3.14: [`prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.prefix) и [`exec_prefix`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.exec_prefix) теперь устанавливаются в каталог `pyvenv.cfg`. Ранее это выполнялось модулем [`site`](https://python-all.ru/3.16/library/site.html#module-site), поэтому на них влияла [`-S`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-S).16461647Изменено в версии 3.15: [`user_site_directory`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.user_site_directory) теперь устанавливается в `0` при наличии файла `._pth`.16481649## Py\_GetArgcArgv()16501651#### `void Py_GetArgcArgv(int *argc, wchar_t ***argv)`16521653Возвращает исходные аргументы командной строки до того, как Python их изменил.16541655См. также элемент [`PyConfig.orig_argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.orig_argv).16561657## Многофазная инициализация (частный временный API)16581659Данный раздел представляет собой частный временный API, вводящий многофазную инициализацию – ключевую возможность [**PEP 432**](https://python-all.ru/3.16/c-api/init_config.html):16601661- Фаза «базовой» инициализации, «минимальный Python»:16621663  - Встроенные типы;1664  - Встроенные исключения;1665  - Встроенные и замороженные модули;1666  - Модуль [`sys`](https://python-all.ru/3.16/library/sys.html#module-sys) инициализирован лишь частично (например, [`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path) ещё не существует).1667- Фаза «основной» инициализации, Python полностью инициализирован:16681669  - Устанавливает и настраивает [`importlib`](https://python-all.ru/3.16/library/importlib.html#module-importlib);1670  - Применяет [конфигурацию путей](https://python-all.ru/3.16/c-api/init_config.html#init-path-config);1671  - Устанавливает обработчики сигналов;1672  - Завершает инициализацию модуля [`sys`](https://python-all.ru/3.16/library/sys.html#module-sys) (например, создаёт [`sys.stdout`](https://python-all.ru/3.16/library/sys.html#sys.stdout) и [`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path));1673  - Включает опциональные возможности, такие как [`faulthandler`](https://python-all.ru/3.16/library/faulthandler.html#module-faulthandler) и [`tracemalloc`](https://python-all.ru/3.16/library/tracemalloc.html#module-tracemalloc);1674  - Импортировать модуль [`site`](https://python-all.ru/3.16/library/site.html#module-site);1675  - и т. д.16761677Частный временный API:16781679#### `int PyConfig._init_main`16801681Если установлено в `0`, [`Py_InitializeFromConfig()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_InitializeFromConfig) останавливается на фазе инициализации “Core”.16821683#### `PyStatus _Py_InitializeMain(void)`16841685Переход к фазе инициализации «Main», завершение инициализации Python.16861687Во время фазы «Core» не импортируется ни один модуль, а модуль `importlib` не настроен: [Path Configuration](https://python-all.ru/3.16/c-api/init_config.html#init-path-config) применяется только во время фазы «Main». Это может позволить настраивать Python из Python, чтобы переопределить или настроить [Path Configuration](https://python-all.ru/3.16/c-api/init_config.html#init-path-config), возможно, установить пользовательский импортёр [`sys.meta_path`](https://python-all.ru/3.16/library/sys.html#sys.meta_path) или хук импорта и т. д.16881689Возможно, станет возможным вычислять [Path Configuration](https://python-all.ru/3.16/c-api/init_config.html#init-path-config) в Python после фазы Core и перед фазой Main, что является одной из [**PEP 432**](https://python-all.ru/3.16/c-api/init_config.html) мотиваций.16901691Фаза «Core» не определена должным образом: что должно и что не должно быть доступно на этой фазе, пока не указано. API помечен как частный и временный: API может быть изменён или даже удалён в любое время, пока не будет спроектирован надлежащий публичный API.16921693Пример выполнения кода Python между фазами инициализации «Core» и «Main»:16941695```c1696void init_python(void)1697{1698    PyStatus status;16991700    PyConfig config;1701    PyConfig_InitPythonConfig(&config);1702    config._init_main = 0;17031704    /* настроить конфигурацию 'config' */17051706    status = Py_InitializeFromConfig(&config);1707    PyConfig_Clear(&config);1708    if (PyStatus_Exception(status)) {1709        Py_ExitStatusException(status);1710    }17111712    /* ... разместить здесь дополнительный код конфигурации ...1713       by _Py_InitializeMain() */1714    int res = PyRun_SimpleString(1715        "import sys; "1716        "print('Run Python code before _Py_InitializeMain', "1717               "file=sys.stderr)");1718    if (res < 0) {1719        exit(1);1720    }17211722    /* ... put more configuration code here ... */17231724    status = _Py_InitializeMain();1725    if (PyStatus_Exception(status)) {1726        Py_ExitStatusException(status);1727    }1728}1729```1730