Содержание страницы
Инициализация и финализация интерпретатора¶Interpreter initialization and finalization
Подробнее о том, как настроить интерпретатор до инициализации, см. в Python Initialization Configuration.
До инициализации Python¶Before Python initialization
В приложении, встраивающем Python, функция Py_Initialize() должна вызываться до использования любых других функций Python/C API; за исключением нескольких функций и глобальных переменных конфигурации.
Следующие функции можно безопасно вызывать до инициализации Python:
Функции, инициализирующие интерпретатор:
функции предварительной инициализации среды выполнения, описанные в Python Initialization Configuration
Функции конфигурации:
PyInitFrozenExtensions()функции конфигурации, описанные в Python Initialization Configuration
Информационные функции:
Утилиты:
функции сообщения о состоянии и утилиты, описанные в Python Initialization Configuration
Распределители памяти:
Синхронизация:
Примечание
Несмотря на внешнее сходство с некоторыми из перечисленных выше функций, следующие функции не следует вызывать до инициализации интерпретатора: 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 для подробностей.
Доступность: Windows.
Устарело с версии 3.12, удалено в версии 3.15.
-
int Py_LegacyWindowsStdioFlag¶
Этот API сохранён для обратной совместимости: следует использовать настройку
PyConfig.legacy_windows_stdio; см. Python Initialization Configuration.Если флаг ненулевой, используется
io.FileIOвместоio._WindowsConsoleIOдляsysстандартных потоков.Устанавливается в
1, если переменная окруженияPYTHONLEGACYWINDOWSSTDIOустановлена в непустую строку.См. PEP 528 для подробностей.
Доступность: Windows.
Устарело с версии 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().Изменено в версии 3.15: Эта функция больше не возвращает true до полного завершения инициализации, включая импорт модуля
site. Ранее она могла вернуть true, пока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 interpreter finalization
На поздней стадии завершения работы интерпретатора, после попытки дождаться завершения
потоков, не являющихся демонами (хотя это может быть прервано
KeyboardInterrupt) и выполнения функций atexit, среда выполнения
помечается как завершающаяся, что означает, что Py_IsFinalizing() и
sys.is_finalizing() возвращают истину. В этот момент только поток завершения
(поток, который инициировал завершение; обычно это главный поток)
может присоединить состояние потока.
Другие потоки, которые пытаются присоединиться во время завершения, явно
(например, через PyThreadState_Ensure() или Py_END_ALLOW_THREADS)
или неявно (например, между инструкциями байт-кода), переходят в
постоянно заблокированное состояние. Обычно это безвредно, но может
привести к взаимоблокировкам. Например, поток может быть постоянно заблокирован, удерживая
блокировку, что означает, что поток завершения никогда не сможет получить эту
блокировку.
До CPython 3.13 поток завершался, а не зависал,
что приводило к другим проблемам (см. предупреждение в
PyThread_exit_thread()).
Грубо? Да. Начиная с Python 3.15, появилось несколько C API, которые позволяют избежать этих проблем, временно предотвращая финализацию:
См. также
PEP 788 описывает устройство, мотивацию и обоснование этих API.
-
type PyInterpreterGuard¶
- Часть Stable ABI (как непрозрачная структура) начиная с версии 3.15.
Непрозрачная структура защиты интерпретатора.
Удерживая защиту интерпретатора, вызывающая сторона может гарантировать, что интерпретатор не завершит финализацию, пока защита не будет закрыта (через
PyInterpreterGuard_Close()).Когда защита удерживается, поток, пытающийся завершить финализацию интерпретатора, будет заблокирован до закрытия защиты, прежде чем начнётся финализация. После начала финализации потоки уже никогда не смогут получить защиту для этого интерпретатора. Это означает, что если забыть закрыть защиту интерпретатора, процесс навсегда зависнет во время финализации!
Удержание защиты для интерпретатора аналогично удержанию сильной ссылки на объект Python, за исключением того, что финализация не происходит автоматически после освобождения всех защит: требуется явный вызов
Py_EndInterpreter().Добавлено в версии 3.15.
-
PyInterpreterGuard *PyInterpreterGuard_FromCurrent(void)¶
- Часть Stable ABI начиная с версии 3.15.
Создаёт защиту финализации для текущего интерпретатора. Это предотвратит финализацию до тех пор, пока защита не будет закрыта.
Например:
// Временно заблокировать финализацию. PyInterpreterGuard *guard = PyInterpreterGuard_FromCurrent(); if (guard == NULL) { // Финализация уже началась или не хватает памяти. return NULL; } Py_BEGIN_ALLOW_THREADS; // Выполнить критическую обработку здесь. Например, можно безопасно захватить // блокировки, которые могут быть захвачены потоком финализации. Py_END_ALLOW_THREADS; // Теперь, когда критическая обработка завершена, интерпретатору // разрешено снова выполнять финализацию. PyInterpreterGuard_Close(guard);
В случае успеха эта функция возвращает защиту для текущего интерпретатора; в случае неудачи возвращает
NULLс установленным исключением.Эта функция завершится неудачей только в том случае, если текущий интерпретатор уже начал финализацию или если в процессе закончилась память.
Указатель защиты, возвращаемый этой функцией, должен быть в итоге закрыт с помощью
PyInterpreterGuard_Close(); в противном случае процесс Python будет бесконечно зависать.Вызывающий код должен удерживать присоединённое состояние потока.
Добавлено в версии 3.15.
-
PyInterpreterGuard *PyInterpreterGuard_FromView(PyInterpreterView *view)¶
- Часть Stable ABI начиная с версии 3.15.
Создаёт защиту финализации для интерпретатора через представление.
В случае успеха эта функция возвращает защиту для интерпретатора, представленного view. Представление остаётся действительным после вызова этой функции. Защита должна быть в итоге закрыта с помощью
PyInterpreterGuard_Close().Если интерпретатор больше не существует, уже завершает финализацию или не хватает памяти, то эта функция возвращает
NULLбез установки исключения.Вызывающий код не должен удерживать присоединённое состояние потока.
Добавлено в версии 3.15.
-
void PyInterpreterGuard_Close(PyInterpreterGuard *guard)¶
- Часть Stable ABI начиная с версии 3.15.
Закрывает защиту интерпретатора, позволяя интерпретатору начать финализацию, если не осталось других защит. Если защита интерпретатора никогда не будет закрыта, интерпретатор будет бесконечно ждать при попытке войти в финализацию!
После закрытия защиты интерпретатора её нельзя использовать в
PyThreadState_Ensure(). В противном случае поведение будет неопределённым.Эта функция не может завершиться с ошибкой, и вызывающий код не должен удерживать присоединённое состояние потока.
Добавлено в версии 3.15.
Представления интерпретатора¶Interpreter views
В некоторых случаях может потребоваться доступ к интерпретатору, который мог быть удалён. Это можно сделать с помощью представлений интерпретатора.
-
type PyInterpreterView¶
- Часть Stable ABI (как непрозрачная структура) начиная с версии 3.15.
Непрозрачное представление интерпретатора.
Это потокобезопасный способ доступа к интерпретатору, который может находиться в процессе финализации или уже уничтожен.
Добавлено в версии 3.15.
-
PyInterpreterView *PyInterpreterView_FromCurrent(void)¶
- Часть Stable ABI начиная с версии 3.15.
Создаёт представление текущего интерпретатора.
Эта функция обычно предназначена для использования вместе с
PyInterpreterGuard_FromView()илиPyThreadState_EnsureFromView().В случае успеха функция возвращает представление текущего интерпретатора; в случае неудачи она возвращает
NULLс установленным исключением.Вызывающий код должен удерживать присоединённое состояние потока.
Добавлено в версии 3.15.
-
void PyInterpreterView_Close(PyInterpreterView *view)¶
- Часть Stable ABI начиная с версии 3.15.
Закрывает представление интерпретатора.
Если представление интерпретатора никогда не закрывается, память представления никогда не освободится, но других последствий нет. (В отличие от этого, забыв закрыть guard, можно бесконечно повесить главный поток при финализации.)
Эта функция не может завершиться с ошибкой, и вызывающий код не должен удерживать присоединённое состояние потока.
Добавлено в версии 3.15.
-
PyInterpreterView *PyInterpreterView_FromMain(void)¶
- Часть Stable ABI начиная с версии 3.15.
Создаёт представление для главного интерпретатора (первого и используемого по умолчанию интерпретатора в процессе Python; см.
PyInterpreterState_Main()).В случае успеха функция возвращает представление главного интерпретатора; в случае неудачи она возвращает
NULLбез установленного исключения. Неудача означает, что в процессе не хватило памяти.Используйте эту функцию, когда вызывающий код не может предоставить указатель на интерпретатор или представление, например, когда нативная библиотека потоков не предоставляет параметр
void *arg, который мог бы нестиPyInterpreterGuardилиPyInterpreterView. В коде, поддерживающем подинтерпретаторы, предпочтительнее использоватьPyInterpreterView_FromCurrent(), чтобы guard отслеживал вызывающий интерпретатор, а не главный.Вызывающий код не должен удерживать присоединённое состояние потока.
Добавлено в версии 3.15.
Общепроцессные параметры¶Process-wide parameters
-
void Py_SetProgramName(const wchar_t *name)¶
- Часть Stable ABI.
Этот API сохранён для обратной совместимости: вместо него следует использовать
PyConfig.program_name. См. Python Initialization Configuration.Эту функцию следует вызывать до первого вызова
Py_Initialize(), если она вообще вызывается. Она сообщает интерпретатору значение аргументаargv[0]функцииmain()программы (преобразованное в широкие символы). Это используется некоторыми другими функциями ниже для поиска библиотек времени выполнения Python относительно исполняемого файла интерпретатора. Значение по умолчанию –'python'. Аргумент должен указывать на строку широких символов, завершающуюся нулём, в статической памяти, содержимое которой не изменится во время выполнения программы. Никакой код в интерпретаторе Python не изменит содержимое этой памяти.Используйте
Py_DecodeLocale()для декодирования строки байтов, чтобы получить строку wchar_t*.Устарело с версии 3.11, удалено в версии 3.15.
-
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.