Конфигурация инициализации Python¶
Добавлено в версии 3.8.
Python может быть инициализирован с помощью Py_InitializeFromConfig() и структуры PyConfig. Он может быть предварительно инициализирован с помощью Py_PreInitialize() и структуры PyPreConfig.
Существует два вида конфигурации:
Python Configuration можно использовать для создания настраиваемого Python, который ведет себя как обычный Python. Например, переменные среды и аргументы командной строки используются для настройки Python.
Параметр Isolated Configuration может использоваться для встраивания Python в приложение. Он изолирует Python от системы. Например, переменные среды игнорируются, языковой стандарт LC_CTYPE остается неизменным, а обработчик сигналов не регистрируется.
Функция Py_RunMain() может быть использована для написания индивидуальной программы на Python.
Смотрите также Initialization, Finalization, and Threads.
См.также
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*.Если длина отлична от нуля, элементы должны быть не``NULL``, а все строки должны быть не``NULL``.
Методы:
-
PyStatus PyWideStringList_Append(PyWideStringList *list, const wchar_t *item)¶
Добавьте элемент в список.
Для вызова этой функции Python должен быть предварительно инициализирован.
-
PyStatus PyWideStringList_Insert(PyWideStringList *list, Py_ssize_t index, const wchar_t *item)¶
Вставьте элемент в список по индексу.
Если индекс больше или равен длине списка, добавьте элемент в список.
индекс должен быть больше или равен
0.Для вызова этой функции Python должен быть предварительно инициализирован.
Структурные поля:
-
Py_ssize_t length¶
Длина списка.
-
wchar_t **items¶
Перечислите элементы.
-
PyStatus PyWideStringList_Append(PyWideStringList *list, const wchar_t *item)¶
ПиСтатус¶
-
type PyStatus¶
Структура для хранения статуса функции инициализации: успех, ошибка или выход.
В случае ошибки он может сохранить имя функции 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)¶
Является ли это состояние ошибкой или завершением работы? Если true, то исключение должно быть обработано, например, с помощью вызова
Py_ExitStatusException().
-
void Py_ExitStatusException(PyStatus status)¶
Вызовите
exit(exitcode), если значение status означает выход. Выведите сообщение об ошибке и завершите работу с ненулевым кодом завершения, если значение status является ошибкой. Следует вызывать только в том случае, если значениеPyStatus_Exception(status)не равно нулю.
-
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 Configuration.
-
void PyPreConfig_InitIsolatedConfig(PyPreConfig *preconfig)¶
Инициализируйте предварительную настройку с помощью Isolated Configuration.
Структурные поля:
-
int allocator¶
Имя распределителей памяти Python:
PYMEM_ALLOCATOR_NOT_SET(0): не меняйте распределители памяти (используйте значения по умолчанию).PYMEM_ALLOCATOR_DEFAULT(1): default memory allocators.PYMEM_ALLOCATOR_DEBUG(2): default memory allocators с помощью debug hooks.PYMEM_ALLOCATOR_MALLOC(3): используйтеmalloc()из библиотеки C.PYMEM_ALLOCATOR_MALLOC_DEBUG(4): принудительное использованиеmalloc()с помощью debug hooks.PYMEM_ALLOCATOR_PYMALLOC(5): Python pymalloc memory allocator.PYMEM_ALLOCATOR_PYMALLOC_DEBUG(6): Python pymalloc memory allocator с помощью debug hooks.
PYMEM_ALLOCATOR_PYMALLOCиPYMEM_ALLOCATOR_PYMALLOC_DEBUGне поддерживаются, если Python имеет значениеconfigured using --without-pymalloc.Смотрите Memory Management.
Значение по умолчанию:
PYMEM_ALLOCATOR_NOT_SET.
-
int configure_locale¶
Установите для языкового стандарта LC_CTYPE значение, соответствующее предпочтительному языковому стандарту пользователя.
Если равно
0, установите для элементовcoerce_c_localeиcoerce_c_locale_warnзначение0.Смотрите locale encoding.
По умолчанию:
1в конфигурации Python,0в изолированной конфигурации.
-
int coerce_c_locale¶
Если равно
2, укажите язык Си.Если равно
1, прочитайте языковой стандарт LC_CTYPE, чтобы решить, следует ли его принудительно изменять.Смотрите locale encoding.
По умолчанию:
-1в конфигурации Python,0в изолированной конфигурации.
-
int coerce_c_locale_warn¶
Если значение не равно нулю, выдается предупреждение при принудительном использовании языкового стандарта C.
По умолчанию:
-1в конфигурации Python,0в изолированной конфигурации.
-
int dev_mode¶
Python Development Mode: смотрите
PyConfig.dev_mode.По умолчанию:
-1в режиме Python,0в изолированном режиме.
-
int isolated¶
Изолированный режим: смотрите : c:member:PyConfig.isolated.
По умолчанию:
0в режиме Python,1в изолированном режиме.
-
int legacy_windows_fs_encoding¶
Если значение не равно нулю:
Установите для c:member:PyPreConfig.utf8_mode значение
0,Установите для c:member:PyConfig.filesystem_encoding значение
"mbcs",Установите для c:member:PyConfig.filesystem_errors значение
"replace".
Инициализировал значение переменной окружения from
PYTHONLEGACYWINDOWSFSENCODING.Доступно только в Windows.
#ifdef MS_WINDOWSмакрос можно использовать для кода, специфичного для Windows.Значение по умолчанию:
0.
-
int parse_argv¶
Если значение не равно нулю, то
Py_PreInitializeFromArgs()иPy_PreInitializeFromBytesArgs()анализируют свои аргументыargvтак же, как обычный Python анализирует аргументы командной строки: смотрите Command Line Arguments.По умолчанию:
1в конфигурации Python,0в изолированной конфигурации.
-
int use_environment¶
Используйте environment variables? Смотрите
PyConfig.use_environment.По умолчанию:
1в конфигурации Python и0в изолированной конфигурации.
-
int utf8_mode¶
Если значение не равно нулю, включите параметр Python UTF-8 Mode.
Установите значение
0или1с помощью параметра командной строки-X utf8и переменной окруженияPYTHONUTF8.Также установите значение
1, если языковой стандартLC_CTYPEравенCилиPOSIX.По умолчанию:
-1в конфигурации Python и0в изолированной конфигурации.
-
void PyPreConfig_InitPythonConfig(PyPreConfig *preconfig)¶
Предварительная инициализация Python с помощью PyPreConfig¶
Предварительная инициализация Python:
Установите распределители памяти Python (
PyPreConfig.allocator)Настройте языковой стандарт LC_CTYPE (locale encoding)
Установите значение Python UTF-8 Mode (
PyPreConfig.utf8_mode)
Текущая предварительная настройка (тип PyPreConfig) хранится в _PyRuntime.preconfig.
Функции для предварительной инициализации Python:
-
PyStatus Py_PreInitialize(const PyPreConfig *preconfig)¶
Предварительно инициализируйте Python из preconfig предварительной настройки.
предварительная настройка не должна быть
NULL.
-
PyStatus Py_PreInitializeFromBytesArgs(const PyPreConfig *preconfig, int argc, char *const *argv)¶
Предварительно инициализируйте Python из preconfig предварительной настройки.
Проанализируйте аргументы командной строки argv (строки в байтах), если
parse_argvиз preconfig не равно нулю.предварительная настройка не должна быть
NULL.
-
PyStatus Py_PreInitializeFromArgs(const PyPreConfig *preconfig, int argc, wchar_t *const *argv)¶
Предварительно инициализируйте Python из preconfig предварительной настройки.
Проанализируйте аргументы командной строки argv (расширенные строки), если
parse_argvиз preconfig не равно нулю.предварительная настройка не должна быть
NULL.
Вызывающий объект отвечает за обработку исключений (ошибка или выход), используя: c:func:PyStatus_Exception и Py_ExitStatusException().
Для Python Configuration (PyPreConfig_InitPythonConfig()), если Python инициализируется с помощью аргументов командной строки, аргументы командной строки также должны быть переданы для предварительной инициализации Python, поскольку они влияют на предварительную конфигурацию подобно кодировкам. Например, параметр командной строки -X utf8 включает параметр Python UTF-8 Mode.
PyMem_SetAllocator() может быть вызван после Py_PreInitialize() и перед Py_InitializeFromConfig() для установки пользовательского распределителя памяти. Он может быть вызван до Py_PreInitialize(), если для PyPreConfig.allocator задано значение PYMEM_ALLOCATOR_NOT_SET.
Функции выделения памяти Python, такие как PyMem_RawMalloc(), не должны использоваться перед предварительной инициализацией Python, в то время как прямой вызов malloc() и free() всегда безопасен. Py_DecodeLocale() не должен вызываться перед предварительной инициализацией. Предварительная инициализация Python.
Пример использования предварительной инициализации для включения Python UTF-8 Mode:
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 Configuration.
-
void PyConfig_InitIsolatedConfig(PyConfig *config)¶
Инициализируйте конфигурацию с помощью Isolated Configuration.
-
PyStatus PyConfig_SetString(PyConfig *config, wchar_t *const *config_str, const wchar_t *str)¶
Скопируйте широкую символьную строку str в
*config_str.Preinitialize Python при необходимости.
-
PyStatus PyConfig_SetBytesString(PyConfig *config, wchar_t *const *config_str, const char *str)¶
Расшифруйте str с помощью
Py_DecodeLocale()и преобразуйте результат в*config_str.Preinitialize Python при необходимости.
-
PyStatus PyConfig_SetArgv(PyConfig *config, int argc, wchar_t *const *argv)¶
Задайте аргументы командной строки (
argvэлемент config) из списка широких символьных строк argv.Preinitialize Python при необходимости.
-
PyStatus PyConfig_SetBytesArgv(PyConfig *config, int argc, char *const *argv)¶
Задайте аргументы командной строки (
argvэлемент config) из списка байтовых строк argv. Расшифруйте байты, используяPy_DecodeLocale().Preinitialize Python при необходимости.
-
PyStatus PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, Py_ssize_t length, wchar_t **items)¶
Установите для списка широких строк list значения length и items.
Preinitialize Python при необходимости.
-
PyStatus PyConfig_Read(PyConfig *config)¶
Прочитайте всю конфигурацию Python.
Поля, которые уже инициализированы, остаются неизменными.
Поля для path configuration больше не вычисляются и не изменяются при вызове этой функции, начиная с версии Python 3.11.
Функция
PyConfig_Read()анализирует аргументыPyConfig.argvтолько после того, как для параметра:PyConfig.parse_argvустановлено значение2после анализа аргументов. Поскольку аргументы Python удалены изPyConfig.argv, при повторном анализе аргументов параметры приложения будут проанализированы как параметры Python.Preinitialize Python при необходимости.
Изменено в версии 3.10: Аргументы
PyConfig.argvтеперь анализируются только один раз,PyConfig.parse_argvприсваивается значение2после анализа аргументов, а аргументы анализируются только в том случае, еслиPyConfig.parse_argvравно1.Изменено в версии 3.11:
PyConfig_Read()больше не вычисляет все пути, и поэтому поля, перечисленные в разделе Python Path Configuration, могут больше не обновляться до тех пор, пока не будет вызванPy_InitializeFromConfig().
Большинство
PyConfigметодов preinitialize Python при необходимости. В этом случае конфигурация предварительной инициализации Python (PyPreConfig) основана наPyConfig. Если настроены поля конфигурации, которые являются общими дляPyPreConfig, они должны быть установлены перед вызовом методаPyConfig:Более того, если используется
PyConfig_SetArgv()илиPyConfig_SetBytesArgv(), этот метод должен вызываться перед другими методами, поскольку конфигурация предварительной инициализации зависит от аргументов командной строки (еслиparse_argvне равно нулю).Вызывающий эти методы отвечает за обработку исключений (ошибка или выход), используя
PyStatus_Exception()иPy_ExitStatusException().Структурные поля:
-
PyWideStringList argv¶
Аргументы командной строки:
sys.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 Path Configuration.
-
wchar_t *base_executable¶
Базовый исполняемый файл Python:
sys._base_executable.Устанавливается переменной окружения
__PYVENV_LAUNCHER__.Устанавливается из
PyConfig.executable, еслиNULL.Значение по умолчанию:
NULL.Часть вывода Python Path Configuration.
-
wchar_t *base_prefix¶
-
Значение по умолчанию:
NULL.Часть вывода Python Path Configuration.
-
int buffered_stdio¶
Если равно
0иconfigure_c_stdioне равно нулю, отключите буферизацию в потоках C stdout и stderr.Установите значение
0с помощью параметра командной строки-uи переменной окруженияPYTHONUNBUFFERED.стандартный логин всегда открывается в буферизованном режиме.
Значение по умолчанию:
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": Предположим, что фотографии, основанные на хэше, всегда действительны.L"default": Флаг „check_source“ в pycs на основе хэша определяет недействительность.
Значение по умолчанию:
L"default".Смотрите также PEP 552 «Детерминированные pycs».
-
int configure_c_stdio¶
Если значение не равно нулю, настройте стандартные потоки C:
В Windows установите двоичный режим (
O_BINARY) для stdin, stdout и stderr.Если
buffered_stdioравно нулю, отключите буферизацию потоков stdin, stdout и stderr.Если
interactiveне равно нулю, включите буферизацию потока в стандартном вводе и стандартном выводе (только стандартный вывод в Windows).
По умолчанию:
1в конфигурации Python,0в изолированной конфигурации.
-
int dev_mode¶
Если значение не равно нулю, включите параметр Python Development Mode.
Установите значение
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 *exec_prefix¶
Префикс каталога для конкретного сайта, в котором установлены файлы Python, зависящие от платформы:
sys.exec_prefix.Значение по умолчанию:
NULL.Часть вывода Python Path Configuration.
-
wchar_t *executable¶
Абсолютный путь к исполняемому двоичному файлу для интерпретатора Python:
sys.executable.Значение по умолчанию:
NULL.Часть вывода Python Path Configuration.
-
int faulthandler¶
Включить обработчик ошибок?
Если значение не равно нулю, вызовите
faulthandler.enable()при запуске.Установите значение
1с помощью-X faulthandlerи переменной окруженияPYTHONFAULTHANDLER.По умолчанию:
-1в режиме Python,0в изолированном режиме.
-
wchar_t *filesystem_encoding¶
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)возвращает пустую строку.В противном случае используйте результат locale encoding:
nl_langinfo(CODESET).
При запуске Python имя кодировки нормализуется к имени кодека Python. Например,
"ANSI_X3.4-1968"заменяется на"ascii".Смотрите также элемент
filesystem_errors.
-
wchar_t *filesystem_errors¶
Filesystem error handler:
sys.getfilesystemencodeerrors().В Windows: используйте
"surrogatepass"по умолчанию или"replace", еслиlegacy_windows_fs_encodingизPyPreConfigне равно нулю.На других платформах: по умолчанию используйте
"surrogateescape".Поддерживаемые обработчики ошибок:
"strict""surrogateescape""surrogatepass"(поддерживается только в кодировке UTF-8)
Смотрите также элемент
filesystem_encoding.
-
unsigned long hash_seed¶
-
int use_hash_seed¶
Начальное значение рандомизированной хэш-функции.
Если
use_hash_seedравно нулю, начальное значение выбирается случайным образом при запуске Python, аhash_seedигнорируется.Устанавливается переменной окружения
PYTHONHASHSEED.Значение по умолчанию use_hash_seed:
-1в режиме Python,0в изолированном режиме.
-
wchar_t *home¶
Домашний каталог Python.
Если был вызван параметр
Py_SetPythonHome(), используйте его аргумент, если это неNULL.Устанавливается переменной окружения
PYTHONHOME.Значение по умолчанию:
NULL.Часть входных данных Python Path Configuration.
-
int import_time¶
Если значение не равно нулю, то время импорта профиля.
Установите значение
1с помощью параметра-X importtimeи переменной окруженияPYTHONPROFILEIMPORTTIME.Значение по умолчанию:
0.
-
int inspect¶
Войдите в интерактивный режим после выполнения сценария или команды.
Если значение больше
0, включите проверку: когда скрипт передается в качестве первого аргумента или используется параметр -c, после выполнения скрипта или команды перейдите в интерактивный режим, даже еслиsys.stdinне отображается как терминал.Увеличивается с помощью параметра командной строки
-i. Установите значение1, если переменная окруженияPYTHONINSPECTне является пустой.Значение по умолчанию:
0.
-
int install_signal_handlers¶
Установить обработчики сигналов Python?
По умолчанию:
1в режиме Python,0в изолированном режиме.
-
int interactive¶
Если значение больше
0, включите интерактивный режим (ОТВЕТИТЬ).Увеличивается с помощью параметра командной строки
-i.Значение по умолчанию:
0.
-
int isolated¶
Если значение больше
0, включите изолированный режим:Установите для
safe_pathзначение1: не добавляйте потенциально небезопасный путь кsys.pathпри запуске Python.Установите для c:member:~PyConfig.use_environment значение
0.Установите для
user_site_directoryзначение0: не добавляйте каталог сайта пользователя вsys.path.Python REPL не импортирует
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 memory allocator при выходе.
Устанавливается в
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 Path Configuration.
Добавлено в версии 3.9.
Изменено в версии 3.11: Этот макрос теперь используется в Windows для определения местоположения модулей расширения стандартной библиотеки, обычно в разделе
DLLs. Однако для обеспечения совместимости обратите внимание, что это значение игнорируется для любых нестандартных макетов, включая встроенные сборки и виртуальные среды.
-
wchar_t *pythonpath_env¶
Пути поиска модуля (
sys.path) в виде строки, разделенной символомDELIM(os.pathsep).Устанавливается переменной окружения
PYTHONPATH.Значение по умолчанию:
NULL.Часть входных данных Python Path Configuration.
-
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 Path Configuration.
-
int optimization_level¶
Уровень оптимизации компиляции:
0: Оптимизатор «Глазок», установите для__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 выполняет синтаксический анализ command line arguments, и удалите аргументы 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.Значение по умолчанию:
0.
-
int pathconfig_warnings¶
Если значение не равно нулю, то допускается вычисление конфигурации пути для записи предупреждений в
stderr. Если значение равно0, отключите эти предупреждения.По умолчанию:
1в режиме Python,0в изолированном режиме.Часть входных данных Python Path Configuration.
Изменено в версии 3.11: Теперь это также применимо к Windows.
-
wchar_t *prefix¶
Префикс каталога для конкретного сайта, в котором установлены независимые от платформы файлы Python:
sys.prefix.Значение по умолчанию:
NULL.Часть вывода Python Path Configuration.
-
wchar_t *program_name¶
Имя программы, используемое для инициализации : c:member:~PyConfig.executable и в ранних сообщениях об ошибках при инициализации Python.
Если был вызван
Py_SetProgramName(), используйте его аргумент.В macOS используйте переменную окружения
PYTHONEXECUTABLE, если она задана.Если определен макрос
WITH_NEXT_FRAMEWORK, используйте переменную окружения__PYVENV_LAUNCHER__, если она задана.Используйте
argv[0]изargv, если оно доступно и не пустое.В противном случае используйте
L"python"в Windows илиL"python3"на других платформах.
Значение по умолчанию:
NULL.Часть входных данных Python Path Configuration.
-
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.
-
int show_ref_count¶
Показывать общее количество ссылок при выходе?
Установите значение
1с помощью параметра командной строки-X showrefcount.Нужен debug build of 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.Это позволяет использовать не-Unix-формы
#!cmd. Это предназначено только для взлома, специфичного для DOS.Установите значение
1с помощью параметра командной строки-x.Значение по умолчанию:
0.
-
wchar_t *stdio_encoding¶
-
wchar_t *stdio_errors¶
Кодирование и ошибки кодирования
sys.stdin,sys.stdoutиsys.stderr(ноsys.stderrвсегда использует обработчик ошибок"backslashreplace").Если был вызван
Py_SetStandardStreamEncoding(), используйте его аргументы error и errors, если они не являютсяNULL.Используйте переменную окружения
PYTHONIOENCODING, если она непустая.Кодировка по умолчанию:
"UTF-8"еслиPyPreConfig.utf8_modeне равно нулю.В противном случае используйте locale encoding.
Обработчик ошибок по умолчанию:
В Windows: используйте
"surrogateescape"."surrogateescape"еслиPyPreConfig.utf8_modeне равно нулю, или если языковой стандарт LC_CTYPE равен «C» или «POSIX»."strict"в противном случае.
-
int tracemalloc¶
Включить tracemalloc?
Если значение не равно нулю, вызовите
tracemalloc.start()при запуске.Устанавливается с помощью параметра командной строки
-X tracemalloc=Nи переменной окруженияPYTHONTRACEMALLOC.По умолчанию:
-1в режиме Python,0в изолированном режиме.
-
int use_environment¶
Использовать environment variables?
Если равно нулю, игнорируйте environment variables.
Устанавливается в
0с помощью переменной окружения-E.По умолчанию:
1в конфигурации Python и0в изолированной конфигурации.
-
int user_site_directory¶
Если значение не равно нулю, добавьте каталог сайта пользователя в
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.По умолчанию: пустой список.
-
void PyConfig_InitPythonConfig(PyConfig *config)¶
Если parse_argv не равно нулю, аргументы argv анализируются так же, как обычный Python анализирует command line arguments, а аргументы Python удаляются из argv.
Параметры xoptions анализируются для установки других параметров: смотрите параметр командной строки -X.
Изменено в версии 3.9: Поле show_alloc_count было удалено.
Инициализация с помощью PyConfig¶
Функция для инициализации Python:
-
PyStatus Py_InitializeFromConfig(const PyConfig *config)¶
Инициализируйте Python из config configuration.
Вызывающий объект отвечает за обработку исключений (ошибка или выход), используя: c:func:PyStatus_Exception и Py_ExitStatusException().
Если используются PyImport_FrozenModules(), PyImport_AppendInittab() или PyImport_ExtendInittab(), они должны быть установлены или вызваны после предварительной инициализации Python и перед самой инициализацией Python. Если Python инициализируется несколько раз, то перед каждой инициализацией Python необходимо вызывать PyImport_AppendInittab() или PyImport_ExtendInittab().
Текущая конфигурация (тип 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, многие параметры не вычисляются до момента инициализации, и поэтому значения не могут быть считаны из структуры конфигурации. Все значения, заданные до вызова функции initialize, будут оставлены без изменений при инициализации:
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 не обрабатывается) и каталог сайта пользователя. Стандартные потоки C (например, stdout) и языковой стандарт LC_CTYPE оставлены без изменений. Обработчики сигналов не установлены.
Файлы конфигурации по-прежнему используются в этой конфигурации для определения путей, которые не указаны. Убедитесь, что указано значение PyConfig.home, чтобы избежать вычисления конфигурации пути по умолчанию.
Конфигурация Python¶
Функции PyPreConfig_InitPythonConfig() и PyConfig_InitPythonConfig() создают конфигурацию для создания настраиваемого Python, который ведет себя как обычный Python.
Переменные среды и аргументы командной строки используются для настройки Python, в то время как глобальные переменные конфигурации игнорируются.
Эта функция позволяет использовать приведение к языковому стандарту C (PEP 538) и Python UTF-8 Mode (PEP 540) в зависимости от языкового стандарта LC_CTYPE, переменные среды PYTHONUTF8 и PYTHONCOERCECLOCALE.
Конфигурация пути Python¶
PyConfig содержит несколько полей для настройки пути:
Входные данные для настройки пути:
текущий рабочий каталог: для получения абсолютных путей
PATHпеременная окружения для получения полного пути к программе (изPyConfig.program_name)__PYVENV_LAUNCHER__переменная окружения(Только для Windows) Пути к приложениям в реестре в разделе «Программное обеспечениеPythonPythonCoreX.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.
В конфигурации path используются следующие конфигурационные файлы:
pyvenv.cfg._pthфайл (например:python._pth)pybuilddir.txt(только для Unix)
Если присутствует файл ._pth:
Установите для c:member:~PyConfig.isolated значение
1.Установите для c:member:~PyConfig.use_environment значение
0.Установите для c:member:~PyConfig.site_import значение
0.Установите для c:member:~PyConfig.safe_path значение
1.
Переменная окружения __PYVENV_LAUNCHER__ используется для установки PyConfig.base_executable
Py_Run Main()¶
-
int Py_RunMain(void)¶
Выполните команду (
PyConfig.run_command), скрипт (PyConfig.run_filename) или модуль (PyConfig.run_module), указанные в командной строке или в конфигурации.По умолчанию и при использовании параметра if
-iзапустите REPL.Наконец, завершает работу Python и возвращает статус завершения, который может быть передан функции
exit().
Смотрите Python Configuration для примера настроенного Python, который всегда работает в изолированном режиме, используя : c:func:Py_RunMain.
Py_GetArgcArgv()¶
-
void Py_GetArgcArgv(int *argc, wchar_t ***argv)¶
Получите исходные аргументы командной строки до того, как Python изменил их.
Смотрите также
PyConfig.orig_argvчлен.
Многоэтапная инициализация Частного временного API¶
Этот раздел представляет собой частный предварительный API, представляющий многоэтапную инициализацию, основную функцию PEP 432:
Фаза инициализации «Ядра», «минимальный уровень Python»:
«Основная» фаза инициализации, Python полностью инициализирован:
Установка и настройка
importlib;Примените Path Configuration;
Установите обработчики сигналов;
Завершить инициализацию модуля
sys(например, создатьsys.stdoutиsys.path);Включите дополнительные функции, такие как
faulthandlerиtracemalloc;Импортируйте модуль
site;и т.д.
Частный предварительный API:
PyConfig._init_main: если установлено значение0,Py_InitializeFromConfig()останавливается на этапе инициализации «Ядра».PyConfig._isolated_interpreter: если значение не равно нулю, запретите потоки, подпроцессы и разветвление.
-
PyStatus _Py_InitializeMain(void)¶
Перейдите к «Основной» фазе инициализации, завершите инициализацию Python.
Ни один модуль не импортируется во время «Основной» фазы, а модуль importlib не настроен: Path Configuration применяется только во время «Основной» фазы. Это может позволить настроить Python в Python для переопределения или настройки Path Configuration, возможно, установить пользовательский импортер sys.meta_path или импортный хук и т.д.
Может появиться возможность вычислить Path Configuration на Python после основной фазы и перед основной фазой, что является одной из мотиваций PEP 432.
«Основная» фаза не определена должным образом: что должно быть доступно, а что нет на этом этапе, пока не указано. API помечен как закрытый и временный: API может быть изменен или даже удален в любое время, пока не будет разработан надлежащий общедоступный API.
Пример выполнения кода на Python между фазами инициализации «Core» и «Main»:
void init_python(void)
{
PyStatus status;
PyConfig config;
PyConfig_InitPythonConfig(&config);
config._init_main = 0;
/* ... customize 'config' configuration ... */
status = Py_InitializeFromConfig(&config);
PyConfig_Clear(&config);
if (PyStatus_Exception(status)) {
Py_ExitStatusException(status);
}
/* Use sys.stderr because sys.stdout is only created
by _Py_InitializeMain() */
int res = PyRun_SimpleString(
"import sys; "
"print('Run Python code before _Py_InitializeMain', "
"file=sys.stderr)");
if (res < 0) {
exit(1);
}
/* ... put more configuration code here ... */
status = _Py_InitializeMain();
if (PyStatus_Exception(status)) {
Py_ExitStatusException(status);
}
}