Конфигурация инициализации Python
C API PyInitConfig
Добавлено в версии 3.14.
Python можно инициализировать с помощью Py_InitializeFromInitConfig().
Функцию Py_RunMain() можно использовать для создания пользовательской программы на Python.
См. также Инициализация, завершение работы и потоки.
См. также
PEP 741 «C API конфигурации Python».
Пример
Пример пользовательской программы на Python, которая всегда работает с включённым режимом разработки Python; в случае ошибки возвращает -1:
int init_python(void)
{
PyInitConfig *config = PyInitConfig_Create();
if (config == NULL) {
printf("PYTHON INIT ERROR: memory allocation failed\n");
return -1;
}
// Enable the Python Development Mode
if (PyInitConfig_SetInt(config, "dev_mode", 1) < 0) {
goto error;
}
// Initialize Python with the configuration
if (Py_InitializeFromInitConfig(config) < 0) {
goto error;
}
PyInitConfig_Free(config);
return 0;
error:
{
// Display the error message.
//
// This uncommon braces style is used, because you cannot make
// goto targets point to variable declarations.
const char *err_msg;
(void)PyInitConfig_GetError(config, &err_msg);
printf("PYTHON INIT ERROR: %s\n", err_msg);
PyInitConfig_Free(config);
return -1;
}
}
Создание конфигурации
-
struct PyInitConfig -
Непрозрачная структура для настройки инициализации Python.
-
PyInitConfig *PyInitConfig_Create(void) -
Создаёт новую конфигурацию инициализации со значениями по умолчанию из изолированной конфигурации.
Её необходимо освободить с помощью
PyInitConfig_Free().При сбое выделения памяти возвращает
NULL.
-
void PyInitConfig_Free(PyInitConfig *config) -
Освобождает память, занятую конфигурацией инициализации config.
Если config равен
NULL, операция не выполняется.
Обработка ошибок
-
int PyInitConfig_GetError(PyInitConfig *config, const char **err_msg) -
Получает сообщение об ошибке config.
- Устанавливает *err_msg и возвращает
1, если задана ошибка. - В противном случае устанавливает *err_msg в
NULLи возвращает0.
Сообщение об ошибке представляет собой строку в кодировке UTF-8.
Если для config задан код завершения, он форматируется как сообщение об ошибке.
Сообщение об ошибке остаётся действительным до вызова другой функции
PyInitConfigс параметром config. Вызывающей стороне не нужно освобождать память сообщения об ошибке. - Устанавливает *err_msg и возвращает
-
int PyInitConfig_GetExitCode(PyInitConfig *config, int *exitcode) -
Получает код завершения config.
- Устанавливает *exitcode и возвращает
1, если для config задан код завершения. - Возвращает
0, если для config не задан код завершения.
Только функция
Py_InitializeFromInitConfig()может задать код завершения, если параметрparse_argvненулевой.Код завершения может быть задан, если не удалось обработать командную строку (код завершения
2) или параметр командной строки запрашивает отображение справки по командной строке (код завершения0). - Устанавливает *exitcode и возвращает
Получение параметров
Параметр name для параметра конфигурации должен быть ненулевой строкой с завершающим нулём в кодировке UTF-8. См. Параметры конфигурации.
-
int PyInitConfig_HasOption(PyInitConfig *config, const char *name) -
Проверяет, содержит ли конфигурация параметр с именем name.
Возвращает
1, если параметр существует, и0в противном случае.
-
int PyInitConfig_GetInt(PyInitConfig *config, const char *name, int64_t *value) -
Получает целочисленный параметр конфигурации.
- Устанавливает *value и при успехе возвращает
0. - При ошибке устанавливает ошибку в config и возвращает
-1.
- Устанавливает *value и при успехе возвращает
-
int PyInitConfig_GetStr(PyInitConfig *config, const char *name, char **value) -
Получает строковый параметр конфигурации в виде строки с завершающим нулём в кодировке UTF-8.
- Устанавливает *value и при успехе возвращает
0. - При ошибке устанавливает ошибку в config и возвращает
-1.
Значению *value может быть присвоено
NULL, если параметр является необязательной строкой и не задан.При успехе строку необходимо освободить с помощью
free(value), если она не равнаNULL. - Устанавливает *value и при успехе возвращает
-
int PyInitConfig_GetStrList(PyInitConfig *config, const char *name, size_t *length, char ***items) -
Получает список строковых параметров конфигурации в виде массива строк с завершающим нулём в кодировке UTF-8.
- Устанавливает *length и *value и при успехе возвращает
0. - При ошибке устанавливает ошибку в config и возвращает
-1.
При успехе список строк необходимо освободить с помощью
PyInitConfig_FreeStrList(length, items). - Устанавливает *length и *value и при успехе возвращает
-
void PyInitConfig_FreeStrList(size_t length, char **items) -
Освобождает память списка строк, созданного с помощью
PyInitConfig_GetStrList().
Установка параметров
Параметр name для параметра конфигурации должен быть ненулевой строкой с завершающим нулём в кодировке UTF-8. См. Параметры конфигурации.
Некоторые параметры конфигурации влияют на другие параметры. Эта логика реализована только при вызове Py_InitializeFromInitConfig(), но не в приведённых ниже функциях «Set». Например, установка dev_mode в значение 1 не устанавливает faulthandler в значение 1.
-
int PyInitConfig_SetInt(PyInitConfig *config, const char *name, int64_t value) -
Устанавливает целочисленный параметр конфигурации.
- При успехе возвращает
0. - При ошибке устанавливает ошибку в config и возвращает
-1.
- При успехе возвращает
-
int PyInitConfig_SetStr(PyInitConfig *config, const char *name, const char *value) -
Устанавливает строковый параметр конфигурации из строки с завершающим нулём в кодировке UTF-8. Строка копируется.
- При успехе возвращает
0. - При ошибке устанавливает ошибку в config и возвращает
-1.
- При успехе возвращает
-
int PyInitConfig_SetStrList(PyInitConfig *config, const char *name, size_t length, char *const *items) -
Устанавливает список строковых параметров конфигурации из массива строк с завершающим нулём в кодировке UTF-8. Список строк копируется.
- При успехе возвращает
0. - При ошибке устанавливает ошибку в config и возвращает
-1.
- При успехе возвращает
Модуль
-
int PyInitConfig_AddModule(PyInitConfig *config, const char *name, PyObject *(*initfunc)(void)) -
Добавляет встроенный модуль расширения в таблицу встроенных модулей.
Новый модуль можно импортировать по имени name; функция initfunc будет использоваться как функция инициализации, вызываемая при первой попытке импорта.
- При успехе возвращает
0. - При ошибке устанавливает ошибку в config и возвращает
-1.
Если Python инициализируется несколько раз,
PyInitConfig_AddModule()необходимо вызывать при каждой инициализации Python.Аналогично функции
PyImport_AppendInittab(). - При успехе возвращает
Инициализация Python
-
int Py_InitializeFromInitConfig(PyInitConfig *config) -
Инициализирует Python на основе конфигурации инициализации.
- При успехе возвращает
0. - При ошибке устанавливает ошибку в config и возвращает
-1. - Если Python требуется завершить работу, устанавливает код завершения в config и возвращает
-1.
См.
PyInitConfig_GetExitcode()для случая с кодом завершения. - При успехе возвращает
Параметры конфигурации
Параметр | Поле PyConfig/PyPreConfig | Тип | Доступность |
|---|---|---|---|
|
| Только для чтения | |
|
| Общедоступный | |
|
| Общедоступный | |
|
| Общедоступный | |
|
| Общедоступный | |
|
| Только для чтения | |
|
| Общедоступный | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Общедоступный | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Общедоступный | |
|
| Общедоступный | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Общедоступный | |
|
| Только для чтения | |
|
| Общедоступный | |
|
| Общедоступный | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Общедоступный | |
|
| Общедоступный | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Общедоступный | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Общедоступный | |
|
| Общедоступный | |
|
| Только для чтения | |
|
| Общедоступный | |
|
| Общедоступный | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Общедоступный | |
|
| Только для чтения | |
|
| Общедоступный | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Только для чтения | |
|
| Общедоступный | |
|
| Только для чтения | |
|
| Общедоступный | |
|
| Общедоступный | |
|
| Общедоступный | |
|
| Только для чтения |
Доступность:
- Общедоступный: можно получить с помощью
PyConfig_Get()и задать с помощьюPyConfig_Set(). - Только для чтения: можно получить с помощью
PyConfig_Get(), но нельзя задать с помощьюPyConfig_Set().
API конфигурации Python во время выполнения
Во время выполнения можно получать и задавать параметры конфигурации с помощью функций PyConfig_Get() и PyConfig_Set().
Параметр name параметра конфигурации должен быть ненулевой строкой UTF-8 с завершающим нулевым байтом. См. раздел Параметры конфигурации.
Некоторые параметры считываются из атрибутов sys. Например, параметр "argv" считывается из sys.argv.
-
PyObject *PyConfig_Get(const char *name) -
Получить текущее значение параметра конфигурации во время выполнения в виде объекта Python.
- В случае успеха возвращает новую ссылку.
- В случае ошибки устанавливает исключение и возвращает
NULL.
Тип объекта зависит от параметра конфигурации. Это может быть:
boolintstrlist[str]dict[str, str]
У вызывающего потока должно быть присоединённое состояние потока. Функцию нельзя вызывать до инициализации Python или после его завершения.
Добавлено в версии 3.14.
-
int PyConfig_GetInt(const char *name, int *value) -
Аналогично
PyConfig_Get(), но значение возвращается в виде C int.- В случае успеха возвращает
0. - В случае ошибки устанавливает исключение и возвращает
-1.
Добавлено в версии 3.14.
- В случае успеха возвращает
-
PyObject *PyConfig_Names(void) -
Получить все имена параметров конфигурации в виде
frozenset.- В случае успеха возвращает новую ссылку.
- В случае ошибки устанавливает исключение и возвращает
NULL.
У вызывающего потока должно быть присоединённое состояние потока. Функцию нельзя вызывать до инициализации Python или после его завершения.
Добавлено в версии 3.14.
-
int PyConfig_Set(const char *name, PyObject *value) -
Задать текущее значение параметра конфигурации во время выполнения.
- Вызывает
ValueError, если параметра с именем name не существует. - Вызывает
ValueError, если value имеет недопустимое значение. - Вызывает
ValueError, если параметр доступен только для чтения (его нельзя задать). - Вызывает
TypeError, если value имеет неверный тип.
У вызывающего потока должно быть присоединённое состояние потока. Функцию нельзя вызывать до инициализации Python или после его завершения.
Вызывает событие аудита
cpython.PyConfig_Setс аргументамиname,value.Добавлено в версии 3.14.
Изменено в версии 3.14.7: Теперь функция заменяет
sys.flags(создаёт новый объект), а не изменяетsys.flagsна месте. - Вызывает
Интерфейс PyConfig для C
Добавлено в версии 3.8.
Python можно инициализировать с помощью Py_InitializeFromConfig() и структуры PyConfig. Предварительную инициализацию можно выполнить с помощью Py_PreInitialize() и структуры PyPreConfig.
Существует два типа конфигурации:
- Конфигурацию Python можно использовать для создания настроенной версии Python, которая ведёт себя как обычный Python. Например, для настройки Python используются переменные окружения и аргументы командной строки.
- Изолированную конфигурацию можно использовать для встраивания Python в приложение. Она изолирует Python от системы. Например, переменные окружения игнорируются, локаль LC_CTYPE остаётся неизменной, а обработчики сигналов не регистрируются.
Функцию Py_RunMain() можно использовать для написания собственной программы на Python.
См. также раздел Инициализация, завершение работы и потоки.
См. также
PEP 587 «Конфигурация инициализации Python».
Пример
Пример настроенного Python, всегда работающего в изолированном режиме:
int main(int argc, char **argv)
{
PyStatus status;
PyConfig config;
PyConfig_InitPythonConfig(&config);
config.isolated = 1;
/* Decode command line arguments.
Implicitly preinitialize Python (in isolated mode). */
status = PyConfig_SetBytesArgv(&config, argc, argv);
if (PyStatus_Exception(status)) {
goto exception;
}
status = Py_InitializeFromConfig(&config);
if (PyStatus_Exception(status)) {
goto exception;
}
PyConfig_Clear(&config);
return Py_RunMain();
exception:
PyConfig_Clear(&config);
if (PyStatus_IsExit(status)) {
return status.exitcode;
}
/* Display the error message and exit the process with
non-zero exit code */
Py_ExitStatusException(status);
}
PyWideStringList
-
type PyWideStringList -
Список строк
wchar_t*.Если length не равен нулю, items не должен быть
NULL, и все строки не должны бытьNULL.Методы:
-
PyStatus PyWideStringList_Append(PyWideStringList *list, const wchar_t *item) -
Добавить item в list.
Для вызова этой функции Python должен быть предварительно инициализирован.
-
PyStatus PyWideStringList_Insert(PyWideStringList *list, Py_ssize_t index, const wchar_t *item) -
Вставить item в list по индексу index.
Если index больше или равен длине list, добавить item в конец list.
index должен быть больше или равен
0.Для вызова этой функции Python должен быть предварительно инициализирован.
Поля структуры:
-
Py_ssize_t length -
Длина списка.
-
wchar_t **items -
Элементы списка.
-
PyStatus
-
type PyStatus -
Структура для хранения состояния функции инициализации: успех, ошибка или выход.
В случае ошибки в ней может храниться имя C-функции, вызвавшей ошибку.
Поля структуры:
-
int exitcode -
Код выхода. Аргумент, передаваемый в
exit().
-
const char *err_msg -
Сообщение об ошибке.
-
const char *func -
Имя функции, вызвавшей ошибку; может быть
NULL.
Функции для создания состояния:
-
PyStatus PyStatus_Ok(void) -
Успех.
-
PyStatus PyStatus_Error(const char *err_msg) -
Ошибка инициализации с сообщением.
err_msg не должен быть
NULL.
-
PyStatus PyStatus_NoMemory(void) -
Сбой выделения памяти (недостаточно памяти).
-
PyStatus PyStatus_Exit(int exitcode) -
Завершить работу Python с указанным кодом выхода.
Функции для обработки состояния:
-
int PyStatus_Exception(PyStatus status) -
Является ли состояние ошибкой или выходом? Если да, исключение необходимо обработать, например, вызвав
Py_ExitStatusException().
-
int PyStatus_IsError(PyStatus status) -
Является ли результат ошибкой?
-
int PyStatus_IsExit(PyStatus status) -
Является ли результат выходом?
-
void Py_ExitStatusException(PyStatus status) -
Вызвать
exit(exitcode), если status означает выход. Если status означает ошибку, вывести сообщение об ошибке и завершить работу с ненулевым кодом выхода. Вызывать эту функцию можно только в том случае, еслиPyStatus_Exception(status)не равен нулю.
-
Примечание
Внутри Python использует макросы, устанавливающие PyStatus.func, тогда как функции создания состояния устанавливают func в NULL.
Пример:
PyStatus alloc(void **ptr, size_t size)
{
*ptr = PyMem_RawMalloc(size);
if (*ptr == NULL) {
return PyStatus_NoMemory();
}
return PyStatus_Ok();
}
int main(int argc, char **argv)
{
void *ptr;
PyStatus status = alloc(&ptr, 16);
if (PyStatus_Exception(status)) {
Py_ExitStatusException(status);
}
PyMem_Free(ptr);
return 0;
}
PyPreConfig
-
type PyPreConfig -
Структура для предварительной инициализации Python.
Функция инициализации предварительной конфигурации:
-
void PyPreConfig_InitPythonConfig(PyPreConfig *preconfig) -
Инициализировать предварительную конфигурацию с помощью Конфигурации Python.
-
void PyPreConfig_InitIsolatedConfig(PyPreConfig *preconfig) -
Инициализировать предварительную конфигурацию с помощью Изолированной конфигурации.
Поля структуры:
-
int allocator -
Имя распределителя памяти Python:
-
PYMEM_ALLOCATOR_NOT_SET(0): не менять распределители памяти (использовать значения по умолчанию). -
PYMEM_ALLOCATOR_DEFAULT(1): распределители памяти по умолчанию. -
PYMEM_ALLOCATOR_DEBUG(2): распределители памяти по умолчанию с отладочными перехватчиками. -
PYMEM_ALLOCATOR_MALLOC(3): использоватьmalloc()из библиотеки C. -
PYMEM_ALLOCATOR_MALLOC_DEBUG(4): принудительно использоватьmalloc()с отладочными перехватчиками. -
PYMEM_ALLOCATOR_PYMALLOC(5): распределитель памяти Python pymalloc. -
PYMEM_ALLOCATOR_PYMALLOC_DEBUG(6): распределитель памяти Python pymalloc с отладочными перехватчиками. -
PYMEM_ALLOCATOR_MIMALLOC(6): использоватьmimalloc— быструю замену malloc. -
PYMEM_ALLOCATOR_MIMALLOC_DEBUG(7): использоватьmimalloc— быструю замену malloc с отладочными перехватчиками.
PYMEM_ALLOCATOR_PYMALLOCиPYMEM_ALLOCATOR_PYMALLOC_DEBUGне поддерживаются, если Python собран с параметромconfigured using --without-pymalloc.PYMEM_ALLOCATOR_MIMALLOCиPYMEM_ALLOCATOR_MIMALLOC_DEBUGне поддерживаются, если Python собран с параметромconfigured using --without-mimallocили если базовая поддержка атомарных операций недоступна.См. раздел Управление памятью.
По умолчанию:
PYMEM_ALLOCATOR_NOT_SET. -
-
int configure_locale -
Установить для локали LC_CTYPE предпочтительную локаль пользователя.
Если значение равно
0, установить для членовcoerce_c_localeиcoerce_c_locale_warnзначение0.См. кодировку локали.
По умолчанию:
1для конфигурации Python,0для изолированной конфигурации.
-
int coerce_c_locale -
Если значение равно
2, принудительно установить локаль C.Если значение равно
1, проверить локаль LC_CTYPE и определить, требуется ли её принудительная установка.См. кодировку локали.
По умолчанию:
-1для конфигурации Python,0для изолированной конфигурации.
-
int coerce_c_locale_warn -
Если значение не равно нулю, вывести предупреждение при принудительной установке локали C.
По умолчанию:
-1для конфигурации Python,0для изолированной конфигурации.
-
int dev_mode -
Режим разработки Python: см.
PyConfig.dev_mode.По умолчанию:
-1в режиме Python,0в изолированном режиме.
-
int isolated -
Изолированный режим: см.
PyConfig.isolated.По умолчанию:
0в режиме Python,1в изолированном режиме.
-
int legacy_windows_fs_encoding -
Если значение не равно нулю:
- Установить для
PyPreConfig.utf8_modeзначение0, - Установить для
PyConfig.filesystem_encodingзначение"mbcs", - Установить для
PyConfig.filesystem_errorsзначение"replace".
Инициализируется значением переменной окружения
PYTHONLEGACYWINDOWSFSENCODING.Доступно только в Windows. Макрос
#ifdef MS_WINDOWSможно использовать в коде, специфичном для Windows.По умолчанию:
0. - Установить для
-
int parse_argv -
Если значение не равно нулю, функции
Py_PreInitializeFromArgs()иPy_PreInitializeFromBytesArgs()разбирают свой аргументargvтак же, как обычный Python разбирает аргументы командной строки: см. раздел Аргументы командной строки.По умолчанию:
1для конфигурации Python,0для изолированной конфигурации.
-
int use_environment -
Использовать ли переменные окружения? См.
PyConfig.use_environment.По умолчанию:
1для конфигурации Python и0для изолированной конфигурации.
-
int utf8_mode -
Если значение не равно нулю, включить режим UTF-8 Python.
Устанавливается в
0или1параметром командной строки-X utf8и переменной окруженияPYTHONUTF8.Также устанавливается в
1, если локальLC_CTYPEравнаCилиPOSIX.По умолчанию:
-1для конфигурации Python и0для изолированной конфигурации.
-
Предварительная инициализация Python с помощью PyPreConfig
Предварительная инициализация Python выполняет следующие действия:
- Задаёт распределители памяти Python (
PyPreConfig.allocator) - Настраивает локаль LC_CTYPE (кодировку локали)
- Включает режим UTF-8 Python (
PyPreConfig.utf8_mode)
Текущая предварительная конфигурация (тип PyPreConfig) хранится в _PyRuntime.preconfig.
Функции для предварительной инициализации Python:
-
PyStatus Py_PreInitialize(const PyPreConfig *preconfig) -
Выполнить предварительную инициализацию Python с предварительной конфигурацией preconfig.
preconfig не должен быть
NULL.
-
PyStatus Py_PreInitializeFromBytesArgs(const PyPreConfig *preconfig, int argc, char *const *argv) -
Выполнить предварительную инициализацию Python с предварительной конфигурацией preconfig.
Разобрать аргументы командной строки argv (байтовые строки), если значение
parse_argvв preconfig не равно нулю.preconfig не должен быть
NULL.
-
PyStatus Py_PreInitializeFromArgs(const PyPreConfig *preconfig, int argc, wchar_t *const *argv) -
Выполнить предварительную инициализацию Python с предварительной конфигурацией preconfig.
Разобрать аргументы командной строки argv (широкие строки), если значение
parse_argvв preconfig не равно нулю.preconfig не должен быть
NULL.
Вызывающий код отвечает за обработку исключений (ошибок или выхода) с помощью PyStatus_Exception() и Py_ExitStatusException().
Для конфигурации Python (PyPreConfig_InitPythonConfig()), если Python инициализируется с аргументами командной строки, эти аргументы необходимо также передать при предварительной инициализации Python, поскольку они влияют на предварительную конфигурацию, например на кодировки. Например, параметр командной строки -X utf8 включает режим UTF-8 Python.
Функцию PyMem_SetAllocator() можно вызвать после Py_PreInitialize() и до Py_InitializeFromConfig(), чтобы установить пользовательский распределитель памяти. Её можно вызвать до Py_PreInitialize(), если для PyPreConfig.allocator задано значение PYMEM_ALLOCATOR_NOT_SET.
Функции выделения памяти Python, такие как PyMem_RawMalloc(), нельзя использовать до предварительной инициализации Python, тогда как прямой вызов malloc() и free() всегда безопасен. Py_DecodeLocale() нельзя вызывать до предварительной инициализации Python.
Пример использования предварительной инициализации для включения режима UTF-8 Python:
PyStatus status;
PyPreConfig preconfig;
PyPreConfig_InitPythonConfig(&preconfig);
preconfig.utf8_mode = 1;
status = Py_PreInitialize(&preconfig);
if (PyStatus_Exception(status)) {
Py_ExitStatusException(status);
}
/* at this point, Python speaks UTF-8 */
Py_Initialize();
/* ... use Python API here ... */
Py_Finalize();
PyConfig
-
type PyConfig -
Структура, содержащая большинство параметров для настройки Python.
После завершения работы для освобождения памяти конфигурации необходимо использовать функцию
PyConfig_Clear().Методы структуры:
-
void PyConfig_InitPythonConfig(PyConfig *config) -
Инициализирует конфигурацию с помощью конфигурации Python.
-
void PyConfig_InitIsolatedConfig(PyConfig *config) -
Инициализирует конфигурацию с помощью изолированной конфигурации.
-
PyStatus PyConfig_SetString(PyConfig *config, wchar_t *const *config_str, const wchar_t *str) -
Копирует строку широких символов str в
*config_str.При необходимости выполняет предварительную инициализацию Python.
-
PyStatus PyConfig_SetBytesString(PyConfig *config, wchar_t *const *config_str, const char *str) -
Декодирует str с помощью
Py_DecodeLocale()и помещает результат в*config_str.При необходимости выполняет предварительную инициализацию Python.
-
PyStatus PyConfig_SetArgv(PyConfig *config, int argc, wchar_t *const *argv) -
Задаёт аргументы командной строки (член
argvобъекта config) из списка argv строк широких символов.При необходимости выполняет предварительную инициализацию Python.
-
PyStatus PyConfig_SetBytesArgv(PyConfig *config, int argc, char *const *argv) -
Задаёт аргументы командной строки (член
argvобъекта config) из списка argv байтовых строк. Декодирует байты с помощьюPy_DecodeLocale().При необходимости выполняет предварительную инициализацию Python.
-
PyStatus PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, Py_ssize_t length, wchar_t **items) -
Задаёт для списка строк широких символов list значения length и items.
При необходимости выполняет предварительную инициализацию Python.
-
PyStatus PyConfig_Read(PyConfig *config) -
Считывает всю конфигурацию Python.
Уже инициализированные поля остаются без изменений.
При вызове этой функции поля конфигурации путей больше не вычисляются и не изменяются (начиная с Python 3.11).
Функция
PyConfig_Read()анализирует аргументыPyConfig.argvтолько один раз: после разбора аргументов значениеPyConfig.parse_argvустанавливается в2. Поскольку аргументы Python удаляются изPyConfig.argv, повторный разбор аргументов привёл бы к тому, что параметры приложения были бы разобраны как параметры Python.При необходимости выполняет предварительную инициализацию Python.
Изменено в версии 3.10: Аргументы
PyConfig.argvтеперь разбираются только один раз; после разбора аргументов значениеPyConfig.parse_argvустанавливается в2, а разбор аргументов выполняется только в том случае, еслиPyConfig.parse_argvравно1.Изменено в версии 3.11:
PyConfig_Read()больше не вычисляет все пути, поэтому поля, перечисленные в разделе конфигурации путей Python, могут обновиться только после вызоваPy_InitializeFromConfig().
-
void PyConfig_Clear(PyConfig *config) -
Освобождает память конфигурации.
Большинство методов
PyConfigпри необходимости выполняют предварительную инициализацию Python. В этом случае конфигурация предварительной инициализации Python (PyPreConfig) основывается наPyConfig. Если изменяются поля конфигурации, общие дляPyPreConfig, их необходимо задать до вызова методаPyConfig:Кроме того, если используется
PyConfig_SetArgv()илиPyConfig_SetBytesArgv(), этот метод необходимо вызвать до остальных методов, поскольку конфигурация предварительной инициализации зависит от аргументов командной строки (еслиparse_argvне равен нулю).Вызывающий эти методы отвечает за обработку исключений (ошибок или выхода) с помощью
PyStatus_Exception()иPy_ExitStatusException().Поля структуры:
-
PyWideStringList argv -
Задаёт аргументы командной строки
sys.argvна основеargv. Эти параметры аналогичны передаваемым функцииmain()программы, за исключением того, что первая запись должна указывать на запускаемый файл скрипта, а не на исполняемый файл, содержащий интерпретатор Python. Если скрипт не запускается, первая запись вargvможет быть пустой строкой.Установите
parse_argvв1, чтобы разбиратьargvтак же, как обычный Python разбирает аргументы командной строки Python, а затем удалять аргументы Python изargv.Если
argvпуст, добавляется пустая строка, чтобы гарантировать, чтоsys.argvвсегда существует и не бывает пустым.По умолчанию:
NULL.См. также член
orig_argv.
-
int safe_path -
Если значение равно нулю,
Py_RunMain()добавляет потенциально небезопасный путь в началоsys.pathпри запуске:- Если
argv[0]равноL"-m"(python -m module), в начало добавляется текущий рабочий каталог. - При запуске скрипта (
python script.py) в начало добавляется каталог скрипта. Если он является символической ссылкой, символические ссылки разрешаются. - В противном случае (
python -c codeиpython) в начало добавляется пустая строка, обозначающая текущий рабочий каталог.
Устанавливается в
1параметром командной строки-Pи переменной средыPYTHONSAFEPATH.По умолчанию:
0в конфигурации Python,1в изолированной конфигурации.Добавлено в версии 3.11.
- Если
-
wchar_t *base_exec_prefix -
По умолчанию:
NULL.Часть выходных данных конфигурации путей Python.
См. также
PyConfig.exec_prefix.
-
wchar_t *base_executable -
Базовый исполняемый файл Python:
sys._base_executable.Задаётся переменной среды
__PYVENV_LAUNCHER__.Получает значение из
PyConfig.executable, еслиNULL.По умолчанию:
NULL.Часть выходных данных конфигурации путей Python.
См. также
PyConfig.executable.
-
wchar_t *base_prefix -
По умолчанию:
NULL.Часть выходных данных конфигурации путей Python.
См. также
PyConfig.prefix.
-
int buffered_stdio -
Если значение равно
0, аconfigure_c_stdioне равно нулю, отключает буферизацию потоков C stdout и stderr.Устанавливается в
0параметром командной строки-uи переменной средыPYTHONUNBUFFERED.stdin всегда открывается в буферизованном режиме.
По умолчанию:
1.
-
int bytes_warning -
Если значение равно
1, выдаёт предупреждение при сравненииbytesилиbytearrayсstrили при сравненииbytesсint.Если значение равно или больше
2, в этих случаях вызывается исключениеBytesWarning.Увеличивается параметром командной строки
-b.По умолчанию:
0.
-
int warn_default_encoding -
Если значение ненулевое, выдаёт предупреждение
EncodingWarning, когдаio.TextIOWrapperиспользует кодировку по умолчанию. Подробности см. в разделе Включение предупреждений о кодировке.По умолчанию:
0.Добавлено в версии 3.10.
-
int code_debug_ranges -
Если значение равно
0, отключает включение в объекты кода соответствий конечных строк и столбцов. Также отключает вывод указателей на конкретные места ошибок в трассировках стека.Устанавливается в
0переменной средыPYTHONNODEBUGRANGESи параметром командной строки-X no_debug_ranges.По умолчанию:
1.Добавлено в версии 3.11.
-
wchar_t *check_hash_pycs_mode -
Управляет проверкой файлов
.pycна основе хеша: значение параметра командной строки--check-hash-based-pycs.Допустимые значения:
-
L"always": вычислять хеш исходного файла для инвалидации независимо от значения флага ‘check_source’. -
L"never": считать, что файлы pyc на основе хеша всегда действительны. -
L"default": флаг ‘check_source’ в файлах pyc на основе хеша определяет инвалидацию.
По умолчанию:
L"default".См. также PEP 552 «Детерминированные файлы pyc».
-
-
int configure_c_stdio -
Если значение ненулевое, настраивает стандартные потоки C:
- В Windows задаёт двоичный режим (
O_BINARY) для stdin, stdout и stderr. - Если
buffered_stdioравно нулю, отключает буферизацию потоков stdin, stdout и stderr. - Если
interactiveне равно нулю, включает буферизацию потоков stdin и stdout (только stdout в Windows).
По умолчанию:
1в конфигурации Python,0в изолированной конфигурации. - В Windows задаёт двоичный режим (
-
int dev_mode -
Если значение ненулевое, включает режим разработки Python.
Устанавливается в
1параметром-X devи переменной средыPYTHONDEVMODE.По умолчанию:
-1в режиме Python,0в изолированном режиме.
-
int dump_refs -
Выводить дамп ссылок Python?
Если значение ненулевое, выводит дамп всех объектов, остающихся активными при завершении работы.
Устанавливается в
1переменной средыPYTHONDUMPREFS.Требуется специальная сборка Python с определённым макросом
Py_TRACE_REFS: см.configure --with-trace-refs option.По умолчанию:
0.
-
wchar_t *dump_refs_file -
Имя файла, в который выводится дамп ссылок Python.
Задаётся переменной среды
PYTHONDUMPREFSFILE.По умолчанию:
NULL.Добавлено в версии 3.11.
-
wchar_t *exec_prefix -
Префикс каталога, специфичного для платформы, в который установлены платформозависимые файлы Python:
sys.exec_prefix.По умолчанию:
NULL.Часть выходных данных конфигурации путей Python.
См. также
PyConfig.base_exec_prefix.
-
wchar_t *executable -
Абсолютный путь к исполняемому файлу интерпретатора Python:
sys.executable.По умолчанию:
NULL.Часть выходных данных конфигурации путей Python.
См. также
PyConfig.base_executable.
-
int faulthandler -
Включить обработчик ошибок?
Если значение ненулевое, при запуске вызывает
faulthandler.enable().Устанавливается в
1параметром-X faulthandlerи переменной средыPYTHONFAULTHANDLER.По умолчанию:
-1в режиме Python,0в изолированном режиме.
-
wchar_t *filesystem_encoding -
Кодировка файловой системы:
sys.getfilesystemencoding().В macOS, Android и VxWorks по умолчанию используется
"utf-8".В Windows по умолчанию используется
"utf-8"или"mbcs", если значениеlegacy_windows_fs_encodingструктурыPyPreConfigненулевое.Кодировка по умолчанию на других платформах:
-
"utf-8", если значениеPyPreConfig.utf8_modeненулевое. -
"ascii", если Python обнаруживает, чтоnl_langinfo(CODESET)объявляет кодировку ASCII, тогда как функцияmbstowcs()декодирует данные с использованием другой кодировки (обычно Latin1). -
"utf-8", еслиnl_langinfo(CODESET)возвращает пустую строку. - В противном случае используется кодировка локали: результат
nl_langinfo(CODESET).
При запуске Python имя кодировки нормализуется до имени кодека Python. Например,
"ANSI_X3.4-1968"заменяется на"ascii".См. также член
filesystem_errors. -
-
wchar_t *filesystem_errors -
Обработчик ошибок файловой системы:
sys.getfilesystemencodeerrors().В Windows по умолчанию используется
"surrogatepass"или"replace", если значениеlegacy_windows_fs_encodingструктурыPyPreConfigненулевое.На других платформах по умолчанию используется
"surrogateescape".Поддерживаемые обработчики ошибок:
"strict""surrogateescape"-
"surrogatepass"(поддерживается только для кодировки UTF-8)
См. также член
filesystem_encoding.
-
int use_frozen_modules -
Если значение ненулевое, использует замороженные модули.
Задаётся переменной среды
PYTHON_FROZEN_MODULES.По умолчанию:
1в выпускной сборке или0в отладочной сборке.
-
unsigned long hash_seed
-
int use_hash_seed -
Начальное значение рандомизированной хеш-функции.
Если
use_hash_seedравно нулю, при запуске Python начальное значение выбирается случайным образом, аhash_seedигнорируется.Задаётся переменной среды
PYTHONHASHSEED.Значение use_hash_seed по умолчанию:
-1в режиме Python,0в изолированном режиме.
-
wchar_t *home -
Задаёт каталог «home» Python по умолчанию, то есть расположение стандартных библиотек Python (см.
PYTHONHOME).Задаётся переменной среды
PYTHONHOME.По умолчанию:
NULL.Часть входных данных конфигурации путей Python.
-
int import_time -
Если значение равно
1, профилирует время импорта. Если значение равно2, включает дополнительные сведения о том, что импортированный модуль уже был загружен.Задаётся параметром
-X importtimeи переменной средыPYTHONPROFILEIMPORTTIME.По умолчанию:
0.Изменено в версии 3.14: Добавлена поддержка
import_time = 2
-
int inspect -
Переходит в интерактивный режим после выполнения скрипта или команды.
Если значение больше
0, включает режим inspect: если скрипт передан первым аргументом или используется параметр -c, переходит в интерактивный режим после выполнения скрипта или команды, даже еслиsys.stdinне является терминалом.Увеличивается параметром командной строки
-i. Устанавливается в1, если переменная средыPYTHONINSPECTне пуста.По умолчанию:
0.
-
int install_signal_handlers -
Устанавливать обработчики сигналов Python?
По умолчанию:
1в режиме Python,0в изолированном режиме.
-
int interactive -
Если значение больше
0, включает интерактивный режим (REPL).Увеличивается параметром командной строки
-i.По умолчанию:
0.
-
int int_max_str_digits -
Настраивает ограничение длины преобразования целых чисел в строки. Начальное значение
-1означает, что значение будет взято из командной строки или среды; в противном случае используется значение по умолчанию 4300 (sys.int_info.default_max_str_digits). Значение0отключает ограничение. Значения больше нуля, но меньше 640 (sys.int_info.str_digits_check_threshold) не поддерживаются и вызывают ошибку.Настраивается флагом командной строки
-X int_max_str_digitsили переменной средыPYTHONINTMAXSTRDIGITS.По умолчанию:
-1в режиме Python. В изолированном режиме — 4300 (sys.int_info.default_max_str_digits).Добавлено в версии 3.12.
-
-
int cpu_count -
Если значение
cpu_countне равно-1, оно переопределяет значения, возвращаемые функциямиos.cpu_count(),os.process_cpu_count()иmultiprocessing.cpu_count().Настраивается флагом командной строки
-X cpu_count=n|defaultили переменной окруженияPYTHON_CPU_COUNT.По умолчанию:
-1.Добавлено в версии 3.13.
-
int isolated -
Если значение больше
0, включается изолированный режим:- Установить
safe_pathв1: не добавлять в началоsys.pathпотенциально небезопасный путь при запуске Python, например текущий каталог, каталог скрипта или пустую строку. - Установить
use_environmentв0: игнорировать переменные окруженияPYTHON. - Установить
user_site_directoryв0: не добавлять пользовательский каталог site вsys.path. - REPL Python не импортирует
readlineи не включает настройки readline по умолчанию в интерактивных приглашениях.
Устанавливается в
1параметром командной строки-I.По умолчанию:
0в режиме Python,1в изолированном режиме.См. также изолированную конфигурацию и
PyPreConfig.isolated. - Установить
-
int legacy_windows_stdio -
Если значение не равно нулю, для
sys.stdin,sys.stdoutиsys.stderrиспользуетсяio.FileIOвместоio._WindowsConsoleIO.Устанавливается в
1, если переменная окруженияPYTHONLEGACYWINDOWSSTDIOзадана непустой строкой.Доступно только в Windows. Макрос
#ifdef MS_WINDOWSможно использовать в коде, специфичном для Windows.По умолчанию:
0.См. также PEP 528 (изменение кодировки консоли Windows на UTF-8).
-
int malloc_stats -
Если значение не равно нулю, при завершении выводится статистика распределителя памяти Python pymalloc.
Устанавливается в
1переменной окруженияPYTHONMALLOCSTATS.Параметр игнорируется, если Python собран с параметром
configured using the --without-pymalloc option.По умолчанию:
0.
-
wchar_t *platlibdir -
Имя каталога библиотек платформы:
sys.platlibdir.Задаётся переменной окружения
PYTHONPLATLIBDIR.По умолчанию: значение макроса
PLATLIBDIR, задаваемого параметромconfigure --with-platlibdir option(по умолчанию:"lib"или"DLLs"в Windows).Часть входных данных конфигурации путей Python.
Добавлено в версии 3.9.
Изменено в версии 3.11: Теперь этот макрос используется в Windows для поиска модулей расширения стандартной библиотеки, обычно в каталоге
DLLs. Однако для совместимости учтите, что это значение игнорируется для любых нестандартных конфигураций, включая сборки внутри дерева исходного кода и виртуальные окружения.
-
wchar_t *pythonpath_env -
Пути поиска модулей (
sys.path) в виде строки, разделённой символомDELIM(os.pathsep).Задаётся переменной окружения
PYTHONPATH.По умолчанию:
NULL.Часть входных данных конфигурации путей Python.
-
PyWideStringList module_search_paths
-
int module_search_paths_set -
Пути поиска модулей:
sys.path.Если
module_search_paths_setравно0, функцияPy_InitializeFromConfig()заменитmodule_search_pathsи установитmodule_search_paths_setв1.По умолчанию: пустой список (
module_search_paths) и0(module_search_paths_set).Часть выходных данных конфигурации путей Python.
-
int optimization_level -
Уровень оптимизации компиляции:
-
0: оптимизатор peephole; установить__debug__вTrue. -
1: уровень 0, удалить утверждения; установить__debug__вFalse. -
2: уровень 1, удалить строки документации.
Увеличивается параметром командной строки
-O. Устанавливается в значение переменной окруженияPYTHONOPTIMIZE.По умолчанию:
0. -
-
PyWideStringList orig_argv -
Список исходных аргументов командной строки, переданных исполняемому файлу Python:
sys.orig_argv.Если список
orig_argvпуст, аargvне является списком, содержащим только пустую строку,PyConfig_Read()копируетargvвorig_argvперед изменениемargv(еслиparse_argvне равно нулю).См. также поле
argvи функциюPy_GetArgcArgv().По умолчанию: пустой список.
Добавлено в версии 3.10.
-
int parse_argv -
Разбирать аргументы командной строки?
Если равно
1, разбирать аргументыargvтак же, как обычный Python разбирает аргументы командной строки, и удалять аргументы Python изargv.Функция
PyConfig_Read()разбирает аргументыPyConfig.argvтолько один раз: после разбора аргументовPyConfig.parse_argvустанавливается в2. Поскольку аргументы Python удаляются изPyConfig.argv, повторный разбор аргументов привёл бы к тому, что параметры приложения были бы обработаны как параметры Python.По умолчанию:
1в режиме Python,0в изолированном режиме.Изменено в версии 3.10: Аргументы
PyConfig.argvтеперь разбираются только в том случае, еслиPyConfig.parse_argvравно1.
-
int parser_debug -
Режим отладки анализатора. Если значение больше
0, включается вывод отладочной информации анализатора (только для специалистов; зависит от параметров компиляции).Увеличивается параметром командной строки
-d. Устанавливается в значение переменной окруженияPYTHONDEBUG.Требуется отладочная сборка Python (макрос
Py_DEBUGдолжен быть определён).По умолчанию:
0.
-
int pathconfig_warnings -
Если значение не равно нулю, при вычислении конфигурации путей разрешено записывать предупреждения в
stderr. Если значение равно0, эти предупреждения подавляются.По умолчанию:
1в режиме Python,0в изолированном режиме.Часть входных данных конфигурации путей Python.
Изменено в версии 3.11: Теперь применяется и в Windows.
-
wchar_t *prefix -
Префикс каталога для конкретной установки сайта, куда установлены независимые от платформы файлы Python:
sys.prefix.По умолчанию:
NULL.Часть выходных данных конфигурации путей Python.
См. также
PyConfig.base_prefix.
-
wchar_t *program_name -
Имя программы, используемое для инициализации
executableи в ранних сообщениях об ошибках при инициализации Python.- В macOS используется переменная окружения
PYTHONEXECUTABLE, если она задана. - Если определён макрос
WITH_NEXT_FRAMEWORK, используется переменная окружения__PYVENV_LAUNCHER__, если она задана. - Если доступен и не пуст, используется
argv[0]изargv. - В противном случае используется
L"python"в Windows илиL"python3"на других платформах.
По умолчанию:
NULL.Часть входных данных конфигурации путей Python.
- В macOS используется переменная окружения
-
wchar_t *pycache_prefix -
Каталог, в который записываются кэшированные файлы
.pyc:sys.pycache_prefix.Задаётся параметром командной строки
-X pycache_prefix=PATHи переменной окруженияPYTHONPYCACHEPREFIX. Параметр командной строки имеет приоритет.Если
NULL,sys.pycache_prefixустанавливается вNone.По умолчанию:
NULL.
-
int quiet -
Тихий режим. Если значение больше
0, при запуске Python в интерактивном режиме не отображаются сведения об авторских правах и версии.Увеличивается параметром командной строки
-q.По умолчанию:
0.
-
wchar_t *run_command -
Значение параметра командной строки
-c.Используется функцией
Py_RunMain().По умолчанию:
NULL.
-
wchar_t *run_filename -
Имя файла, переданное в командной строке: последний аргумент командной строки без
-cили-m. Используется функциейPy_RunMain().Например, при вызове из командной строки
python3 script.py argэтому параметру присваивается значениеscript.py.См. также параметр
PyConfig.skip_source_first_line.По умолчанию:
NULL.
-
wchar_t *run_module -
Значение параметра командной строки
-m.Используется функцией
Py_RunMain().По умолчанию:
NULL.
-
wchar_t *run_presite -
Путь
package.moduleк модулю, который следует импортировать до запускаsite.py.Задаётся параметром командной строки
-X presite=package.moduleи переменной окруженияPYTHON_PRESITE. Параметр командной строки имеет приоритет.Требуется отладочная сборка Python (макрос
Py_DEBUGдолжен быть определён).По умолчанию:
NULL.
-
int show_ref_count -
Показывать общее количество ссылок при завершении (за исключением объектов бессмертного типа)?
Устанавливается в
1параметром командной строки-X showrefcount.Требуется отладочная сборка Python (макрос
Py_REF_DEBUGдолжен быть определён).По умолчанию:
0.
-
int site_import -
Импортировать модуль
siteпри запуске?Если значение равно нулю, отключается импорт модуля site и связанные с ним изменения
sys.path, зависящие от сайта.Эти изменения также отключаются, если модуль
siteявно импортируется позднее (вызовитеsite.main(), если хотите их активировать).Устанавливается в
0параметром командной строки-S.sys.flags.no_siteустанавливается в значение, противоположное значениюsite_import.По умолчанию:
1.
-
int skip_source_first_line -
Если значение не равно нулю, пропустить первую строку исходного кода
PyConfig.run_filename.Это позволяет использовать варианты
#!cmd, не относящиеся к Unix. Предназначено только для специального приёма в DOS.Устанавливается в
1параметром командной строки-x.По умолчанию:
0.
-
wchar_t *stdio_encoding
-
wchar_t *stdio_errors -
Кодировка и обработка ошибок кодирования для
sys.stdin,sys.stdoutиsys.stderr(однакоsys.stderrвсегда использует обработчик ошибок"backslashreplace").Если переменная окружения
PYTHONIOENCODINGне пуста, используется её значение.Кодировка по умолчанию:
-
"UTF-8", еслиPyPreConfig.utf8_modeне равно нулю. - В противном случае используется кодировка локали.
Обработчик ошибок по умолчанию:
- В Windows используется
"surrogateescape". -
"surrogateescape", еслиPyPreConfig.utf8_modeне равно нулю или локаль LC_CTYPE имеет значение «C» или «POSIX». -
"strict"в остальных случаях.
См. также
PyConfig.legacy_windows_stdio. -
-
int tracemalloc -
Включить tracemalloc?
Если значение не равно нулю, при запуске вызывается
tracemalloc.start().Задаётся параметром командной строки
-X tracemalloc=Nи переменной окруженияPYTHONTRACEMALLOC.По умолчанию:
-1в режиме Python,0в изолированном режиме.
-
int perf_profiling -
Включить поддержку профилировщика Linux
perf?Если значение равно
1, включается поддержка профилировщика Linuxperf.Если значение равно
2, включается поддержка профилировщика Linuxperfс поддержкой JIT DWARF.Устанавливается в
1параметром командной строки-X perfи переменной окруженияPYTHONPERFSUPPORT.Устанавливается в
2параметром командной строки-X perf_jitи переменной окруженияPYTHON_PERF_JIT_SUPPORT.По умолчанию:
-1.См. также
Дополнительные сведения см. в разделе Поддержка профилировщика Linux perf в Python.
Добавлено в версии 3.12.
-
wchar_t *stdlib_dir -
Каталог стандартной библиотеки Python.
По умолчанию:
NULL.Добавлено в версии 3.11.
-
int use_environment -
Использовать переменные окружения?
Если значение равно нулю, переменные окружения игнорируются.
Устанавливается в
0переменной окружения-E.По умолчанию:
1в конфигурации Python и0в изолированной конфигурации.
-
int use_system_logger -
Если значение не равно нулю,
stdoutиstderrперенаправляются в системный журнал.Доступно только в macOS 10.12 и более поздних версиях, а также в iOS.
По умолчанию:
0(системный журнал не используется) в macOS;1в iOS (системный журнал используется).Добавлено в версии 3.14.
-
int user_site_directory -
Если значение не равно нулю, пользовательский каталог site добавляется в
sys.path.Устанавливается в
0параметрами командной строки-sи-I.Устанавливается в
0переменной окруженияPYTHONNOUSERSITE.По умолчанию:
1в режиме Python,0в изолированном режиме.
-
int verbose -
Подробный режим. Если значение больше
0, при каждом импорте модуля выводится сообщение с указанием места, откуда он загружен (имя файла или встроенный модуль).Если значение больше или равно
2, при поиске модуля выводится сообщение для каждого проверяемого файла. Также предоставляется информация об очистке модулей при завершении.Увеличивается параметром командной строки
-v.Устанавливается в значение переменной окружения
PYTHONVERBOSE.По умолчанию:
0.
-
-
PyWideStringList warnoptions -
Параметры модуля
warningsдля создания фильтров предупреждений, от наименьшего приоритета к наибольшему:sys.warnoptions.Модуль
warningsдобавляетsys.warnoptionsв обратном порядке: последний элементPyConfig.warnoptionsстановится первым элементомwarnings.filters, который проверяется первым (имеет наивысший приоритет).Параметр командной строки
-Wдобавляет своё значение вwarnoptions; его можно использовать несколько раз.Переменную окружения
PYTHONWARNINGSтакже можно использовать для добавления параметров предупреждений. Можно указать несколько параметров, разделив их запятыми (,).По умолчанию: пустой список.
-
int write_bytecode -
Если значение равно
0, Python не будет пытаться записывать файлы.pycпри импорте исходных модулей.Устанавливается в
0параметром командной строки-Bи переменной окруженияPYTHONDONTWRITEBYTECODE.sys.dont_write_bytecodeинициализируется значением, обратным значениюwrite_bytecode.По умолчанию:
1.
-
PyWideStringList xoptions -
Значения параметров командной строки
-X:sys._xoptions.По умолчанию: пустой список.
-
int _pystats -
Если значение не равно нулю, при завершении работы Python записывается статистика производительности.
Требуется специальная сборка с макросом
Py_STATS: см.--enable-pystats.По умолчанию:
0.
-
Если parse_argv не равно нулю, аргументы argv разбираются так же, как обычные аргументы командной строки Python, а аргументы Python удаляются из argv.
Параметры xoptions разбираются для установки других параметров: см. параметр командной строки -X.
Изменено в версии 3.9: Поле show_alloc_count удалено.
Инициализация с помощью PyConfig
Инициализация интерпретатора из заполненной структуры конфигурации выполняется вызовом Py_InitializeFromConfig().
Вызывающая сторона должна обрабатывать исключения (ошибки или завершение работы) с помощью PyStatus_Exception() и Py_ExitStatusException().
Если используются PyImport_FrozenModules(), PyImport_AppendInittab() или PyImport_ExtendInittab(), их необходимо установить или вызвать после предварительной инициализации Python и до инициализации Python. Если Python инициализируется несколько раз, PyImport_AppendInittab() или PyImport_ExtendInittab() необходимо вызывать перед каждой инициализацией Python.
Текущая конфигурация (тип PyConfig) хранится в PyInterpreterState.config.
Пример задания имени программы:
void init_python(void)
{
PyStatus status;
PyConfig config;
PyConfig_InitPythonConfig(&config);
/* Set the program name. Implicitly preinitialize Python. */
status = PyConfig_SetString(&config, &config.program_name,
L"/path/to/my_program");
if (PyStatus_Exception(status)) {
goto exception;
}
status = Py_InitializeFromConfig(&config);
if (PyStatus_Exception(status)) {
goto exception;
}
PyConfig_Clear(&config);
return;
exception:
PyConfig_Clear(&config);
Py_ExitStatusException(status);
}
Более полный пример: изменение конфигурации по умолчанию, чтение конфигурации и последующее переопределение некоторых параметров. Обратите внимание: начиная с версии 3.11 многие параметры вычисляются только во время инициализации, поэтому их значения нельзя прочитать из структуры конфигурации. Все значения, заданные до вызова инициализации, останутся без изменений:
PyStatus init_python(const char *program_name)
{
PyStatus status;
PyConfig config;
PyConfig_InitPythonConfig(&config);
/* Set the program name before reading the configuration
(decode byte string from the locale encoding).
Implicitly preinitialize Python. */
status = PyConfig_SetBytesString(&config, &config.program_name,
program_name);
if (PyStatus_Exception(status)) {
goto done;
}
/* Read all configuration at once */
status = PyConfig_Read(&config);
if (PyStatus_Exception(status)) {
goto done;
}
/* Specify sys.path explicitly */
/* If you want to modify the default set of paths, finish
initialization first and then use PySys_GetObject("path") */
config.module_search_paths_set = 1;
status = PyWideStringList_Append(&config.module_search_paths,
L"/path/to/stdlib");
if (PyStatus_Exception(status)) {
goto done;
}
status = PyWideStringList_Append(&config.module_search_paths,
L"/path/to/more/modules");
if (PyStatus_Exception(status)) {
goto done;
}
/* Override executable computed by PyConfig_Read() */
status = PyConfig_SetString(&config, &config.executable,
L"/path/to/my_executable");
if (PyStatus_Exception(status)) {
goto done;
}
status = Py_InitializeFromConfig(&config);
done:
PyConfig_Clear(&config);
return status;
}
Изолированная конфигурация
Функции PyPreConfig_InitIsolatedConfig() и PyConfig_InitIsolatedConfig() создают конфигурацию, изолирующую Python от системы. Например, она может использоваться для встраивания Python в приложение.
Эта конфигурация игнорирует глобальные переменные конфигурации, переменные окружения и аргументы командной строки (PyConfig.argv не разбирается), а также пользовательский каталог site. Стандартные потоки C (например, stdout) и локаль LC_CTYPE остаются без изменений. Обработчики сигналов не устанавливаются.
Файлы конфигурации по-прежнему используются в этой конфигурации для определения неуказанных путей. Убедитесь, что задан параметр PyConfig.home, чтобы избежать вычисления конфигурации путей по умолчанию.
Конфигурация Python
Функции PyPreConfig_InitPythonConfig() и PyConfig_InitPythonConfig() создают конфигурацию для сборки настроенного Python, который ведёт себя как обычный Python.
Для настройки Python используются переменные окружения и аргументы командной строки, а глобальные переменные конфигурации игнорируются.
Эта функция включает принудительное использование локали C (PEP 538) и режим UTF-8 в Python (PEP 540) в зависимости от локали LC_CTYPE, переменных окружения PYTHONUTF8 и PYTHONCOERCECLOCALE.
Конфигурация путей Python
PyConfig содержит несколько полей для конфигурации путей:
-
Входные данные конфигурации путей:
PyConfig.homePyConfig.platlibdirPyConfig.pathconfig_warningsPyConfig.program_namePyConfig.pythonpath_env- текущий рабочий каталог: для получения абсолютных путей
-
переменная окружения
PATHдля получения полного пути к программе (изPyConfig.program_name) -
переменная окружения
__PYVENV_LAUNCHER__ - (только Windows) Пути приложений в реестре по адресу “SoftwarePythonPythonCoreX.YPythonPath” в разделах HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE (где X.Y — версия Python).
-
Выходные поля конфигурации путей:
Если хотя бы одно «выходное поле» не задано, Python вычисляет конфигурацию путей, чтобы заполнить незаданные поля. Если module_search_paths_set равно 0, значение module_search_paths переопределяется, а module_search_paths_set устанавливается в 1.
Вычисление конфигурации путей по умолчанию можно полностью отключить, явно задав все перечисленные выше выходные поля конфигурации путей. Строка считается заданной, даже если она пустая. module_search_paths считается заданным, если module_search_paths_set установлено в 1. В этом случае module_search_paths будет использоваться без изменений.
Установите pathconfig_warnings в 0, чтобы отключить предупреждения при вычислении конфигурации путей (только Unix; Windows не выводит предупреждения).
Если поля base_prefix или base_exec_prefix не заданы, они наследуют значения соответственно из prefix и exec_prefix.
Py_RunMain() и Py_Main() изменяют sys.path:
- Если задан
run_filenameи это каталог, содержащий скрипт__main__.py, добавьтеrun_filenameв началоsys.path. -
Если
isolatedравно нулю:- Если задан
run_module, добавьте текущий каталог в началоsys.path. Ничего не делайте, если текущий каталог недоступен для чтения. - Если задан
run_filename, добавьте каталог, содержащий имя файла, в началоsys.path. - В противном случае добавьте пустую строку в начало
sys.path.
- Если задан
Если site_import не равно нулю, модуль site может изменять sys.path. Если user_site_directory не равно нулю и пользовательский каталог site-packages существует, модуль site добавляет пользовательский каталог site-packages в sys.path.
При конфигурации путей используются следующие файлы конфигурации:
pyvenv.cfg-
файл
._pth(например,python._pth) -
pybuilddir.txt(только Unix)
Если присутствует файл ._pth:
- Установите
isolatedв1. - Установите
use_environmentв0. - Установите
site_importв0. - Установите
safe_pathв1.
Если параметр home не задан и файл pyvenv.cfg присутствует в том же каталоге, что и executable, или в его родительском каталоге, prefix и exec_prefix устанавливаются в этот путь. В этом случае base_prefix и base_exec_prefix сохраняют свои значения, указывающие на базовую установку. Дополнительные сведения см. в разделе Виртуальные окружения.
Переменная окружения __PYVENV_LAUNCHER__ используется для задания PyConfig.base_executable.
Изменено в версии 3.14: Теперь prefix и exec_prefix устанавливаются в каталог pyvenv.cfg. Ранее это выполнял модуль site, поэтому на это влиял параметр -S.
Py_GetArgcArgv()
-
void Py_GetArgcArgv(int *argc, wchar_t ***argv) -
Получить исходные аргументы командной строки до того, как Python изменил их.
См. также поле
PyConfig.orig_argv.
Отложенный запуск главного модуля
В некоторых сценариях встраивания может быть полезно разделить инициализацию интерпретатора и выполнение главного модуля.
Для этого во время инициализации можно установить PyConfig.run_command в пустую строку (чтобы интерпретатор не переходил в интерактивный режим), а затем выполнить код требуемого главного модуля, используя __main__.__dict__ в качестве глобального пространства имён.
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/c-api/init_config.html