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

Инициализация и финализация интерпретатораInterpreter initialization and finalization

Подробнее о том, как настроить интерпретатор до инициализации, см. в Python Initialization Configuration.

До инициализации PythonBefore Python initialization

В приложении, встраивающем Python, функция Py_Initialize() должна вызываться до использования любых других функций Python/C API; за исключением нескольких функций и глобальных переменных конфигурации.

Следующие функции можно безопасно вызывать до инициализации Python:

Примечание

Несмотря на внешнее сходство с некоторыми из перечисленных выше функций, следующие функции не следует вызывать до инициализации интерпретатора: Py_EncodeLocale(), PyEval_InitThreads() и Py_RunMain().

Глобальные переменные конфигурацииGlobal configuration variables

В Python есть переменные глобальной конфигурации, управляющие различными возможностями и настройками. По умолчанию эти флаги задаются параметрами командной строки.

Когда флаг устанавливается через параметр, значение флага равно количеству раз, которое этот параметр был указан. Например, -b устанавливает Py_BytesWarningFlag в 1, а -bb устанавливает Py_BytesWarningFlag в 2.

int Py_BytesWarningFlag

Этот API сохранён для обратной совместимости: вместо него следует использовать PyConfig.bytes_warning. См. Python Initialization Configuration.

Выдавать предупреждение при сравнении bytes или bytearray с str или bytes с int. Если значение больше или равно 2, выдавать ошибку.

Устанавливается опцией -b.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_DebugFlag

Этот API сохранён для обратной совместимости: вместо него следует использовать PyConfig.parser_debug. См. Python Initialization Configuration.

Включает отладочный вывод парсера (только для экспертов, зависит от опций компиляции).

Устанавливается опцией -d и переменной окружения PYTHONDEBUG.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_DontWriteBytecodeFlag

Этот API сохранён для обратной совместимости: вместо него следует использовать PyConfig.write_bytecode. См. Python Initialization Configuration.

Если установлено ненулевое значение, Python не будет пытаться записывать файлы .pyc при импорте исходных модулей.

Устанавливается опцией -B и переменной окружения PYTHONDONTWRITEBYTECODE.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_FrozenFlag

Этот API сохранён для обратной совместимости: следует использовать настройку PyConfig.pathconfig_warnings; см. Python Initialization Configuration.

Внутренний флаг, используемый программами _freeze_module и frozenmain.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_HashRandomizationFlag

Этот API сохранён для обратной совместимости: вместо него следует использовать PyConfig.hash_seed и PyConfig.use_hash_seed; см. конфигурацию инициализации Python.

Устанавливается в 1, если переменная окружения PYTHONHASHSEED установлена в непустую строку.

Если флаг ненулевой, читает переменную окружения PYTHONHASHSEED для инициализации секретного начального значения хеша.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_IgnoreEnvironmentFlag

Этот API сохранён для обратной совместимости: следует использовать настройку PyConfig.use_environment; см. Python Initialization Configuration.

Игнорировать все переменные окружения PYTHON*, например PYTHONPATH и PYTHONHOME, которые могли быть установлены.

Устанавливается параметрами -E и -I.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_InspectFlag

Этот API сохранён для обратной совместимости: следует использовать настройку PyConfig.inspect; см. Python Initialization Configuration.

Если скрипт передан первым аргументом или используется параметр -c, после выполнения скрипта или команды перейти в интерактивный режим, даже если sys.stdin не является терминалом.

Устанавливается опцией -i и переменной окружения PYTHONINSPECT.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_InteractiveFlag

Этот API сохранён для обратной совместимости: следует использовать настройку PyConfig.interactive; см. Python Initialization Configuration.

Устанавливается опцией -i.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_IsolatedFlag

Этот API сохранён для обратной совместимости: следует использовать настройку PyConfig.isolated; см. Python Initialization Configuration.

Запуск Python в изолированном режиме. В изолированном режиме sys.path не содержит ни каталог скрипта, ни каталог site-packages пользователя.

Устанавливается опцией -I.

Добавлено в версии 3.4.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_LegacyWindowsFSEncodingFlag

Этот API сохранён для обратной совместимости: следует использовать настройку PyPreConfig.legacy_windows_fs_encoding; см. Python Initialization Configuration.

Если флаг ненулевой, используется кодировка mbcs с обработчиком ошибок replace вместо кодировки UTF-8 с обработчиком ошибок surrogatepass для кодировки файловой системы и обработчика ошибок.

