init_config.md
1> **Источник:** https://python-all.ru/3.14/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.14/c-api/init_config.html#c.Py_InitializeFromInitConfig).1415Функция [`Py_RunMain()`](https://python-all.ru/3.14/c-api/interp-lifecycle.html#c.Py_RunMain) может использоваться для написания настраиваемой программы на Python.1617См. также [Инициализация, финализация и потоки](https://python-all.ru/3.14/c-api/interp-lifecycle.html#initialization).1819> **См. также**20>21> [**PEP 741**](https://python-all.ru/3.14/c-api/init_config.html) «Python Configuration C API».2223### Пример2425Пример собственной сборки Python, которая всегда выполняется с включённым [режимом разработки Python](https://python-all.ru/3.14/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.14/c-api/init_config.html#init-isolated-conf).7273Её необходимо освободить с помощью [`PyInitConfig_Free()`](https://python-all.ru/3.14/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* параметра конфигурации должен быть не-NULL, завершаться нулевым символом и быть строкой в кодировке UTF-8. См. [параметры конфигурации](https://python-all.ru/3.14/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* параметра конфигурации должен быть не-NULL, завершаться нулевым символом и быть строкой в кодировке UTF-8. См. [параметры конфигурации](https://python-all.ru/3.14/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.14/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.14/c-api/init_config.html#c.PyPreConfig.allocator) | `int` | Только для чтения |209| `"argv"` | [`argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.argv) | `list[str]` | Общий |210| `"base_exec_prefix"` | [`base_exec_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.base_exec_prefix) | `str` | Общий |211| `"base_executable"` | [`base_executable`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.base_executable) | `str` | Общий |212| `"base_prefix"` | [`base_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.base_prefix) | `str` | Общий |213| `"buffered_stdio"` | [`buffered_stdio`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.buffered_stdio) | `bool` | Только для чтения |214| `"bytes_warning"` | [`bytes_warning`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.bytes_warning) | `int` | Общий |215| `"check_hash_pycs_mode"` | [`check_hash_pycs_mode`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.check_hash_pycs_mode) | `str` | Только для чтения |216| `"code_debug_ranges"` | [`code_debug_ranges`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.code_debug_ranges) | `bool` | Только для чтения |217| `"coerce_c_locale"` | [`coerce_c_locale`](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyPreConfig.coerce_c_locale_warn) | `bool` | Только для чтения |219| `"configure_c_stdio"` | [`configure_c_stdio`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.configure_c_stdio) | `bool` | Только для чтения |220| `"configure_locale"` | [`configure_locale`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig.configure_locale) | `bool` | Только для чтения |221| `"cpu_count"` | [`cpu_count`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.cpu_count) | `int` | Общий |222| `"dev_mode"` | [`dev_mode`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.dev_mode) | `bool` | Только для чтения |223| `"dump_refs"` | [`dump_refs`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.dump_refs) | `bool` | Только для чтения |224| `"dump_refs_file"` | [`dump_refs_file`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.dump_refs_file) | `str` | Только для чтения |225| `"exec_prefix"` | [`exec_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.exec_prefix) | `str` | Общий |226| `"executable"` | [`executable`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.executable) | `str` | Общий |227| `"faulthandler"` | [`faulthandler`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.faulthandler) | `bool` | Только для чтения |228| `"filesystem_encoding"` | [`filesystem_encoding`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.filesystem_encoding) | `str` | Только для чтения |229| `"filesystem_errors"` | [`filesystem_errors`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.filesystem_errors) | `str` | Только для чтения |230| `"hash_seed"` | [`hash_seed`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.hash_seed) | `int` | Только для чтения |231| `"home"` | [`home`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.home) | `str` | Только для чтения |232| `"import_time"` | [`import_time`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.import_time) | `int` | Только для чтения |233| `"inspect"` | [`inspect`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.inspect) | `bool` | Общий |234| `"install_signal_handlers"` | [`install_signal_handlers`](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyConfig.int_max_str_digits) | `int` | Общий |236| `"interactive"` | [`interactive`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.interactive) | `bool` | Общий |237| `"isolated"` | [`isolated`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.isolated) | `bool` | Только для чтения |238| `"legacy_windows_fs_encoding"` | [`legacy_windows_fs_encoding`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig.legacy_windows_fs_encoding) | `bool` | Только для чтения |239| `"legacy_windows_stdio"` | [`legacy_windows_stdio`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.legacy_windows_stdio) | `bool` | Только для чтения |240| `"malloc_stats"` | [`malloc_stats`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.malloc_stats) | `bool` | Только для чтения |241| `"module_search_paths"` | [`module_search_paths`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.module_search_paths) | `list[str]` | Общий |242| `"optimization_level"` | [`optimization_level`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.optimization_level) | `int` | Общий |243| `"orig_argv"` | [`orig_argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.orig_argv) | `list[str]` | Только для чтения |244| `"parse_argv"` | [`parse_argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.parse_argv) | `bool` | Только для чтения |245| `"parser_debug"` | [`parser_debug`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.parser_debug) | `bool` | Общий |246| `"pathconfig_warnings"` | [`pathconfig_warnings`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.pathconfig_warnings) | `bool` | Только для чтения |247| `"perf_profiling"` | [`perf_profiling`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.perf_profiling) | `bool` | Только для чтения |248| `"platlibdir"` | [`platlibdir`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.platlibdir) | `str` | Общий |249| `"prefix"` | [`prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.prefix) | `str` | Общий |250| `"program_name"` | [`program_name`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.program_name) | `str` | Только для чтения |251| `"pycache_prefix"` | [`pycache_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.pycache_prefix) | `str` | Общий |252| `"quiet"` | [`quiet`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.quiet) | `bool` | Общий |253| `"run_command"` | [`run_command`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.run_command) | `str` | Только для чтения |254| `"run_filename"` | [`run_filename`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.run_filename) | `str` | Только для чтения |255| `"run_module"` | [`run_module`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.run_module) | `str` | Только для чтения |256| `"run_presite"` | [`run_presite`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.run_presite) | `str` | Только для чтения |257| `"safe_path"` | [`safe_path`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.safe_path) | `bool` | Только для чтения |258| `"show_ref_count"` | [`show_ref_count`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.show_ref_count) | `bool` | Только для чтения |259| `"site_import"` | [`site_import`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.site_import) | `bool` | Только для чтения |260| `"skip_source_first_line"` | [`skip_source_first_line`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.skip_source_first_line) | `bool` | Только для чтения |261| `"stdio_encoding"` | [`stdio_encoding`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.stdio_encoding) | `str` | Только для чтения |262| `"stdio_errors"` | [`stdio_errors`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.stdio_errors) | `str` | Только для чтения |263| `"stdlib_dir"` | [`stdlib_dir`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.stdlib_dir) | `str` | Общий |264| `"tracemalloc"` | [`tracemalloc`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.tracemalloc) | `int` | Только для чтения |265| `"use_environment"` | [`use_environment`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.use_environment) | `bool` | Общий |266| `"use_frozen_modules"` | [`use_frozen_modules`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.use_frozen_modules) | `bool` | Только для чтения |267| `"use_hash_seed"` | [`use_hash_seed`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.use_hash_seed) | `bool` | Только для чтения |268| `"use_system_logger"` | [`use_system_logger`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.use_system_logger) | `bool` | Только для чтения |269| `"user_site_directory"` | [`user_site_directory`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.user_site_directory) | `bool` | Только для чтения |270| `"utf8_mode"` | [`utf8_mode`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig.utf8_mode) | `bool` | Только для чтения |271| `"verbose"` | [`verbose`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.verbose) | `int` | Общий |272| `"warn_default_encoding"` | [`warn_default_encoding`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.warn_default_encoding) | `bool` | Только для чтения |273| `"warnoptions"` | [`warnoptions`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.warnoptions) | `list[str]` | Общий |274| `"write_bytecode"` | [`write_bytecode`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.write_bytecode) | `bool` | Общий |275| `"xoptions"` | [`xoptions`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.xoptions) | `dict[str, str]` | Общий |276| `"_pystats"` | [`_pystats`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig._pystats) | `bool` | Только для чтения |277278Видимость:279280- Общий: доступен для чтения через [`PyConfig_Get()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig_Get) и для записи через [`PyConfig_Set()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig_Set).281- Только для чтения: доступен для чтения через [`PyConfig_Get()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig_Get), но не может быть изменён через [`PyConfig_Set()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig_Set).282283## API конфигурации Python во время выполнения284285Во время выполнения можно получать и устанавливать параметры конфигурации с помощью функций [`PyConfig_Get()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig_Get) и [`PyConfig_Set()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig_Set).286287Параметр *name* параметра конфигурации должен быть не-NULL, завершаться нулевым символом и быть строкой в кодировке UTF-8. См. [параметры конфигурации](https://python-all.ru/3.14/c-api/init_config.html#pyinitconfig-opts).288289Некоторые параметры считываются из атрибутов [`sys`](https://python-all.ru/3.14/library/sys.html#module-sys). Например, параметр `"argv"` считывается из [`sys.argv`](https://python-all.ru/3.14/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.14/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.14/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.14/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.14/library/exceptions.html#ValueError), если отсутствует параметр *name*.335- Возбуждает [`ValueError`](https://python-all.ru/3.14/library/exceptions.html#ValueError), если *value* является недопустимым значением.336- Возбуждает [`ValueError`](https://python-all.ru/3.14/library/exceptions.html#ValueError), если параметр доступен только для чтения (не может быть установлен).337- Возбуждает [`TypeError`](https://python-all.ru/3.14/library/exceptions.html#TypeError), если *value* имеет неправильный тип.338339Вызывающий должен иметь [прикреплённое состояние потока](https://python-all.ru/3.14/glossary.html#term-attached-thread-state). Функцию нельзя вызывать до инициализации Python или после его финализации.340341Возбуждает [событие аудита](https://python-all.ru/3.14/library/sys.html#auditing) `cpython.PyConfig_Set` с аргументами `name`, `value`.342343Добавлено в версии 3.14.344345Изменено в версии 3.14.6 (не выпущена): Функция теперь заменяет [`sys.flags`](https://python-all.ru/3.14/library/sys.html#sys.flags) (создаёт новый объект), вместо изменения `sys.flags` на месте.346347## PyConfig C API348349Добавлено в версии 3.8.350351Python может быть инициализирован с помощью [`Py_InitializeFromConfig()`](https://python-all.ru/3.14/c-api/interp-lifecycle.html#c.Py_InitializeFromConfig) и структуры [`PyConfig`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig). Он может быть предварительно инициализирован с помощью [`Py_PreInitialize()`](https://python-all.ru/3.14/c-api/init_config.html#c.Py_PreInitialize) и структуры [`PyPreConfig`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig).352353Существует два вида конфигурации:354355- [Конфигурация Python](https://python-all.ru/3.14/c-api/init_config.html#init-python-config) может использоваться для создания настраиваемого Python, который ведёт себя как обычный Python. Например, переменные окружения и аргументы командной строки используются для настройки Python.356- [Изолированная конфигурация](https://python-all.ru/3.14/c-api/init_config.html#init-isolated-conf) может использоваться для встраивания Python в приложение. Она изолирует Python от системы. Например, переменные окружения игнорируются, локаль LC\_CTYPE остаётся неизменной и не регистрируется ни один обработчик сигналов.357358Функция [`Py_RunMain()`](https://python-all.ru/3.14/c-api/interp-lifecycle.html#c.Py_RunMain) может использоваться для написания настраиваемой программы на Python.359360См. также [Инициализация, финализация и потоки](https://python-all.ru/3.14/c-api/interp-lifecycle.html#initialization).361362> **См. также**363>364> [**PEP 587**](https://python-all.ru/3.14/c-api/init_config.html) “Конфигурация инициализации Python”.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.14/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.14/c-api/init_config.html#init-python-config).540541#### `void PyPreConfig_InitIsolatedConfig(PyPreConfig *preconfig)`542543Инициализировать предварительную конфигурацию с [Изолированной конфигурацией](https://python-all.ru/3.14/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.14/c-api/memory.html#default-memory-allocators).553- `PYMEM_ALLOCATOR_DEBUG` (`2`): [стандартные распределители памяти](https://python-all.ru/3.14/c-api/memory.html#default-memory-allocators) с [отладочными перехватчиками](https://python-all.ru/3.14/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.14/c-api/memory.html#pymem-debug-hooks).556- `PYMEM_ALLOCATOR_PYMALLOC` (`5`): [распределитель памяти pymalloc из Python](https://python-all.ru/3.14/c-api/memory.html#pymalloc).557- `PYMEM_ALLOCATOR_PYMALLOC_DEBUG` (`6`): [распределитель памяти pymalloc из Python](https://python-all.ru/3.14/c-api/memory.html#pymalloc) с [отладочными перехватчиками](https://python-all.ru/3.14/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.14/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.14/using/configure.html#cmdoption-without-pymalloc).562563`PYMEM_ALLOCATOR_MIMALLOC` и `PYMEM_ALLOCATOR_MIMALLOC_DEBUG` не поддерживаются, если Python собран [`configured using --without-mimalloc`](https://python-all.ru/3.14/using/configure.html#cmdoption-without-mimalloc) или отсутствует поддержка атомарных операций.564565См. [Управление памятью](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyPreConfig.coerce_c_locale) и [`coerce_c_locale_warn`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig.coerce_c_locale_warn) в `0`.574575См. [кодировку локали](https://python-all.ru/3.14/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.14/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.14/library/devmode.html#devmode): см. [`PyConfig.dev_mode`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.dev_mode).598599По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.600601#### `int isolated`602603Изолированный режим: см. [`PyConfig.isolated`](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyPreConfig.utf8_mode) в `0`,612- Устанавливает [`PyConfig.filesystem_encoding`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.filesystem_encoding) в `"mbcs"`,613- Устанавливает [`PyConfig.filesystem_errors`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.filesystem_errors) в `"replace"`.614615Инициализируется из значения переменной окружения [`PYTHONLEGACYWINDOWSFSENCODING`](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.Py_PreInitializeFromArgs) и [`Py_PreInitializeFromBytesArgs()`](https://python-all.ru/3.14/c-api/init_config.html#c.Py_PreInitializeFromBytesArgs) обрабатывают свой аргумент `argv` так же, как обычный Python обрабатывает аргументы командной строки: см. [Аргументы командной строки](https://python-all.ru/3.14/using/cmdline.html#using-on-cmdline).624625По умолчанию: `1` в конфигурации Python, `0` в изолированной конфигурации.626627#### `int use_environment`628629Использовать [переменные окружения](https://python-all.ru/3.14/using/cmdline.html#using-on-envvars)? См. [`PyConfig.use_environment`](https://python-all.ru/3.14/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.14/library/os.html#utf8-mode).636637Устанавливается в `0` или `1` опцией командной строки [`-X utf8`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONUTF8`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONUTF8).638639Также устанавливается в `1`, если локаль `LC_CTYPE` равна `C` или `POSIX`.640641По умолчанию: `-1` в конфигурации Python и `0` в изолированной конфигурации.642643### Предварительная инициализация Python с PyPreConfig644645Предварительная инициализация Python:646647- Устанавливает распределители памяти Python ([`PyPreConfig.allocator`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig.allocator))648- Настраивает локаль LC\_CTYPE ([кодировка локали](https://python-all.ru/3.14/glossary.html#term-locale-encoding))649- Устанавливает [Режим UTF-8 Python](https://python-all.ru/3.14/library/os.html#utf8-mode) ([`PyPreConfig.utf8_mode`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig.utf8_mode))650651Текущая предварительная конфигурация (тип `PyPreConfig`) хранится в `_PyRuntime.preconfig`.652653Функции для предварительной инициализации Python:654655#### `PyStatus Py_PreInitialize(const PyPreConfig *preconfig)`656657Преинициализировать Python из предварительной конфигурации *preconfig*.658659*preconfig* не должен быть `NULL`.660661#### `PyStatus Py_PreInitializeFromBytesArgs(const PyPreConfig *preconfig, int argc, char *const *argv)`662663Преинициализировать Python из предварительной конфигурации *preconfig*.664665Обрабатывает аргументы командной строки *argv* (байтовые строки), если [`parse_argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig.parse_argv) в *preconfig* не равно нулю.666667*preconfig* не должен быть `NULL`.668669#### `PyStatus Py_PreInitializeFromArgs(const PyPreConfig *preconfig, int argc, wchar_t *const *argv)`670671Преинициализировать Python из предварительной конфигурации *preconfig*.672673Разобрать аргументы командной строки *argv* (широкие строки), если [`parse_argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig.parse_argv) структуры *preconfig* не равен нулю.674675*preconfig* не должен быть `NULL`.676677Вызывающий код отвечает за обработку исключений (ошибка или выход) с помощью [`PyStatus_Exception()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyStatus_Exception) и [`Py_ExitStatusException()`](https://python-all.ru/3.14/c-api/init_config.html#c.Py_ExitStatusException).678679Для [конфигурации Python](https://python-all.ru/3.14/c-api/init_config.html#init-python-config) ([`PyPreConfig_InitPythonConfig()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig_InitPythonConfig)), если Python инициализируется с аргументами командной строки, эти аргументы также должны быть переданы в преинициализацию Python, поскольку они влияют на предварительную конфигурацию, например, на кодировки. Например, параметр командной строки [`-X utf8`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-X) включает [режим UTF-8 Python](https://python-all.ru/3.14/library/os.html#utf8-mode).680681`PyMem_SetAllocator()` можно вызывать после [`Py_PreInitialize()`](https://python-all.ru/3.14/c-api/init_config.html#c.Py_PreInitialize) и до [`Py_InitializeFromConfig()`](https://python-all.ru/3.14/c-api/interp-lifecycle.html#c.Py_InitializeFromConfig), чтобы установить собственный распределитель памяти. Его можно вызывать до `Py_PreInitialize()`, если [`PyPreConfig.allocator`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig.allocator) установлен в `PYMEM_ALLOCATOR_NOT_SET`.682683Функции выделения памяти Python, такие как [`PyMem_RawMalloc()`](https://python-all.ru/3.14/c-api/memory.html#c.PyMem_RawMalloc), не должны использоваться до преинициализации Python, тогда как прямой вызов `malloc()` и `free()` всегда безопасен. [`Py_DecodeLocale()`](https://python-all.ru/3.14/c-api/sys.html#c.Py_DecodeLocale) не должна вызываться до преинициализации Python.684685Пример использования преинициализации для включения [режима UTF-8 Python](https://python-all.ru/3.14/library/os.html#utf8-mode):686687```c688PyStatus status;689PyPreConfig preconfig;690PyPreConfig_InitPythonConfig(&preconfig);691692preconfig.utf8_mode = 1;693694status = Py_PreInitialize(&preconfig);695if (PyStatus_Exception(status)) {696 Py_ExitStatusException(status);697}698699/* на этом этапе Python использует кодировку UTF-8 */700701Py_Initialize();702/* ... использовать Python API здесь ... */703Py_Finalize();704```705706### PyConfig707708#### `type PyConfig`709710Структура, содержащая большинство параметров для настройки Python.711712После завершения необходимо использовать функцию [`PyConfig_Clear()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig_Clear) для освобождения памяти конфигурации.713714Методы структуры:715716#### `void PyConfig_InitPythonConfig(PyConfig *config)`717718Инициализировать конфигурацию с помощью [конфигурации Python](https://python-all.ru/3.14/c-api/init_config.html#init-python-config).719720#### `void PyConfig_InitIsolatedConfig(PyConfig *config)`721722Инициализировать конфигурацию с помощью [изолированной конфигурации](https://python-all.ru/3.14/c-api/init_config.html#init-isolated-conf).723724#### `PyStatus PyConfig_SetString(PyConfig *config, wchar_t *const *config_str, const wchar_t *str)`725726Копировать широкую строку *str* в `*config_str`.727728[Предварительно инициализировать Python](https://python-all.ru/3.14/c-api/init_config.html#c-preinit) при необходимости.729730#### `PyStatus PyConfig_SetBytesString(PyConfig *config, wchar_t *const *config_str, const char *str)`731732Декодировать *str* с помощью [`Py_DecodeLocale()`](https://python-all.ru/3.14/c-api/sys.html#c.Py_DecodeLocale) и записать результат в `*config_str`.733734[Предварительно инициализировать Python](https://python-all.ru/3.14/c-api/init_config.html#c-preinit) при необходимости.735736#### `PyStatus PyConfig_SetArgv(PyConfig *config, int argc, wchar_t *const *argv)`737738Установить аргументы командной строки (поле [`argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.argv) структуры *config*) из списка широких строк *argv*.739740[Предварительно инициализировать Python](https://python-all.ru/3.14/c-api/init_config.html#c-preinit) при необходимости.741742#### `PyStatus PyConfig_SetBytesArgv(PyConfig *config, int argc, char *const *argv)`743744Установить аргументы командной строки (поле [`argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.argv) структуры *config*) из списка байтовых строк *argv*. Декодировать байты с помощью [`Py_DecodeLocale()`](https://python-all.ru/3.14/c-api/sys.html#c.Py_DecodeLocale).745746[Предварительно инициализировать Python](https://python-all.ru/3.14/c-api/init_config.html#c-preinit) при необходимости.747748#### `PyStatus PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, Py_ssize_t length, wchar_t **items)`749750Задать список широких строк *list* с длиной *length* и элементами *items*.751752[Предварительно инициализировать Python](https://python-all.ru/3.14/c-api/init_config.html#c-preinit) при необходимости.753754#### `PyStatus PyConfig_Read(PyConfig *config)`755756Считывает всю конфигурацию Python.757758Поля, которые уже инициализированы, остаются без изменений.759760Поля для [конфигурации путей](https://python-all.ru/3.14/c-api/init_config.html#init-path-config) больше не вычисляются и не изменяются при вызове этой функции, начиная с Python 3.11.761762Функция [`PyConfig_Read()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig_Read) разбирает аргументы [`PyConfig.argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.argv) только один раз: [`PyConfig.parse_argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.parse_argv) устанавливается в `2` после разбора аргументов. Поскольку аргументы Python удаляются из `PyConfig.argv`, повторный разбор аргументов приведёт к тому, что параметры приложения будут интерпретироваться как параметры Python.763764[Предварительно инициализировать Python](https://python-all.ru/3.14/c-api/init_config.html#c-preinit) при необходимости.765766Изменено в версии 3.10: Аргументы [`PyConfig.argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.argv) теперь анализируются только один раз, [`PyConfig.parse_argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.parse_argv) устанавливается в `2` после анализа аргументов, и аргументы анализируются только если `PyConfig.parse_argv` равно `1`.767768Изменено в версии 3.11: [`PyConfig_Read()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig_Read) больше не вычисляет все пути, и поэтому поля, перечисленные в [Конфигурации путей Python](https://python-all.ru/3.14/c-api/init_config.html#init-path-config), могут больше не обновляться до вызова [`Py_InitializeFromConfig()`](https://python-all.ru/3.14/c-api/interp-lifecycle.html#c.Py_InitializeFromConfig).769770#### `void PyConfig_Clear(PyConfig *config)`771772Освобождает память конфигурации.773774Большинство методов `PyConfig` [предварительно инициализируют Python](https://python-all.ru/3.14/c-api/init_config.html#c-preinit) при необходимости. В этом случае конфигурация предварительной инициализации Python ([`PyPreConfig`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig)) основывается на [`PyConfig`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig). Если настраиваются поля конфигурации, общие с `PyPreConfig`, они должны быть установлены до вызова метода `PyConfig`:775776- [`PyConfig.dev_mode`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.dev_mode)777- [`PyConfig.isolated`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.isolated)778- [`PyConfig.parse_argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.parse_argv)779- [`PyConfig.use_environment`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.use_environment)780781Более того, если используется [`PyConfig_SetArgv()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig_SetArgv) или [`PyConfig_SetBytesArgv()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig_SetBytesArgv), этот метод должен вызываться перед другими методами, так как конфигурация предварительной инициализации зависит от аргументов командной строки (если [`parse_argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.parse_argv) не равно нулю).782783Вызывающий эти методы отвечает за обработку исключений (ошибка или выход) с помощью `PyStatus_Exception()` и `Py_ExitStatusException()`.784785Поля структуры:786787#### `PyWideStringList argv`788789Устанавливает аргументы командной строки [`sys.argv`](https://python-all.ru/3.14/library/sys.html#sys.argv) на основе [`argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.argv). Эти параметры похожи на передаваемые функции `main()` программы, с той разницей, что первый элемент должен указывать на исполняемый скрипт, а не на исполняемый файл, запускающий интерпретатор Python. Если скрипт для запуска отсутствует, первый элемент в `argv` может быть пустой строкой.790791Устанавливает [`parse_argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.parse_argv) в `1` для анализа [`argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.argv) таким же образом, как обычный Python анализирует аргументы командной строки Python, а затем для удаления аргументов Python из `argv`.792793Если [`argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.argv) пуст, добавляется пустая строка, чтобы гарантировать, что [`sys.argv`](https://python-all.ru/3.14/library/sys.html#sys.argv) всегда существует и никогда не пуст.794795По умолчанию: `NULL`.796797См. также член [`orig_argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.orig_argv).798799#### `int safe_path`800801Если равно нулю, `Py_RunMain()` добавляет потенциально небезопасный путь в начало [`sys.path`](https://python-all.ru/3.14/library/sys.html#sys.path) при запуске:802803- Если [`argv[0]`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.argv) равен `L"-m"` (`python -m module`), добавляет текущий рабочий каталог в начало.804- Если выполняется скрипт (`python script.py`), добавляет каталог скрипта в начало. Если это символическая ссылка, разрешает символические ссылки.805- В противном случае (`python -c code` и `python`) добавляет пустую строку в начало, что означает текущий рабочий каталог.806807Устанавливается в `1` опцией командной строки [`-P`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-P) и переменной окружения [`PYTHONSAFEPATH`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONSAFEPATH).808809По умолчанию: `0` в конфигурации Python, `1` в изолированной конфигурации.810811Добавлено в версии 3.12.812813#### `wchar_t *base_exec_prefix`814815[`sys.base_exec_prefix`](https://python-all.ru/3.14/library/sys.html#sys.base_exec_prefix).816817По умолчанию: `NULL`.818819Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.14/c-api/init_config.html#init-path-config).820821См. также [`PyConfig.exec_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.exec_prefix).822823#### `wchar_t *base_executable`824825Базовый исполняемый файл Python: `sys._base_executable`.826827Устанавливается переменной окружения `__PYVENV_LAUNCHER__`.828829Устанавливается из [`PyConfig.executable`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.executable), если `NULL`.830831По умолчанию: `NULL`.832833Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.14/c-api/init_config.html#init-path-config).834835См. также [`PyConfig.executable`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.executable).836837#### `wchar_t *base_prefix`838839[`sys.base_prefix`](https://python-all.ru/3.14/library/sys.html#sys.base_prefix).840841По умолчанию: `NULL`.842843Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.14/c-api/init_config.html#init-path-config).844845См. также [`PyConfig.prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.prefix).846847#### `int buffered_stdio`848849Если равно `0`, а [`configure_c_stdio`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.configure_c_stdio) не равно нулю, отключает буферизацию для потоков C stdout и stderr.850851Устанавливается в `0` опцией командной строки [`-u`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-u) и переменной окружения [`PYTHONUNBUFFERED`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONUNBUFFERED).852853stdin всегда открывается в буферизированном режиме.854855По умолчанию: `1`.856857#### `int bytes_warning`858859Если равно `1`, выдаётся предупреждение при сравнении [`bytes`](https://python-all.ru/3.14/library/stdtypes.html#bytes) или [`bytearray`](https://python-all.ru/3.14/library/stdtypes.html#bytearray) с [`str`](https://python-all.ru/3.14/library/stdtypes.html#str), или при сравнении `bytes` с [`int`](https://python-all.ru/3.14/library/functions.html#int).860861Если больше или равно `2`, в таких случаях возбуждается исключение [`BytesWarning`](https://python-all.ru/3.14/library/exceptions.html#BytesWarning).862863Увеличивается опцией командной строки [`-b`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-b).864865По умолчанию: `0`.866867#### `int warn_default_encoding`868869Если не равно нулю, выдаётся предупреждение [`EncodingWarning`](https://python-all.ru/3.14/library/exceptions.html#EncodingWarning), когда [`io.TextIOWrapper`](https://python-all.ru/3.14/library/io.html#io.TextIOWrapper) использует свою кодировку по умолчанию. Подробнее см. [Opt-in EncodingWarning](https://python-all.ru/3.14/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.14/using/cmdline.html#envvar-PYTHONNODEBUGRANGES) и параметром командной строки [`-X no_debug_ranges`](https://python-all.ru/3.14/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.14/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.14/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.14/c-api/init_config.html#c.PyConfig.buffered_stdio) равно нулю, буферизация потоков stdin, stdout и stderr отключается.905- Если [`interactive`](https://python-all.ru/3.14/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.14/library/devmode.html#devmode).912913Устанавливается в `1` опцией [`-X dev`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONDEVMODE`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONDEVMODE).914915По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.916917#### `int dump_refs`918919Сбрасывать ссылки Python?920921Если не равно нулю, сбрасывать все объекты, которые все еще существуют при завершении.922923Устанавливается в `1` переменной окружения [`PYTHONDUMPREFS`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONDUMPREFS).924925Требуется специальная сборка Python с определённым макросом `Py_TRACE_REFS`: см. [`configure --with-trace-refs option`](https://python-all.ru/3.14/using/configure.html#cmdoption-with-trace-refs).926927По умолчанию: `0`.928929#### `wchar_t *dump_refs_file`930931Имя файла для дампа ссылок Python.932933Устанавливается переменной окружения [`PYTHONDUMPREFSFILE`](https://python-all.ru/3.14/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.14/library/sys.html#sys.exec_prefix).942943По умолчанию: `NULL`.944945Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.14/c-api/init_config.html#init-path-config).946947См. также [`PyConfig.base_exec_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.base_exec_prefix).948949#### `wchar_t *executable`950951Абсолютный путь к исполняемому двоичному файлу интерпретатора Python: [`sys.executable`](https://python-all.ru/3.14/library/sys.html#sys.executable).952953По умолчанию: `NULL`.954955Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.14/c-api/init_config.html#init-path-config).956957См. также [`PyConfig.base_executable`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.base_executable).958959#### `int faulthandler`960961Включить faulthandler?962963Если не равно нулю, вызывается [`faulthandler.enable()`](https://python-all.ru/3.14/library/faulthandler.html#faulthandler.enable) при запуске.964965Устанавливается в `1` с помощью [`-X faulthandler`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONFAULTHANDLER`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONFAULTHANDLER).966967По умолчанию: `-1` в режиме Python, `0` в изолированном режиме.968969#### `wchar_t *filesystem_encoding`970971[Кодировка файловой системы](https://python-all.ru/3.14/glossary.html#term-filesystem-encoding-and-error-handler): [`sys.getfilesystemencoding()`](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyPreConfig.legacy_windows_fs_encoding) параметра [`PyPreConfig`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig) не равно нулю.976977Кодировка по умолчанию на других платформах:978979- `"utf-8"`, если [`PyPreConfig.utf8_mode`](https://python-all.ru/3.14/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.14/glossary.html#term-locale-encoding): результат `nl_langinfo(CODESET)`.983984При запуске Python имя кодировки нормализуется до имени кодека Python. Например, `"ANSI_X3.4-1968"` заменяется на `"ascii"`.985986См. также член [`filesystem_errors`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.filesystem_errors).987988#### `wchar_t *filesystem_errors`989990[Обработчик ошибок файловой системы](https://python-all.ru/3.14/glossary.html#term-filesystem-encoding-and-error-handler): [`sys.getfilesystemencodeerrors()`](https://python-all.ru/3.14/library/sys.html#sys.getfilesystemencodeerrors).991992На Windows: по умолчанию используется `"surrogatepass"` или `"replace"`, если [`legacy_windows_fs_encoding`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig.legacy_windows_fs_encoding) параметра [`PyPreConfig`](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyConfig.filesystem_encoding).10031004#### `int use_frozen_modules`10051006Если не равно нулю, использовать замороженные модули.10071008Устанавливается переменной окружения [`PYTHON_FROZEN_MODULES`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHON_FROZEN_MODULES).10091010По умолчанию: `1` в сборке выпуска, или `0` в [отладочной сборке](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyConfig.use_hash_seed) равен нулю, начальное значение (seed) выбирается случайным образом при запуске Python, а [`hash_seed`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.hash_seed) игнорируется.10191020Устанавливается переменной окружения [`PYTHONHASHSEED`](https://python-all.ru/3.14/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.14/using/cmdline.html#envvar-PYTHONHOME)).10271028Устанавливается переменной окружения [`PYTHONHOME`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONHOME).10291030По умолчанию: `NULL`.10311032Часть входных данных [конфигурации путей Python](https://python-all.ru/3.14/c-api/init_config.html#init-path-config).10331034#### `int import_time`10351036> Если `1`, профилировать время импорта. Если `2`, включать дополнительный вывод, указывающий, когда импортированный модуль уже был загружен.1037>1038> Задаётся опцией [`-X importtime`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONPROFILEIMPORTTIME`](https://python-all.ru/3.14/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.14/library/sys.html#sys.stdin) не выглядит как терминал.10491050Увеличивается опцией командной строки [`-i`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-i). Устанавливается в `1`, если переменная окружения [`PYTHONINSPECT`](https://python-all.ru/3.14/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.14/using/cmdline.html#cmdoption-i).10651066По умолчанию: `0`.10671068#### `int int_max_str_digits`10691070Настраивает [ограничение длины преобразования целого числа в строку](https://python-all.ru/3.14/library/stdtypes.html#int-max-str-digits). Начальное значение `-1` означает, что значение будет взято из командной строки или окружения, либо по умолчанию равно 4300 ([`sys.int_info.default_max_str_digits`](https://python-all.ru/3.14/library/sys.html#sys.int_info.default_max_str_digits)). Значение `0` отключает ограничение. Значения больше нуля, но меньше 640 ([`sys.int_info.str_digits_check_threshold`](https://python-all.ru/3.14/library/sys.html#sys.int_info.str_digits_check_threshold)) не поддерживаются и вызовут ошибку.10711072Настраивается флагом командной строки [`-X int_max_str_digits`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-X) или переменной окружения [`PYTHONINTMAXSTRDIGITS`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONINTMAXSTRDIGITS).10731074По умолчанию: `-1` в режиме Python. 4300 ([`sys.int_info.default_max_str_digits`](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyConfig.cpu_count) не равно `-1`, то оно переопределит возвращаемые значения [`os.cpu_count()`](https://python-all.ru/3.14/library/os.html#os.cpu_count), [`os.process_cpu_count()`](https://python-all.ru/3.14/library/os.html#os.process_cpu_count) и [`multiprocessing.cpu_count()`](https://python-all.ru/3.14/library/multiprocessing.html#multiprocessing.cpu_count).10811082Настраивается флагом командной строки `-X cpu_count=n|default` или переменной окружения [`PYTHON_CPU_COUNT`](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyConfig.safe_path) в `1`: не добавлять потенциально небезопасный путь к [`sys.path`](https://python-all.ru/3.14/library/sys.html#sys.path) при запуске Python, например, текущий каталог, каталог скрипта или пустую строку.1093- Установить [`use_environment`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.use_environment) в `0`: игнорировать переменные окружения `PYTHON`.1094- Установить [`user_site_directory`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.user_site_directory) в `0`: не добавлять каталог пользовательских сайт-пакетов в [`sys.path`](https://python-all.ru/3.14/library/sys.html#sys.path).1095- REPL Python не импортирует [`readline`](https://python-all.ru/3.14/library/readline.html#module-readline) и не включает стандартную конфигурацию readline в интерактивных приглашениях.10961097Устанавливается в `1` параметром командной строки [`-I`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-I).10981099По умолчанию: `0` в режиме Python, `1` в изолированном режиме.11001101См. также [Изолированная конфигурация](https://python-all.ru/3.14/c-api/init_config.html#init-isolated-conf) и [`PyPreConfig.isolated`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig.isolated).11021103#### `int legacy_windows_stdio`11041105Если не ноль, использовать [`io.FileIO`](https://python-all.ru/3.14/library/io.html#io.FileIO) вместо `io._WindowsConsoleIO` для [`sys.stdin`](https://python-all.ru/3.14/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.14/library/sys.html#sys.stdout) и [`sys.stderr`](https://python-all.ru/3.14/library/sys.html#sys.stderr).11061107Устанавливается в `1`, если переменная окружения [`PYTHONLEGACYWINDOWSSTDIO`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONLEGACYWINDOWSSTDIO) установлена в непустую строку.11081109Доступно только в Windows. Макрос `#ifdef MS_WINDOWS` можно использовать для кода, зависящего от Windows.11101111По умолчанию: `0`.11121113См. также [**PEP 528**](https://python-all.ru/3.14/c-api/init_config.html) (Изменение кодировки консоли Windows на UTF-8).11141115#### `int malloc_stats`11161117Если не ноль, вывести статистику по [аллокатору памяти Python pymalloc](https://python-all.ru/3.14/c-api/memory.html#pymalloc) при завершении.11181119Устанавливается в `1` переменной окружения [`PYTHONMALLOCSTATS`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONMALLOCSTATS).11201121Параметр игнорируется, если Python [`configured using the --without-pymalloc option`](https://python-all.ru/3.14/using/configure.html#cmdoption-without-pymalloc).11221123По умолчанию: `0`.11241125#### `wchar_t *platlibdir`11261127Имя каталога библиотек платформы: [`sys.platlibdir`](https://python-all.ru/3.14/library/sys.html#sys.platlibdir).11281129Устанавливается переменной окружения [`PYTHONPLATLIBDIR`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONPLATLIBDIR).11301131По умолчанию: значение макроса `PLATLIBDIR`, которое задаётся [`configure --with-platlibdir option`](https://python-all.ru/3.14/using/configure.html#cmdoption-with-platlibdir) (по умолчанию: `"lib"` или `"DLLs"` в Windows).11321133Часть входных данных [конфигурации путей Python](https://python-all.ru/3.14/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.14/library/sys.html#sys.path)) в виде строки, разделённой `DELIM` ([`os.pathsep`](https://python-all.ru/3.14/library/os.html#os.pathsep)).11421143Устанавливается переменной окружения [`PYTHONPATH`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONPATH).11441145По умолчанию: `NULL`.11461147Часть входных данных [конфигурации путей Python](https://python-all.ru/3.14/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.14/library/sys.html#sys.path).11541155Если [`module_search_paths_set`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.module_search_paths_set) равно `0`, [`Py_InitializeFromConfig()`](https://python-all.ru/3.14/c-api/interp-lifecycle.html#c.Py_InitializeFromConfig) заменит [`module_search_paths`](https://python-all.ru/3.14/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.14/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.14/using/cmdline.html#cmdoption-O). Устанавливается в значение переменной окружения [`PYTHONOPTIMIZE`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONOPTIMIZE).11701171По умолчанию: `0`.11721173#### `PyWideStringList orig_argv`11741175Список исходных аргументов командной строки, переданных исполняемому файлу Python: [`sys.orig_argv`](https://python-all.ru/3.14/library/sys.html#sys.orig_argv).11761177Если список [`orig_argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.orig_argv) пуст, а [`argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.argv) не является списком, содержащим только пустую строку, то [`PyConfig_Read()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig_Read) копирует `argv` в `orig_argv` перед изменением `argv` (если [`parse_argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.parse_argv) не равно нулю).11781179См. также элемент [`argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.argv) и функцию [`Py_GetArgcArgv()`](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyConfig.argv) так же, как обычный Python разбирает [аргументы командной строки](https://python-all.ru/3.14/using/cmdline.html#using-on-cmdline), и удалять аргументы Python из `argv`.11901191Функция [`PyConfig_Read()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig_Read) разбирает аргументы [`PyConfig.argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.argv) только один раз: [`PyConfig.parse_argv`](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyConfig.argv) теперь разбираются только если [`PyConfig.parse_argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.parse_argv) равно `1`.11961197#### `int parser_debug`11981199Режим отладки синтаксического анализатора. Если больше `0`, включает вывод отладки анализатора (только для экспертов, зависит от параметров компиляции).12001201Увеличивается опцией командной строки [`-d`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-d). Устанавливается в значение переменной окружения [`PYTHONDEBUG`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONDEBUG).12021203Требуется [отладочная сборка Python](https://python-all.ru/3.14/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.14/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.14/library/sys.html#sys.prefix).12201221По умолчанию: `NULL`.12221223Часть выходных данных [конфигурации путей Python](https://python-all.ru/3.14/c-api/init_config.html#init-path-config).12241225См. также [`PyConfig.base_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.base_prefix).12261227#### `wchar_t *program_name`12281229Имя программы, используемое для инициализации [`executable`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.executable) и в ранних сообщениях об ошибках во время инициализации Python.12301231- На macOS используется переменная окружения [`PYTHONEXECUTABLE`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONEXECUTABLE), если она установлена.1232- Если определён макрос `WITH_NEXT_FRAMEWORK`, используется переменная окружения `__PYVENV_LAUNCHER__`, если она установлена.1233- Используется `argv[0]` из [`argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.argv), если она доступна и непустая.1234- В противном случае используется `L"python"` на Windows или `L"python3"` на других платформах.12351236По умолчанию: `NULL`.12371238Часть входных данных [конфигурации путей Python](https://python-all.ru/3.14/c-api/init_config.html#init-path-config).12391240#### `wchar_t *pycache_prefix`12411242Каталог, в который записываются кэшированные файлы `.pyc`: [`sys.pycache_prefix`](https://python-all.ru/3.14/library/sys.html#sys.pycache_prefix).12431244Устанавливается опцией командной строки [`-X pycache_prefix=PATH`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONPYCACHEPREFIX`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONPYCACHEPREFIX). Опция командной строки имеет приоритет.12451246Если `NULL`, [`sys.pycache_prefix`](https://python-all.ru/3.14/library/sys.html#sys.pycache_prefix) устанавливается в `None`.12471248По умолчанию: `NULL`.12491250#### `int quiet`12511252Тихий режим. Если больше `0`, не отображать авторские права и версию при запуске Python в интерактивном режиме.12531254Увеличивается опцией командной строки [`-q`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-q).12551256По умолчанию: `0`.12571258#### `wchar_t *run_command`12591260Значение параметра командной строки [`-c`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-c).12611262Используется [`Py_RunMain()`](https://python-all.ru/3.14/c-api/interp-lifecycle.html#c.Py_RunMain).12631264По умолчанию: `NULL`.12651266#### `wchar_t *run_filename`12671268Имя файла, переданное в командной строке: последний аргумент командной строки без [`-c`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-c) или [`-m`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-m). Используется функцией [`Py_RunMain()`](https://python-all.ru/3.14/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.14/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.14/using/cmdline.html#cmdoption-m).12791280Используется [`Py_RunMain()`](https://python-all.ru/3.14/c-api/interp-lifecycle.html#c.Py_RunMain).12811282По умолчанию: `NULL`.12831284#### `wchar_t *run_presite`12851286`package.module` путь к модулю, который должен быть импортирован до `site.py` запуска12871288Устанавливается параметром командной строки [`-X presite=package.module`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHON_PRESITE`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHON_PRESITE). Параметр командной строки имеет приоритет.12891290Требуется [отладочная сборка Python](https://python-all.ru/3.14/using/configure.html#debug-build) (макрос `Py_DEBUG` должен быть определён).12911292По умолчанию: `NULL`.12931294#### `int show_ref_count`12951296Показывать общее количество ссылок при выходе (исключая [бессмертные](https://python-all.ru/3.14/glossary.html#term-immortal) объекты)?12971298Устанавливается в `1` параметром командной строки [`-X showrefcount`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-X).12991300Требуется [отладочная сборка Python](https://python-all.ru/3.14/using/configure.html#debug-build) (макрос `Py_REF_DEBUG` должен быть определён).13011302По умолчанию: `0`.13031304#### `int site_import`13051306Импортировать модуль [`site`](https://python-all.ru/3.14/library/site.html#module-site) при запуске?13071308Если равно нулю, импорт модуля site и зависящие от site манипуляции с [`sys.path`](https://python-all.ru/3.14/library/sys.html#sys.path) отключаются.13091310Также отключает эти манипуляции, если модуль [`site`](https://python-all.ru/3.14/library/site.html#module-site) импортирован явно (вызовите [`site.main()`](https://python-all.ru/3.14/library/site.html#site.main), чтобы включить их).13111312Устанавливается в `0` параметром командной строки [`-S`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-S).13131314[`sys.flags.no_site`](https://python-all.ru/3.14/library/sys.html#sys.flags) устанавливается в инвертированное значение [`site_import`](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyConfig.run_filename).13211322Это позволяет использовать не-Unix формы `#!cmd`. Предназначено только для DOS-специфичного хака.13231324Устанавливается в `1` параметром командной строки [`-x`](https://python-all.ru/3.14/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.14/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.14/library/sys.html#sys.stdout) и [`sys.stderr`](https://python-all.ru/3.14/library/sys.html#sys.stderr) (но `sys.stderr` всегда использует обработчик ошибок `"backslashreplace"`).13331334Использовать переменную окружения [`PYTHONIOENCODING`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONIOENCODING), если она не пуста.13351336Кодировка по умолчанию:13371338- `"UTF-8"`, если [`PyPreConfig.utf8_mode`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig.utf8_mode) не равно нулю.1339- В противном случае используется [кодировка локали](https://python-all.ru/3.14/glossary.html#term-locale-encoding).13401341Обработчик ошибок по умолчанию:13421343- В Windows: используется `"surrogateescape"`.1344- `"surrogateescape"`, если [`PyPreConfig.utf8_mode`](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyConfig.legacy_windows_stdio).13481349#### `int tracemalloc`13501351Включить tracemalloc?13521353Если не равно нулю, вызывается [`tracemalloc.start()`](https://python-all.ru/3.14/library/tracemalloc.html#tracemalloc.start) при запуске.13541355Устанавливается параметром командной строки [`-X tracemalloc=N`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONTRACEMALLOC`](https://python-all.ru/3.14/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.14/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHONPERFSUPPORT`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONPERFSUPPORT).13681369Устанавливается в `2` параметром командной строки [`-X perf_jit`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-X) и переменной окружения [`PYTHON_PERF_JIT_SUPPORT`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHON_PERF_JIT_SUPPORT).13701371По умолчанию: `-1`.13721373> **См. также**1374>1375> См. [поддержку Python для профилировщика Linux perf](https://python-all.ru/3.14/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.14/using/cmdline.html#using-on-envvars)?13901391Если равно нулю, игнорируются [переменные окружения](https://python-all.ru/3.14/using/cmdline.html#using-on-envvars).13921393Устанавливается в `0` переменной окружения [`-E`](https://python-all.ru/3.14/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.14/library/sys.html#sys.path) добавляется каталог пользовательского site.14101411Устанавливается в `0` с помощью опций командной строки [`-s`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-s) и [`-I`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-I).14121413Устанавливается в `0` переменной окружения [`PYTHONNOUSERSITE`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONNOUSERSITE).14141415По умолчанию: `1` в режиме Python, `0` в изолированном режиме.14161417#### `int verbose`14181419Подробный режим. Если больше `0`, выводится сообщение каждый раз, когда модуль импортируется, с указанием места (имя файла или встроенный модуль), откуда он загружается.14201421Если больше или равно `2`, выводится сообщение для каждого файла, который проверяется при поиске модуля. Также предоставляет информацию об очистке модулей при завершении.14221423Увеличивается опцией командной строки [`-v`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-v).14241425Устанавливается значением переменной окружения [`PYTHONVERBOSE`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONVERBOSE).14261427По умолчанию: `0`.14281429#### `PyWideStringList warnoptions`14301431Опции модуля [`warnings`](https://python-all.ru/3.14/library/warnings.html#module-warnings) для построения фильтров предупреждений, от низшего к высшему приоритету: [`sys.warnoptions`](https://python-all.ru/3.14/library/sys.html#sys.warnoptions).14321433Модуль [`warnings`](https://python-all.ru/3.14/library/warnings.html#module-warnings) добавляет [`sys.warnoptions`](https://python-all.ru/3.14/library/sys.html#sys.warnoptions) в обратном порядке: последний элемент [`PyConfig.warnoptions`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.warnoptions) становится первым элементом `warnings.filters`, который проверяется первым (наивысший приоритет).14341435Опция командной строки [`-W`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-W) добавляет своё значение в [`warnoptions`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.warnoptions); её можно использовать несколько раз.14361437Переменная окружения [`PYTHONWARNINGS`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONWARNINGS) также может использоваться для добавления опций предупреждений. Можно указать несколько опций, разделённых запятыми (`,`).14381439По умолчанию: пустой список.14401441#### `int write_bytecode`14421443Если равно `0`, Python не будет пытаться записывать файлы `.pyc` при импорте исходных модулей.14441445Устанавливается в `0` опцией командной строки [`-B`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-B) и переменной окружения [`PYTHONDONTWRITEBYTECODE`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONDONTWRITEBYTECODE).14461447[`sys.dont_write_bytecode`](https://python-all.ru/3.14/library/sys.html#sys.dont_write_bytecode) инициализируется инвертированным значением [`write_bytecode`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.write_bytecode).14481449По умолчанию: `1`.14501451#### `PyWideStringList xoptions`14521453Значения опций командной строки [`-X`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-X): [`sys._xoptions`](https://python-all.ru/3.14/library/sys.html#sys._xoptions).14541455По умолчанию: пустой список.14561457#### `int _pystats`14581459Если не равно нулю, записывает статистику производительности при завершении Python.14601461Требуется специальная сборка с макросом `Py_STATS`: см. [`--enable-pystats`](https://python-all.ru/3.14/using/configure.html#cmdoption-enable-pystats).14621463По умолчанию: `0`.14641465Если [`parse_argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.parse_argv) не равно нулю, аргументы [`argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.argv) разбираются так же, как обычный Python разбирает [аргументы командной строки](https://python-all.ru/3.14/using/cmdline.html#using-on-cmdline), а аргументы Python удаляются из `argv`.14661467Параметры [`xoptions`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.xoptions) разбираются для установки других опций: см. опцию командной строки [`-X`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-X).14681469Изменено в версии 3.9: Поле `show_alloc_count` было удалено.14701471### Инициализация с PyConfig14721473Инициализация интерпретатора из заполненной структуры конфигурации выполняется вызовом [`Py_InitializeFromConfig()`](https://python-all.ru/3.14/c-api/interp-lifecycle.html#c.Py_InitializeFromConfig).14741475Вызывающий код отвечает за обработку исключений (ошибка или выход) с помощью [`PyStatus_Exception()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyStatus_Exception) и [`Py_ExitStatusException()`](https://python-all.ru/3.14/c-api/init_config.html#c.Py_ExitStatusException).14761477Если используются [`PyImport_FrozenModules()`](https://python-all.ru/3.14/c-api/import.html#c.PyImport_FrozenModules), [`PyImport_AppendInittab()`](https://python-all.ru/3.14/c-api/import.html#c.PyImport_AppendInittab) или [`PyImport_ExtendInittab()`](https://python-all.ru/3.14/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_GetObject("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.14/c-api/init_config.html#c.PyPreConfig_InitIsolatedConfig) и [`PyConfig_InitIsolatedConfig()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig_InitIsolatedConfig) создают конфигурацию для изоляции Python от системы. Например, для встраивания Python в приложение.15701571Эта конфигурация игнорирует глобальные переменные конфигурации, переменные окружения, аргументы командной строки ([`PyConfig.argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.argv) не разбирается) и каталог пользовательских сайтов. Стандартные потоки C (например: `stdout`) и локаль LC\_CTYPE остаются без изменений. Обработчики сигналов не устанавливаются.15721573Конфигурационные файлы по-прежнему используются с этой конфигурацией для определения путей, которые не указаны. Убедитесь, что [`PyConfig.home`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.home) указан, чтобы избежать вычисления конфигурации путей по умолчанию.15741575### Конфигурация Python15761577Функции [`PyPreConfig_InitPythonConfig()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyPreConfig_InitPythonConfig) и [`PyConfig_InitPythonConfig()`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig_InitPythonConfig) создают конфигурацию для сборки настраиваемого Python, который ведёт себя как обычный Python.15781579Переменные окружения и аргументы командной строки используются для настройки Python, тогда как глобальные переменные конфигурации игнорируются.15801581Эта функция включает принудительное использование локали C ([**PEP 538**](https://python-all.ru/3.14/c-api/init_config.html)) и [Режим Python UTF-8](https://python-all.ru/3.14/library/os.html#utf8-mode) ([**PEP 540**](https://python-all.ru/3.14/c-api/init_config.html)) в зависимости от локали LC\_CTYPE, переменных окружения [`PYTHONUTF8`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONUTF8) и [`PYTHONCOERCECLOCALE`](https://python-all.ru/3.14/using/cmdline.html#envvar-PYTHONCOERCECLOCALE).15821583### Конфигурация путей Python15841585[`PyConfig`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig) содержит несколько полей для конфигурации путей:15861587- Входные данные конфигурации путей:15881589 - [`PyConfig.home`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.home)1590 - [`PyConfig.platlibdir`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.platlibdir)1591 - [`PyConfig.pathconfig_warnings`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.pathconfig_warnings)1592 - [`PyConfig.program_name`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.program_name)1593 - [`PyConfig.pythonpath_env`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.pythonpath_env)1594 - текущий рабочий каталог: для получения абсолютных путей1595 - переменная окружения `PATH` для получения полного пути программы (из [`PyConfig.program_name`](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyConfig.base_exec_prefix)1601 - [`PyConfig.base_executable`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.base_executable)1602 - [`PyConfig.base_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.base_prefix)1603 - [`PyConfig.exec_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.exec_prefix)1604 - [`PyConfig.executable`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.executable)1605 - [`PyConfig.module_search_paths_set`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.module_search_paths_set), [`PyConfig.module_search_paths`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.module_search_paths)1606 - [`PyConfig.prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.prefix)16071608Если хотя бы одно «выходное поле» не установлено, Python вычисляет конфигурацию путей, чтобы заполнить неустановленные поля. Если [`module_search_paths_set`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.module_search_paths_set) равно `0`, [`module_search_paths`](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyConfig.pathconfig_warnings) в `0`, чтобы подавить предупреждения при вычислении конфигурации путей (только Unix, Windows не регистрирует предупреждения).16131614Если поля [`base_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.base_prefix) или [`base_exec_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.base_exec_prefix) не заданы, они наследуют свои значения от [`prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.prefix) и [`exec_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.exec_prefix) соответственно.16151616[`Py_RunMain()`](https://python-all.ru/3.14/c-api/interp-lifecycle.html#c.Py_RunMain) и [`Py_Main()`](https://python-all.ru/3.14/c-api/interp-lifecycle.html#c.Py_Main) изменяют [`sys.path`](https://python-all.ru/3.14/library/sys.html#sys.path):16171618- Если [`run_filename`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.run_filename) задано и является каталогом, содержащим скрипт `__main__.py`, добавьте `run_filename` в начало [`sys.path`](https://python-all.ru/3.14/library/sys.html#sys.path).1619- Если [`isolated`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.isolated) равно нулю:16201621 - Если [`run_module`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.run_module) задан, добавьте текущий каталог в начало [`sys.path`](https://python-all.ru/3.14/library/sys.html#sys.path). Ничего не делайте, если текущий каталог не может быть прочитан.1622 - Если [`run_filename`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.run_filename) задан, добавьте каталог файла в начало [`sys.path`](https://python-all.ru/3.14/library/sys.html#sys.path).1623 - В противном случае пустая строка добавляется в начало [`sys.path`](https://python-all.ru/3.14/library/sys.html#sys.path).16241625Если [`site_import`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.site_import) не равно нулю, то [`sys.path`](https://python-all.ru/3.14/library/sys.html#sys.path) может быть изменён модулем [`site`](https://python-all.ru/3.14/library/site.html#module-site). Если [`user_site_directory`](https://python-all.ru/3.14/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.14/c-api/init_config.html#c.PyConfig.isolated) в `1`.1636- Устанавливает [`use_environment`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.use_environment) в `0`.1637- Устанавливает [`site_import`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.site_import) в `0`.1638- Устанавливает [`safe_path`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.safe_path) в `1`.16391640Если [`home`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.home) не задан и файл `pyvenv.cfg` присутствует в том же каталоге, что и [`executable`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.executable), или в его родительском каталоге, то [`prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.prefix) и [`exec_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.exec_prefix) устанавливаются в этот каталог. В этом случае [`base_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.base_prefix) и [`base_exec_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.base_exec_prefix) по-прежнему сохраняют свои значения, указывая на базовую установку. Дополнительную информацию см. в разделе [Виртуальные окружения](https://python-all.ru/3.14/library/sys_path_init.html#sys-path-init-virtual-environments).16411642Переменная окружения `__PYVENV_LAUNCHER__` используется для установки [`PyConfig.base_executable`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.base_executable).16431644Изменено в версии 3.14: [`prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.prefix) и [`exec_prefix`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.exec_prefix) теперь устанавливаются в каталог `pyvenv.cfg`. Ранее это выполнялось модулем [`site`](https://python-all.ru/3.14/library/site.html#module-site), поэтому на них влияла [`-S`](https://python-all.ru/3.14/using/cmdline.html#cmdoption-S).16451646## Py\_GetArgcArgv()16471648#### `void Py_GetArgcArgv(int *argc, wchar_t ***argv)`16491650Возвращает исходные аргументы командной строки до того, как Python их изменил.16511652См. также элемент [`PyConfig.orig_argv`](https://python-all.ru/3.14/c-api/init_config.html#c.PyConfig.orig_argv).16531654## Отложенное выполнение главного модуля16551656В некоторых случаях встраивания может потребоваться разделить инициализацию интерпретатора и выполнение главного модуля.16571658Это разделение можно выполнить, установив `PyConfig.run_command` в пустую строку во время инициализации (чтобы интерпретатор не переходил в интерактивную подсказку), а затем выполнить нужный код главного модуля с использованием `__main__.__dict__` в качестве глобального пространства имён.1659