Содержание страницы
Конфигурация инициализации Python¶Python Initialization Configuration
PyInitConfig C API¶
Добавлено в версии 3.14.
Python можно инициализировать с помощью Py_InitializeFromInitConfig().
Функция Py_RunMain() может использоваться для написания настраиваемой программы
на Python.
См. также Инициализация, финализация и потоки.
См. также
PEP 741 «Python Configuration C API».
Пример¶Example
Пример собственной сборки Python, которая всегда выполняется с включённым режимом разработки Python; возвращает -1 при ошибке:
int init_python(void)
{
PyInitConfig *config = PyInitConfig_Create();
if (config == NULL) {
printf("PYTHON INIT ERROR: memory allocation failed\n");
return -1;
}
// Включить режим разработки Python
if (PyInitConfig_SetInt(config, "dev_mode", 1) < 0) {
goto error;
}
// Инициализировать Python с конфигурацией
if (Py_InitializeFromInitConfig(config) < 0) {
goto error;
}
PyInitConfig_Free(config);
return 0;
error:
{
// Отобразить сообщение об ошибке.
//
// Этот необычный стиль скобок используется, потому что невозможно заставить
// метки goto указывать на объявления переменных.
const char *err_msg;
(void)PyInitConfig_GetError(config, &err_msg);
printf("PYTHON INIT ERROR: %s\n", err_msg);
PyInitConfig_Free(config);
return -1;
}
}
Создание конфигурации¶Create Config
-
struct PyInitConfig¶
Непрозрачная структура для настройки инициализации Python.
-
PyInitConfig *PyInitConfig_Create(void)¶
Создаёт новую конфигурацию инициализации, используя значения по умолчанию изолированной конфигурации.
Её необходимо освободить с помощью
PyInitConfig_Free().Возвращает
NULLпри ошибке выделения памяти.
-
void PyInitConfig_Free(PyInitConfig *config)¶
Освобождает память, занятую конфигурацией инициализации config.
Если config равен
NULL, никаких действий не выполняется.
Обработка ошибок¶Error Handling
-
int PyInitConfig_GetError(PyInitConfig *config, const char **err_msg)¶
Получает сообщение об ошибке из config.
Устанавливает *err_msg и возвращает
1, если задана ошибка.Устанавливает *err_msg в
NULLи возвращает0в противном случае.
Сообщение об ошибке – это строка в кодировке UTF-8.
Если config содержит код выхода, отформатировать его как сообщение об ошибке.
Сообщение об ошибке остаётся корректным до тех пор, пока не будет вызвана другая функция
PyInitConfigс config. Вызывающему не нужно освобождать память сообщения.
-
int PyInitConfig_GetExitCode(PyInitConfig *config, int *exitcode)¶
Получает код выхода из config.
Устанавливает *exitcode и возвращает
1, если config содержит код выхода.Возвращает
0, если config не содержит код выхода.
Только функция
Py_InitializeFromInitConfig()может установить код выхода, если параметрparse_argvне равен нулю.Код выхода может быть установлен, если не удалось разобрать командную строку (код выхода
2), или если параметр командной строки запрашивает отображение справки (код выхода0).
Получение параметров¶Get Options
Параметр name параметра конфигурации должен быть не-NULL, завершаться нулевым символом и быть строкой в кодировке 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при ошибке.
-
int PyInitConfig_GetStr(PyInitConfig *config, const char *name, char **value)¶
Получает строковую опцию конфигурации в виде строки в кодировке UTF-8, завершённой нулевым символом.
Устанавливает *value и возвращает
0в случае успеха.Устанавливает ошибку в config и возвращает
-1при ошибке.
*value может быть установлен в
NULL, если опция является необязательной строкой и не задана.В случае успеха строку необходимо освободить с помощью
free(value), если она не равнаNULL.
-
int PyInitConfig_GetStrList(PyInitConfig *config, const char *name, size_t *length, char ***items)¶
Получает опцию конфигурации в виде списка строк, представленного массивом строк в кодировке UTF-8, завершённых нулевым символом.
Устанавливает *length и *value, и возвращает
0в случае успеха.Устанавливает ошибку в config и возвращает
-1при ошибке.
В случае успеха список строк необходимо освободить с помощью
PyInitConfig_FreeStrList(length, items).
-
void PyInitConfig_FreeStrList(size_t length, char **items)¶
Освобождает память, занятую списком строк, созданным с помощью
PyInitConfig_GetStrList().
Установка опций¶Set Options
Параметр name параметра конфигурации должен быть не-NULL, завершаться нулевым символом и быть строкой в кодировке 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при ошибке.
Модуль¶Module
-
int PyInitConfig_AddModule(PyInitConfig *config, const char *name, PyObject *(*initfunc)(void))¶
Добавляет встроенный модуль расширения в таблицу встроенных модулей.
Новый модуль импортируется под именем name, а при первой попытке импорта в качестве функции инициализации вызывается функция initfunc.
Возвращает
0при успехе.Устанавливает ошибку в config и возвращает
-1при ошибке.
Если Python инициализируется несколько раз,
PyInitConfig_AddModule()должен вызываться при каждой инициализации Python.Аналогична функции
PyImport_AppendInittab().
Инициализация Python¶Initialize Python
-
int Py_InitializeFromInitConfig(PyInitConfig *config)¶
Инициализирует Python из конфигурации инициализации.
Возвращает
0при успехе.Устанавливает ошибку в config и возвращает
-1при ошибке.Устанавливает код выхода в config и возвращает
-1, если Python хочет завершиться.
См.
PyInitConfig_GetExitcode()для случая с кодом выхода.
Параметры конфигурации¶Configuration Options
Параметр |
Член PyConfig/PyPreConfig |
Тип |
Видимость |
|---|---|---|---|
|
|
Только для чтения |
|
|
|
Общий |
|
|
|
Общий |
|
|
|
Общий |
|
|
|
Общий |
|
|
|
Только для чтения |
|
|
|
Общий |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Общий |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Общий |
|
|
|
Общий |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Общий |
|
|
|
Только для чтения |
|
|
|
Общий |
|
|
|
Общий |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Общий |
|
|
|
Общий |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Общий |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Общий |
|
|
|
Общий |
|
|
|
Только для чтения |
|
|
|
Общий |
|
|
|
Общий |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Общий |
|
|
|
Только для чтения |
|
|
|
Общий |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Только для чтения |
|
|
|
Общий |
|
|
|
Только для чтения |
|
|
|
Общий |
|
|
|
Общий |
|
|
|
Общий |
|
|
|
Только для чтения |
Видимость:
Общий: доступен для чтения через
PyConfig_Get()и для записи черезPyConfig_Set().Только для чтения: доступен для чтения через
PyConfig_Get(), но не может быть изменён черезPyConfig_Set().
API конфигурации Python во время выполнения¶Runtime Python configuration API
Во время выполнения можно получать и устанавливать параметры конфигурации с помощью функций PyConfig_Get() и PyConfig_Set().
Параметр name параметра конфигурации должен быть не-NULL, завершаться нулевым символом и быть строкой в кодировке 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.15: Функция теперь заменяет
sys.flags(создаёт новый объект), а не изменяетsys.flagsна месте.
PyConfig C API¶
Добавлено в версии 3.8.
Python может быть инициализирован с помощью Py_InitializeFromConfig() и структуры
PyConfig. Он может быть предварительно инициализирован с помощью
Py_PreInitialize() и структуры PyPreConfig.
Существует два вида конфигурации:
Конфигурация Python может использоваться для создания настраиваемого Python, который ведёт себя как обычный Python. Например, переменные окружения и аргументы командной строки используются для настройки Python.
Изолированная конфигурация может использоваться для встраивания Python в приложение. Она изолирует Python от системы. Например, переменные окружения игнорируются, локаль LC_CTYPE остаётся неизменной и не регистрируется ни один обработчик сигналов.
Функция Py_RunMain() может использоваться для написания настраиваемой программы
на Python.
См. также Инициализация, финализация и потоки.
См. также
PEP 587 “Конфигурация инициализации Python”.
Пример¶Example
Пример настройки Python для постоянной работы в изолированном режиме:
int main(int argc, char **argv)
{
PyStatus status;
PyConfig config;
PyConfig_InitPythonConfig(&config);
config.isolated = 1;
/* Декодировать аргументы командной строки.
Неявно предварительно инициализировать Python (в изолированном режиме). */
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;
}
/* Вывести сообщение об ошибке и завершить процесс с
ненулевым кодом выхода */
Py_ExitStatusException(status);
}
PyWideStringList¶
-
type PyWideStringList¶
Список строк
wchar_t*.Если length не равно нулю, items должен быть не
NULL, а все строки должны быть\nне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 в\nlist.
index должен быть больше или равен
0.Для вызова этой функции Python должен быть предварительно инициализирован.
Поля структуры:
-
Py_ssize_t length¶
Длина списка.
-
wchar_t **items¶
Элементы списка.
-
PyStatus PyWideStringList_Append(PyWideStringList *list, const wchar_t *item)¶
PyStatus¶
-
type PyStatus¶
Структура для хранения состояния функции инициализации: успех, ошибка\nили завершение.
В случае ошибки может хранить имя C-функции, вызвавшей ошибку.
Поля структуры:
-
int exitcode¶
Код выхода. Аргумент, передаваемый в
exit().
-
const char *err_msg¶
Сообщение об ошибке.
-
const char *func¶
Имя функции, создавшей ошибку, может быть
NULL.
Функции создания статуса:
-
PyStatus PyStatus_Error(const char *err_msg)¶
Ошибка инициализации с сообщением.
err_msg не должен быть
NULL.
Функции обработки статуса:
-
int PyStatus_Exception(PyStatus status)¶
Является ли статус ошибкой или выходом? Если да, исключение должно быть обработано, например, вызовом
Py_ExitStatusException().
-
int exitcode¶
Примечание
Внутренне 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): распределитель памяти pymalloc из Python.PYMEM_ALLOCATOR_PYMALLOC_DEBUG(6): распределитель памяти pymalloc из Python с отладочными перехватчиками.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.
-
void PyPreConfig_InitPythonConfig(PyPreConfig *preconfig)¶
Предварительная инициализация Python с PyPreConfig¶Preinitialize Python with 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);
}
/* на этом этапе Python использует кодировку UTF-8 */
Py_Initialize();
/* ... использовать Python API здесь ... */
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().
Большинство методов
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.12.
-
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.Устарело с версии 3.15, будет удалено в версии 3.17: Параметры
-bи-bbстанут неактивными (no-op) в 3.17. Элементbytes_warningбудет удалён в 3.17.
-
int warn_default_encoding¶
Если не равно нулю, выдаётся предупреждение
EncodingWarning, когдаio.TextIOWrapperиспользует свою кодировку по умолчанию. Подробнее см. Opt-in EncodingWarning.По умолчанию:
0.Добавлено в версии 3.10.
-
int code_debug_ranges¶
Если равно
0, отключает включение сопоставлений конечных строк и столбцов в объекты кода. Также отключает печать кареток в трассировках, указывающих на конкретные места ошибок.Устанавливается в
0переменной окруженияPYTHONNODEBUGRANGESи параметром командной строки-X no_debug_ranges.По умолчанию:
1.Добавлено в версии 3.12.
-
wchar_t *check_hash_pycs_mode¶
Управляет поведением проверки hash-based
.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в изолированной конфигурации.
-
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.12.
-
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?
Если не равно нулю, вызывается
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равен нулю, начальное значение (seed) выбирается случайным образом при запуске Python, аhash_seedигнорируется.Устанавливается переменной окружения
PYTHONHASHSEED.Значение use_hash_seed по умолчанию:
-1в режиме Python,0в изолированном режиме.
-
wchar_t *home¶
Задаёт каталог Python «home» по умолчанию, то есть расположение стандартных библиотек 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: не добавлять каталог пользовательских сайт-пакетов вsys.path.REPL Python не импортирует
readlineи не включает стандартную конфигурацию readline в интерактивных приглашениях.
Устанавливается в
1параметром командной строки-I.По умолчанию:
0в режиме Python,1в изолированном режиме.См. также Изолированная конфигурация и
PyPreConfig.isolated.
-
int legacy_windows_stdio¶
Если не ноль, использовать
io.FileIOвместоio._WindowsConsoleIOдляsys.stdin,sys.stdoutиsys.stderr.Устанавливается в
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.
-
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().Например, устанавливается в
script.pyкомандной строкойpython3 script.py arg.См. также опцию
PyConfig.skip_source_first_line.По умолчанию:
NULL.
-
wchar_t *run_module¶
Значение параметра командной строки
-m.Используется
Py_RunMain().По умолчанию:
NULL.
-
wchar_t *run_presite¶
Точка входа
moduleилиmodule:func, которая выполняется до импорта модуляsite.Устанавливается параметром командной строки
-X presite=module:funcи переменной окруженияPYTHON_PRESITE. Параметр командной строки имеет приоритет.Требуется отладочная сборка Python (макрос
Py_DEBUGдолжен быть определён).По умолчанию:
NULL.
-
int show_ref_count¶
Показывать общее количество ссылок при выходе (исключая бессмертные объекты)?
Устанавливается в
1параметром командной строки-X showrefcount.Требуется отладочная сборка Python (макрос
Py_REF_DEBUGдолжен быть определён).По умолчанию:
0.
-
int site_import¶
Импортировать модуль
siteпри запуске?Если равно нулю, импорт модуля site и зависящие от site манипуляции с
sys.pathотключаются.Также отключает эти манипуляции, если модуль
siteимпортирован явно (вызовитеsite.main(), чтобы включить их).Устанавливается в
0параметром командной строки-S.sys.flags.no_siteустанавливается в инвертированное значениеsite_import.По умолчанию:
1.
-
int skip_source_first_line¶
Если не ноль, пропустить первую строку исходного кода
PyConfig.run_filename.Это позволяет использовать не-Unix формы
#!cmd. Предназначено только для 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с поддержкой DWARF JIT.Устанавливается в
1параметром командной строки-X perfи переменной окруженияPYTHONPERFSUPPORT.Устанавливается в
2параметром командной строки-X perf_jitи переменной окруженияPYTHON_PERF_JIT_SUPPORT.По умолчанию:
-1.См. также
См. поддержку Python для профилировщиков, совместимых с perf map для получения дополнительной информации.
Добавлено в версии 3.12.
-
wchar_t *stdlib_dir¶
Каталог стандартной библиотеки Python.
По умолчанию:
NULL.Добавлено в версии 3.12.
-
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¶
Если не равно нулю, в
sys.pathдобавляется каталог пользовательского site.Устанавливается в
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.
-
void PyConfig_InitPythonConfig(PyConfig *config)¶
Если parse_argv не равно нулю, аргументы argv
разбираются так же, как обычный Python разбирает аргументы командной
строки, а аргументы Python удаляются из
argv.
Параметры xoptions разбираются для установки других опций: см.
опцию командной строки -X.
Изменено в версии 3.9: Поле show_alloc_count было удалено.
Инициализация с PyConfig¶Initialization with 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);
/* Установить имя программы. Неявно предварительно инициализировать 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);
/* Установить имя программы перед чтением конфигурации
(декодировать байтовую строку из кодировки локали).
Неявно предварительно инициализировать Python. */
status = PyConfig_SetBytesString(&config, &config.program_name,
program_name);
if (PyStatus_Exception(status)) {
goto done;
}
/* Прочитать всю конфигурацию сразу */
status = PyConfig_Read(&config);
if (PyStatus_Exception(status)) {
goto done;
}
/* Указать sys.path явно */
/* Если требуется изменить стандартный набор путей, завершите
сначала инициализация, а затем используйте PySys_GetAttrString("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;
}
/* Переопределить исполняемый файл, вычисленный 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;
}
Изолированная конфигурация¶Isolated Configuration
Функции PyPreConfig_InitIsolatedConfig() и PyConfig_InitIsolatedConfig() создают конфигурацию для изоляции Python от системы. Например, для встраивания Python в приложение.
Эта конфигурация игнорирует глобальные переменные конфигурации, переменные окружения, аргументы командной строки (PyConfig.argv не разбирается) и каталог пользовательских сайтов. Стандартные потоки C (например: stdout) и локаль LC_CTYPE остаются без изменений. Обработчики сигналов не устанавливаются.
Конфигурационные файлы по-прежнему используются с этой конфигурацией для определения путей, которые не указаны. Убедитесь, что PyConfig.home указан, чтобы избежать вычисления конфигурации путей по умолчанию.
Конфигурация Python¶Python Configuration
Функции PyPreConfig_InitPythonConfig() и PyConfig_InitPythonConfig() создают конфигурацию для сборки настраиваемого Python, который ведёт себя как обычный Python.
Переменные окружения и аргументы командной строки используются для настройки Python, тогда как глобальные переменные конфигурации игнорируются.
Эта функция включает принудительное использование локали C (PEP 538) и Режим Python UTF-8 (PEP 540) в зависимости от локали LC_CTYPE, переменных окружения PYTHONUTF8 и PYTHONCOERCECLOCALE.
Конфигурация путей Python¶Python Path Configuration
PyConfig содержит несколько полей для конфигурации путей:
Входные данные конфигурации путей:
текущий рабочий каталог: для получения абсолютных путей
переменная окружения
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 не равно нулю, то sys.path может быть изменён модулем site. Если user_site_directory не равно нулю и каталог пакетов сайта пользователя существует, модуль site добавляет каталог пакетов сайта пользователя в sys.path.
При конфигурации путей используются следующие файлы конфигурации:
pyvenv.cfgФайл
._pth(например,python._pth)pybuilddir.txt(только Unix)
Если присутствует файл ._pth:
Устанавливает
isolatedв1.Устанавливает
use_environmentв0.Устанавливает
site_importв0.Устанавливает
user_site_directoryв0(начиная с версии 3.15).Устанавливает
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.
Изменено в версии 3.15: user_site_directory теперь устанавливается в 0 при наличии файла ._pth.
Py_GetArgcArgv()¶
-
void Py_GetArgcArgv(int *argc, wchar_t ***argv)¶
Возвращает исходные аргументы командной строки до того, как Python их изменил.
См. также элемент
PyConfig.orig_argv.
Многофазная инициализация (частный временный API)¶Multi-Phase Initialization Private Provisional API
Данный раздел представляет собой частный временный API, вводящий многофазную инициализацию – ключевую возможность PEP 432:
Фаза «базовой» инициализации, «минимальный Python»:
Фаза «основной» инициализации, Python полностью инициализирован:
Устанавливает и настраивает
importlib;Применяет конфигурацию путей;
Устанавливает обработчики сигналов;
Завершает инициализацию модуля
sys(например, создаётsys.stdoutиsys.path);Включает опциональные возможности, такие как
faulthandlerиtracemalloc;Импортировать модуль
site;и т. д.
Частный временный API:
-
int PyConfig._init_main¶
Если установлено в
0,Py_InitializeFromConfig()останавливается на фазе инициализации “Core”.
-
PyStatus _Py_InitializeMain(void)¶
Переход к фазе инициализации «Main», завершение инициализации Python.
Во время фазы «Core» не импортируется ни один модуль, а модуль importlib не
настроен: Path Configuration применяется только
во время фазы «Main». Это может позволить настраивать Python из Python, чтобы
переопределить или настроить Path Configuration, возможно,
установить пользовательский импортёр sys.meta_path или хук импорта и т. д.
Возможно, станет возможным вычислять Path Configuration в Python после фазы Core и перед фазой Main, что является одной из PEP 432 мотиваций.
Фаза «Core» не определена должным образом: что должно и что не должно быть доступно на этой фазе, пока не указано. API помечен как частный и временный: API может быть изменён или даже удалён в любое время, пока не будет спроектирован надлежащий публичный API.
Пример выполнения кода Python между фазами инициализации «Core» и «Main»:
void init_python(void)
{
PyStatus status;
PyConfig config;
PyConfig_InitPythonConfig(&config);
config._init_main = 0;
/* настроить конфигурацию 'config' */
status = Py_InitializeFromConfig(&config);
PyConfig_Clear(&config);
if (PyStatus_Exception(status)) {
Py_ExitStatusException(status);
}
/* ... разместить здесь дополнительный код конфигурации ...
вызывается _Py_InitializeMain() */
int res = PyRun_SimpleString(
"import sys; "
"print('Run Python code before _Py_InitializeMain', "
"file=sys.stderr)");
if (res < 0) {
exit(1);
}
/* ... добавьте сюда дополнительный код конфигурации ... */
status = _Py_InitializeMain();
if (PyStatus_Exception(status)) {
Py_ExitStatusException(status);
}
}