Устанавливается в 1, если переменная окружения PYTHONLEGACYWINDOWSFSENCODING установлена в непустую строку.

См. PEP 529 для подробностей.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_LegacyWindowsStdioFlag

Этот API сохранён для обратной совместимости: следует использовать настройку PyConfig.legacy_windows_stdio; см. Python Initialization Configuration.

Если флаг ненулевой, используется io.FileIO вместо io._WindowsConsoleIO для sys стандартных потоков.

Устанавливается в 1, если переменная окружения PYTHONLEGACYWINDOWSSTDIO установлена в непустую строку.

См. PEP 528 для подробностей.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_NoSiteFlag

Этот API сохранён для обратной совместимости: следует использовать настройку PyConfig.site_import; см. Python Initialization Configuration.

Отключает импорт модуля site и связанные с ним site-зависимые манипуляции с sys.path. Также отключает эти манипуляции, если site явно импортирован позже (для их выполнения следует вызвать site.main()).

Устанавливается опцией -S.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_NoUserSiteDirectory

Этот API сохранён для обратной совместимости: следует использовать настройку PyConfig.user_site_directory; см. Python Initialization Configuration.

Не добавляет user site-packages directory в sys.path.

Устанавливается параметрами -s и -I, а также переменной окружения PYTHONNOUSERSITE.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_OptimizeFlag

Этот API сохранён для обратной совместимости: следует использовать настройку PyConfig.optimization_level; см. Python Initialization Configuration.

Устанавливается опцией -O и переменной окружения PYTHONOPTIMIZE.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_QuietFlag

Этот API сохранён для обратной совместимости: вместо него следует использовать PyConfig.quiet. См. Python Initialization Configuration.

Не выводить сообщения об авторских правах и версии, даже в интерактивном режиме.

Устанавливается опцией -q.

Добавлено в версии 3.2.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_UnbufferedStdioFlag

Этот API сохранён для обратной совместимости: вместо него следует использовать PyConfig.buffered_stdio. См. Python Initialization Configuration.

Принудительно отключает буферизацию потоков stdout и stderr.

Устанавливается опцией -u и переменной окружения PYTHONUNBUFFERED.

Устарело с версии 3.12, будет удалено в версии 3.15.

int Py_VerboseFlag

Этот API сохранён для обратной совместимости: вместо него следует использовать PyConfig.verbose. См. Python Initialization Configuration.

Выводит сообщение каждый раз при инициализации модуля, указывая, откуда он загружается (имя файла или встроенный модуль). Если значение больше или равно 2, выводит сообщение для каждого файла, который проверяется при поиске модуля. Также предоставляет информацию об очистке модулей при завершении работы.

Устанавливается опцией -v и переменной окружения PYTHONVERBOSE.

Устарело с версии 3.12, будет удалено в версии 3.15.

Инициализация и завершение работы интерпретатораInitializing and finalizing the interpreter

void Py_Initialize()
Часть Stable ABI.

Инициализирует интерпретатор Python. В приложении, встраивающем Python, эту функцию следует вызывать до использования любых других функций Python/C API; исключения перечислены в разделе Before Python Initialization.

Эта функция инициализирует таблицу загруженных модулей (sys.modules) и создаёт фундаментальные модули builtins, __main__ и sys. Также она инициализирует путь поиска модулей (sys.path). Она не устанавливает sys.argv; для этого следует использовать API Python Initialization Configuration. При повторном вызове (без предварительного вызова Py_FinalizeEx()) функция ничего не делает. Возвращаемого значения нет; если инициализация завершается ошибкой, это фатальная ошибка.

Используйте Py_InitializeFromConfig() для настройки конфигурации инициализации Python.

Примечание

В Windows изменяет режим консоли с O_TEXT на O_BINARY, что также влияет на использование консоли не из Python через среду выполнения C.

void Py_InitializeEx(int initsigs)
Часть Stable ABI.

Эта функция работает как Py_Initialize(), если initsigs равно 1. Если initsigs равно 0, она пропускает начальную регистрацию обработчиков сигналов, что может быть полезно, когда CPython встраивается в более крупное приложение.

Используйте Py_InitializeFromConfig() для настройки конфигурации инициализации Python.

PyStatus Py_InitializeFromConfig(const PyConfig *config)

Инициализирует Python из конфигурации config, как описано в Initialization with PyConfig.

Подробнее о предварительной инициализации интерпретатора, заполнении структуры конфигурации времени выполнения и проверке возвращаемой структуры состояния см. в разделе Python Initialization Configuration.

int Py_IsInitialized()
Часть Stable ABI.

Возвращает true (ненулевое значение), если интерпретатор Python был инициализирован, и false (ноль), если нет. После вызова Py_FinalizeEx() функция возвращает false до тех пор, пока не будет снова вызвана Py_Initialize().

int Py_IsFinalizing()
Часть Stable ABI, начиная с версии 3.13.

Возвращает истину (не ноль), если главный интерпретатор Python завершает работу. В противном случае возвращает ложь (ноль).

Добавлено в версии 3.13.

int Py_FinalizeEx()
Часть Stable ABI начиная с версии 3.6.

Отменяет все инициализации, выполненные Py_Initialize() и последующее использование функций Python/C API, и уничтожает все под-интерпретаторы (см. Py_NewInterpreter() ниже), которые были созданы и ещё не уничтожены после последнего вызова Py_Initialize(). При повторном вызове (без предварительного вызова Py_Initialize()) эта операция ничего не делает.

Поскольку эта функция является обратной по отношению к Py_Initialize(), её следует вызывать в том же потоке с тем же активным интерпретатором. Это означает главный поток и главный интерпретатор. Никогда не следует вызывать её во время работы Py_RunMain().

Обычно возвращаемое значение – 0. Если во время завершения (сброса буферизованных данных) произошли ошибки, возвращается -1.

Обратите внимание: Python делает всё возможное, чтобы освободить всю память, выделенную интерпретатором Python. Поэтому любое расширение на C должно корректно очищать все ранее выделенные объекты PyObject перед их использованием в последующих вызовах Py_Initialize(). В противном случае это может привести к уязвимостям и некорректному поведению.

Эта функция предусмотрена по ряду причин. Встраивающее приложение может захотеть перезапустить Python без перезапуска самого приложения. Приложение, загрузившее интерпретатор Python из динамически загружаемой библиотеки (или DLL), может захотеть освободить всю память, выделенную Python, перед выгрузкой DLL. В процессе поиска утечек памяти в приложении разработчик может захотеть освободить всю память, выделенную Python, перед выходом из приложения.

Ошибки и предостережения: Уничтожение модулей и объектов в модулях выполняется в случайном порядке; это может привести к тому, что деструкторы (методы __del__()) будут завершаться ошибкой, если они зависят от других объектов (даже функций) или модулей. Динамически загружаемые модули расширений, загруженные Python, не выгружаются. Небольшие объёмы памяти, выделенные интерпретатором Python, могут не освобождаться (если вы нашли утечку, пожалуйста, сообщите о ней). Память, связанная циклическими ссылками между объектами, не освобождается. Интернированные строки будут освобождены независимо от их счётчика ссылок. Некоторая память, выделенная модулями расширений, может не освобождаться. Некоторые расширения могут работать неправильно, если их функция инициализации вызывается более одного раза; это может произойти, если приложение вызывает Py_Initialize() и Py_FinalizeEx() более одного раза. Py_FinalizeEx() не должна вызываться рекурсивно из самой себя. Поэтому её не должен вызывать любой код, который может быть выполнен в рамках процесса завершения работы интерпретатора, такой как обработчики atexit, финализаторы объектов или любой код, который может выполняться при сбросе файлов stdout и stderr.

Возбуждает событие аудита cpython._PySys_ClearAuditHooks без аргументов.

Добавлено в версии 3.6.

void Py_Finalize()
Часть Stable ABI.

Это обратно совместимая версия Py_FinalizeEx(), которая игнорирует возвращаемое значение.

int Py_BytesMain(int argc, char **argv)
Часть Stable ABI с версии 3.8.

Аналогично Py_Main(), но argv является массивом строк байтов, что позволяет вызывающему приложению делегировать этап декодирования текста среде выполнения CPython.

Добавлено в версии 3.8.

int Py_Main(int argc, wchar_t **argv)
Часть Stable ABI.

Главная программа стандартного интерпретатора, инкапсулирующая полный цикл инициализации/завершения, а также дополнительное поведение для реализации чтения параметров конфигурации из окружения и командной строки, и затем выполнения __main__ в соответствии с командной строкой.

Эта функция доступна для программ, которые хотят поддерживать полный интерфейс командной строки CPython, а не просто встраивать среду выполнения Python в более крупное приложение.

Параметры argc и argv аналогичны тем, которые передаются функции main() программы на C, за исключением того, что элементы argv сначала преобразуются в wchar_t с помощью Py_DecodeLocale(). Также важно отметить, что записи списка аргументов могут быть изменены так, чтобы указывать на строки, отличные от переданных (однако содержимое строк, на которые указывает список аргументов, не изменяется).

Возвращаемое значение – 2, если список аргументов не представляет собой допустимую командную строку Python, и в противном случае то же, что и Py_RunMain().

С точки зрения API конфигурации среды выполнения CPython, описанных в разделе runtime configuration (и без учёта обработки ошибок), Py_Main примерно эквивалентно:

PyConfig config;
PyConfig_InitPythonConfig(&config);
PyConfig_SetArgv(&config, argc, argv);
Py_InitializeFromConfig(&config);
PyConfig_Clear(&config);

Py_RunMain();

В обычном использовании встраивающее приложение будет вызывать эту функцию вместо прямого вызова Py_Initialize(), Py_InitializeEx() или Py_InitializeFromConfig(), и все настройки будут применены так, как описано в других разделах этой документации. Если эта функция вызывается после предыдущего вызова API инициализации среды выполнения, то то, какие именно настройки окружения и командной строки будут обновлены, зависит от версии (поскольку зависит от того, какие настройки корректно поддерживают изменение после того, как они были установлены один раз при первой инициализации среды выполнения).

int Py_RunMain(void)

Выполняет главный модуль в полностью сконфигурированной среде выполнения CPython.

Выполняет команду (PyConfig.run_command), скрипт (PyConfig.run_filename) или модуль (PyConfig.run_module), указанные в командной строке или в конфигурации. Если ни одно из этих значений не задано, запускает интерактивный промпт Python (REPL) с использованием глобального пространства имён модуля __main__.

Если PyConfig.inspect не задан (по умолчанию), возвращаемое значение будет 0, если интерпретатор завершается нормально (то есть без возбуждения исключения), кодом выхода необработанного SystemExit, или 1 для любого другого необработанного исключения.

Если PyConfig.inspect задан (например, когда используется опция -i), то вместо возврата при завершении интерпретатора выполнение продолжается в интерактивном промпте Python (REPL) с использованием глобального пространства имён модуля __main__. Если интерпретатор завершился с исключением, это исключение немедленно возбуждается в сессии REPL. Возвращаемое значение функции затем определяется способом завершения сессии REPL: 0, 1 или статусом SystemExit, как указано выше.

Эта функция всегда завершает работу интерпретатора Python перед возвратом.

См. Конфигурация Python для примера пользовательской сборки Python, которая всегда работает в изолированном режиме с использованием Py_RunMain().

int PyUnstable_AtExit(PyInterpreterState *interp, void (*func)(void*), void *data)
Это нестабильное API. Оно может меняться без предупреждения в минорных версиях.

Регистрирует колбэк atexit для целевого интерпретатора interp. Это аналогично Py_AtExit(), но принимает явный указатель на интерпретатор и данные для колбэка.

Должно существовать присоединённое состояние потока для interp.

Добавлено в версии 3.13.

Предостережения по поводу финализации среды выполненияCautions regarding runtime finalization

На позднем этапе завершения работы интерпретатора, после попытки дождаться завершения нефоновых потоков (хотя это может быть прервано KeyboardInterrupt) и выполнения функций atexit, среда выполнения помечается как финализируемая: Py_IsFinalizing() и sys.is_finalizing() возвращают true. На этот момент только поток финализации, который инициировал финализацию (обычно главный поток), может захватить GIL.

Если любой поток, кроме потока финализации, попытается присоединить состояние потока во время финализации, явно или неявно, поток переходит в состояние постоянной блокировки, в котором он остается до завершения программы. В большинстве случаев это безвредно, но может привести к взаимной блокировке, если на более позднем этапе финализации попытаться захватить блокировку, принадлежащую заблокированному потоку, или иным образом ожидать заблокированный поток.

Грубо? Да. Это предотвращает случайные сбои и/или неожиданно пропущенные C++ финализации выше по стеку вызовов, когда такие потоки принудительно завершались в CPython 3.13 и ранее. C API состояния потока CPython thread state никогда не имели ожиданий по сообщению об ошибках или их обработке в момент присоединения thread state, которые позволили бы корректно выйти из этой ситуации. Изменение этого потребовало бы новых стабильных C API и переписывания большей части C кода в экосистеме CPython для использования их с обработкой ошибок.

Общепроцессные параметрыProcess-wide parameters

void Py_SetProgramName(const wchar_t *name)
Часть Stable ABI.

Этот API сохранён для обратной совместимости: вместо него следует использовать PyConfig.program_name. См. Python Initialization Configuration.

Эту функцию следует вызвать до первого вызова Py_Initialize(), если она вообще вызывается. Она сообщает интерпретатору значение аргумента argv[0] функции main() программы (преобразованное в широкие символы). Это используется Py_GetPath() и некоторыми другими функциями ниже для поиска библиотек времени выполнения Python относительно исполняемого файла интерпретатора. Значение по умолчанию – 'python'. Аргумент должен указывать на строку широких символов, завершающуюся нулём, в статической памяти, содержимое которой не изменится за время выполнения программы. Никакой код в интерпретаторе Python не изменит содержимое этой памяти.

Используйте Py_DecodeLocale() для декодирования строки байтов, чтобы получить строку wchar_t*.

Устарело с версии 3.11, будет удалено в версии 3.15.

wchar_t *Py_GetProgramName()
Часть Stable ABI.

Возвращает имя программы, установленное с помощью PyConfig.program_name, или значение по умолчанию. Возвращаемая строка указывает на статическую память; вызывающий не должен изменять её значение.

Эту функцию не следует вызывать до Py_Initialize(), иначе она возвращает NULL.

Изменено в версии 3.10: Теперь возвращает NULL, если вызвана до Py_Initialize().

Устарело с версии 3.13, будет удалено в версии 3.15: Вместо этого используйте PyConfig_Get("executable") (sys.executable).

wchar_t *Py_GetPrefix()
Часть Stable ABI.

Возвращает префикс для установленных платформонезависимых файлов. Он определяется по ряду сложных правил из имени программы, установленного с помощью PyConfig.program_name, и некоторых переменных окружения; например, если имя программы – '/usr/local/bin/python', префикс – '/usr/local'. Возвращаемая строка указывает на статическую память; вызывающий не должен изменять её значение. Это соответствует переменной prefix в корневом Makefile и аргументу --prefix сценария configure во время сборки. Значение доступно в коде Python как sys.base_prefix. Полезен только в Unix. Смотрите также следующую функцию.

Эту функцию не следует вызывать до Py_Initialize(), иначе она возвращает NULL.

Изменено в версии 3.10: Теперь возвращает NULL, если вызвана до Py_Initialize().

Устарело с версии 3.13, будет удалено в версии 3.15: Вместо этого используйте PyConfig_Get("base_prefix") (sys.base_prefix). Используйте PyConfig_Get("prefix") (sys.prefix), если необходимо обрабатывать виртуальные окружения.

wchar_t *Py_GetExecPrefix()
Часть Stable ABI.

Возвращает exec-prefix для установленных зависящих от платформы файлов. Значение вычисляется по ряду сложных правил на основе имени программы, заданного с помощью PyConfig.program_name, и некоторых переменных окружения; например, если имя программы – '/usr/local/bin/python', то exec-prefix будет '/usr/local'. Возвращаемая строка указывает на статическую память; вызывающий код не должен изменять её значение. Это соответствует переменной exec_prefix в Makefile и аргументу --exec-prefix скрипта configure на этапе сборки. Значение доступно в коде Python как sys.base_exec_prefix. Это имеет смысл только в Unix.

Контекст: exec-prefix отличается от префикса (prefix), когда зависящие от платформы файлы (например, исполняемые файлы и динамические библиотеки) устанавливаются в другое дерево каталогов. В типичной установке платформенно-зависимые файлы могут быть установлены в поддерево /usr/local/plat, а платформенно-независимые – в /usr/local.

Вообще говоря, платформа – это комбинация семейств аппаратного и программного обеспечения; например, машины Sparc под управлением ОС Solaris 2.x считаются одной платформой, машины Intel под Solaris 2.x – другой, а машины Intel под Linux – третьей. Разные основные версии одной и той же ОС обычно также образуют разные платформы. Операционные системы, отличные от Unix, – это отдельная история; стратегии установки на этих системах настолько различаются, что префикс и exec-prefix не имеют смысла и устанавливаются в пустую строку. Обратите внимание: скомпилированные файлы байт-кода Python не зависят от платформы (но не от версии Python, под которой они были скомпилированы!).

Системные администраторы знают, как настроить программы mount или automount для совместного использования /usr/local между платформами, при этом /usr/local/plat будет отдельной файловой системой для каждой платформы.

Эту функцию не следует вызывать до Py_Initialize(), иначе она возвращает NULL.

Изменено в версии 3.10: Теперь возвращает NULL, если вызвана до Py_Initialize().

Устарело с версии 3.13, будет удалено в версии 3.15: Вместо этого используйте PyConfig_Get("base_exec_prefix") (sys.base_exec_prefix). Используйте PyConfig_Get("exec_prefix") (sys.exec_prefix), если требуется поддержка виртуальных окружений.

wchar_t *Py_GetProgramFullPath()
Часть Stable ABI.

Возвращает полное имя программы исполняемого файла Python; оно вычисляется как побочный эффект при получении пути поиска модулей по умолчанию из имени программы (заданного с помощью PyConfig.program_name). Возвращаемая строка указывает на статическую память; вызывающий код не должен изменять её значение. Значение доступно в коде Python как sys.executable.

Эту функцию не следует вызывать до Py_Initialize(), иначе она возвращает NULL.

Изменено в версии 3.10: Теперь возвращает NULL, если вызвана до Py_Initialize().

Устарело с версии 3.13, будет удалено в версии 3.15: Вместо этого используйте PyConfig_Get("executable") (sys.executable).

wchar_t *Py_GetPath()
Часть Stable ABI.

Возвращает путь поиска модулей по умолчанию; он вычисляется из имени программы (заданного с помощью PyConfig.program_name) и некоторых переменных окружения. Возвращаемая строка состоит из последовательности имён каталогов, разделённых символом-разделителем, зависящим от платформы. Символ-разделитель – ':' в Unix и macOS, ';' в Windows. Возвращаемая строка указывает на статическую память; вызывающий код не должен изменять её значение. Список sys.path инициализируется этим значением при запуске интерпретатора; позже его можно (и обычно так и делается) изменить для настройки пути поиска модулей.

Эту функцию не следует вызывать до Py_Initialize(), иначе она возвращает NULL.

Изменено в версии 3.10: Теперь возвращает NULL, если вызвана до Py_Initialize().

Устарело с версии 3.13, будет удалено в версии 3.15: Вместо этого используйте PyConfig_Get("module_search_paths") (sys.path).

const char *Py_GetVersion()
Часть Stable ABI.

Возвращает версию данного интерпретатора Python. Это строка, которая выглядит примерно так:

"3.0a5+ (py3k:63103M, May 12 2008, 00:53:55) \n[GCC 4.2.3]"

Первое слово (до первого пробела) – это текущая версия Python; первые символы – это мажорная и минорная версии, разделённые точкой. Возвращаемая строка указывает на статическую память; вызывающий код не должен изменять её значение. Это значение доступно в коде Python как sys.version.

Смотрите также константу Py_Version.

const char *Py_GetPlatform()
Часть Stable ABI.

Возвращает идентификатор платформы для текущей платформы. В Unix он формируется из «официального» имени операционной системы, преобразованного в нижний регистр, за которым следует номер основной ревизии; например, для Solaris 2.x, также известного как SunOS 5.x, значение – 'sunos5'. В macOS – 'darwin'. В Windows – 'win'. Возвращаемая строка указывает на статическую память; вызывающий код не должен изменять её значение. Значение доступно в коде Python как sys.platform.

const char *Py_GetCopyright()
Часть Stable ABI.

Возвращает официальную строку авторских прав для текущей версии Python, например

'Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam'

Возвращаемая строка указывает на статическую память; вызывающий код не должен изменять её значение. Значение доступно в коде Python как sys.copyright.

const char *Py_GetCompiler()
Часть Stable ABI.

Возвращает указание компилятора, использованного для сборки текущей версии Python, в квадратных скобках, например:

"[GCC 2.7.2.2]"

Возвращаемая строка указывает на статическую память; вызывающий код не должен изменять её значение. Значение доступно коду Python как часть переменной sys.version.

const char *Py_GetBuildInfo()
Часть Stable ABI.

Возвращает информацию о порядковом номере и дате и времени сборки текущего экземпляра интерпретатора Python, например

"#67, Aug  1 1997, 22:34:28"

Возвращаемая строка указывает на статическую память; вызывающий код не должен изменять её значение. Значение доступно коду Python как часть переменной sys.version.

void PySys_SetArgvEx(int argc, wchar_t **argv, int updatepath)
Часть Stable ABI.

Этот API сохранён для обратной совместимости: вместо него следует использовать PyConfig.argv, PyConfig.parse_argv и PyConfig.safe_path. См. Python Initialization Configuration.

Устанавливает sys.argv на основе argc и argv. Эти параметры похожи на передаваемые функции main() программы, с тем отличием, что первый элемент должен указывать на исполняемый файл сценария, а не на исполняемый файл, в котором работает интерпретатор Python. Если запускаемый сценарий отсутствует, первый элемент в argv может быть пустой строкой. Если этой функции не удаётся инициализировать sys.argv, фатальная ситуация сигнализируется с помощью Py_FatalError().

Если updatepath равен нулю, на этом работа функции заканчивается. Если updatepath не равен нулю, функция также изменяет sys.path по следующему алгоритму:

  • Если в argv[0] передано имя существующего сценария, то абсолютный путь к каталогу, в котором находится сценарий, добавляется в начало sys.path.

  • В противном случае (то есть если argc равен 0 или argv[0] не указывает на существующее имя файла), пустая строка добавляется в начало sys.path, что эквивалентно добавлению текущего рабочего каталога (".").

Используйте Py_DecodeLocale() для декодирования строки байтов, чтобы получить строку wchar_t*.

См. также члены PyConfig.orig_argv и PyConfig.argv структуры Python Initialization Configuration.

Примечание

Приложениям, встраивающим интерпретатор Python не для выполнения одного сценария, рекомендуется передавать 0 в качестве updatepath и при желании обновлять sys.path самостоятельно. См. CVE 2008-5983.

В версиях до 3.1.3 того же эффекта можно достичь, вручную удалив первый элемент sys.path после вызова PySys_SetArgv(), например используя:

PyRun_SimpleString("import sys; sys.path.pop(0)\n");

Добавлено в версии 3.1.3.

Устарело с версии 3.11, будет удалено в версии 3.15.

void PySys_SetArgv(int argc, wchar_t **argv)
Часть Stable ABI.

Этот API сохранён для обратной совместимости: вместо него следует использовать PyConfig.argv и PyConfig.parse_argv. См. Python Initialization Configuration.

Эта функция работает как PySys_SetArgvEx() с updatepath, установленным в 1, если только интерпретатор python не был запущен с -I.

Используйте Py_DecodeLocale() для декодирования строки байтов, чтобы получить строку wchar_t*.

См. также члены PyConfig.orig_argv и PyConfig.argv структуры Python Initialization Configuration.

Изменено в версии 3.4: Значение updatepath зависит от -I.

Устарело с версии 3.11, будет удалено в версии 3.15.

void Py_SetPythonHome(const wchar_t *home)
Часть Stable ABI.

Этот API сохранён для обратной совместимости: вместо него следует использовать PyConfig.home. См. Python Initialization Configuration.

Устанавливает домашний каталог по умолчанию, то есть расположение стандартных библиотек Python. См. PYTHONHOME для пояснения значения строки аргумента.

Аргумент должен указывать на строку символов, завершающуюся нулём, в статической памяти, содержимое которой не будет изменяться в течение всего времени выполнения программы. Никакой код в интерпретаторе Python не будет менять содержимое этой памяти.

Используйте Py_DecodeLocale() для декодирования строки байтов, чтобы получить строку wchar_t*.

Устарело с версии 3.11, будет удалено в версии 3.15.

wchar_t *Py_GetPythonHome()
Часть Stable ABI.

Возвращает «домашний» каталог по умолчанию, то есть значение, установленное с помощью PyConfig.home, или значение переменной окружения PYTHONHOME, если она задана.

Эту функцию не следует вызывать до Py_Initialize(), иначе она возвращает NULL.

Изменено в версии 3.10: Теперь возвращает NULL, если вызвано до Py_Initialize().

Устарело с версии 3.13, будет удалено в версии 3.15: Используйте PyConfig_Get("home") или PYTHONHOME переменную окружения вместо этого.