Инициализация и завершение работы интерпретатора
Подробную информацию о настройке интерпретатора перед инициализацией см. в разделе Настройка инициализации Python.
До инициализации Python
В приложении, встраивающем Python, перед использованием любых других функций Python/C API необходимо вызвать функцию Py_Initialize(), за исключением нескольких функций и глобальных переменных конфигурации.
До инициализации Python можно безопасно вызывать следующие функции:
-
Функции инициализации интерпретатора:
Py_Initialize()Py_InitializeEx()Py_InitializeFromConfig()Py_BytesMain()Py_Main()- функции предварительной инициализации среды выполнения, описанные в разделе Настройка инициализации Python
-
Функции настройки:
PyImport_AppendInittab()PyImport_ExtendInittab()PyInitFrozenExtensions()PyMem_SetAllocator()PyMem_SetupDebugHooks()PyObject_SetArenaAllocator()Py_SetProgramName()Py_SetPythonHome()- функции настройки, описанные в разделе Настройка инициализации Python
-
Информационные функции:
-
Вспомогательные функции:
Py_DecodeLocale()- функции для получения сведений о состоянии и вспомогательные функции, описанные в разделе Настройка инициализации Python
-
Распределители памяти:
-
Синхронизация:
Примечание
Несмотря на кажущееся сходство с некоторыми перечисленными выше функциями, следующие функции не следует вызывать до инициализации интерпретатора: Py_EncodeLocale(), PyEval_InitThreads() и Py_RunMain().
Глобальные переменные конфигурации
В Python есть переменные для глобальной конфигурации, управляющие различными возможностями и параметрами. По умолчанию эти флаги управляются параметрами командной строки.
Если флаг устанавливается параметром, его значение равно количеству раз, которое был указан этот параметр. Например, -b устанавливает для Py_BytesWarningFlag значение 1, а -bb устанавливает для Py_BytesWarningFlag значение 2.
-
int Py_BytesWarningFlag -
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.bytes_warning; см. раздел Настройка инициализации Python.Выдавать предупреждение при сравнении
bytesилиbytearrayсstrилиbytesсint. Если значение больше или равно2, выдавать ошибку.Устанавливается параметром
-b.Устарело с версии 3.12, будет удалено в версии 3.15.
-
int Py_DebugFlag -
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.parser_debug; см. раздел Настройка инициализации Python.Включает вывод отладочной информации парсера (только для опытных пользователей; зависит от параметров компиляции).
Устанавливается параметром
-dи переменной окруженияPYTHONDEBUG.Устарело с версии 3.12, будет удалено в версии 3.15.
-
int Py_DontWriteBytecodeFlag -
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.write_bytecode; см. раздел Настройка инициализации Python.Если значение ненулевое, Python не будет пытаться записывать файлы
.pycпри импорте исходных модулей.Устанавливается параметром
-Bи переменной окруженияPYTHONDONTWRITEBYTECODE.Устарело с версии 3.12, будет удалено в версии 3.15.
-
int Py_FrozenFlag -
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.pathconfig_warnings; см. раздел Настройка инициализации Python.Закрытый флаг, используемый программами
_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.Игнорировать все переменные окружения
PYTHON*, напримерPYTHONPATHиPYTHONHOME, если они заданы.Устанавливается параметрами
-Eи-I.Устарело с версии 3.12, будет удалено в версии 3.15.
-
int Py_InspectFlag -
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.inspect; см. раздел Настройка инициализации Python.Если скрипт передан в качестве первого аргумента или используется параметр
-c, после выполнения скрипта или команды перейти в интерактивный режим, даже еслиsys.stdinне выглядит как терминал.Устанавливается параметром
-iи переменной окруженияPYTHONINSPECT.Устарело с версии 3.12, будет удалено в версии 3.15.
-
int Py_InteractiveFlag -
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.interactive; см. раздел Настройка инициализации Python.Устанавливается параметром
-i.Устарело с версии 3.12, будет удалено в версии 3.15.
-
int Py_IsolatedFlag -
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.isolated; см. раздел Настройка инициализации Python.Запустить Python в изолированном режиме. В изолированном режиме
sys.pathне содержит ни каталог скрипта, ни каталог пользовательских site-packages.Устанавливается параметром
-I.Добавлено в версии 3.4.
Устарело с версии 3.12, будет удалено в версии 3.15.
-
int Py_LegacyWindowsFSEncodingFlag -
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyPreConfig.legacy_windows_fs_encoding; см. раздел Настройка инициализации Python.Если флаг ненулевой, для кодировки файловой системы и обработчика ошибок используется кодировка
mbcsс обработчиком ошибокreplaceвместо кодировки UTF-8 с обработчиком ошибокsurrogatepass.Устанавливается в значение
1, если переменная окруженияPYTHONLEGACYWINDOWSFSENCODINGзадана непустой строкой.Дополнительную информацию см. в документе PEP 529.
Доступность: Windows.
Устарело с версии 3.12, будет удалено в версии 3.15.
-
int Py_LegacyWindowsStdioFlag -
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.legacy_windows_stdio; см. раздел Настройка инициализации Python.Если флаг ненулевой, для стандартных потоков
sysиспользуетсяio.FileIOвместоio._WindowsConsoleIO.Устанавливается в значение
1, если переменная окруженияPYTHONLEGACYWINDOWSSTDIOзадана непустой строкой.Дополнительную информацию см. в документе PEP 528.
Доступность: Windows.
Устарело с версии 3.12, будет удалено в версии 3.15.
-
int Py_NoSiteFlag -
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.site_import; см. раздел Настройка инициализации Python.Отключить импорт модуля
siteи выполняемые им манипуляции сsys.path, зависящие от сайта. Эти манипуляции также отключаются, если позднееsiteбудет импортирован явно (вызовитеsite.main(), если хотите их выполнить).Устанавливается параметром
-S.Устарело с версии 3.12, будет удалено в версии 3.15.
-
int Py_NoUserSiteDirectory -
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.user_site_directory; см. раздел Настройка инициализации Python.Не добавлять
user site-packages directoryвsys.path.Устанавливается параметрами
-sи-I, а также переменной окруженияPYTHONNOUSERSITE.Устарело с версии 3.12, будет удалено в версии 3.15.
-
int Py_OptimizeFlag -
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.optimization_level; см. раздел Настройка инициализации Python.Устанавливается параметром
-Oи переменной окруженияPYTHONOPTIMIZE.Устарело с версии 3.12, будет удалено в версии 3.15.
-
int Py_QuietFlag -
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.quiet; см. раздел Настройка инициализации Python.Не отображать сообщения об авторских правах и версии, даже в интерактивном режиме.
Устанавливается параметром
-q.Добавлено в версии 3.2.
Устарело с версии 3.12, будет удалено в версии 3.15.
-
int Py_UnbufferedStdioFlag -
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.buffered_stdio; см. раздел Настройка инициализации Python.Принудительно отключить буферизацию потоков stdout и stderr.
Устанавливается параметром
-uи переменной окруженияPYTHONUNBUFFERED.Устарело с версии 3.12, будет удалено в версии 3.15.
-
int Py_VerboseFlag -
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.verbose; см. раздел Настройка инициализации Python.Печатать сообщение при каждой инициализации модуля, указывая место (имя файла или встроенный модуль), из которого он загружен. Если значение больше или равно
2, печатать сообщение для каждого файла, проверяемого при поиске модуля. Кроме того, выводить сведения об очистке модулей при завершении работы.Устанавливается параметром
-vи переменной окруженияPYTHONVERBOSE.Устарело с версии 3.12, будет удалено в версии 3.15.
Инициализация и завершение работы интерпретатора
-
void Py_Initialize() -
Часть стабильного ABI.
Инициализирует интерпретатор Python. В приложении, встраивающем Python, эту функцию следует вызывать до использования любых других функций Python/C API; исключения описаны в разделе До инициализации Python.
Эта функция инициализирует таблицу загруженных модулей (
sys.modules) и создает фундаментальные модулиbuiltins,__main__иsys. Она также инициализирует путь поиска модулей (sys.path). Функция не устанавливаетsys.argv; для этого используйте API конфигурации инициализации Python. При повторном вызове (без предварительного вызоваPy_FinalizeEx()) она ничего не делает. Возвращаемого значения нет; сбой инициализации считается фатальной ошибкой.Для настройки конфигурации инициализации Python используйте
Py_InitializeFromConfig().Примечание
В Windows функция изменяет режим консоли с
O_TEXTнаO_BINARY, что также влияет на использование консоли не из Python с помощью среды выполнения C.
-
void Py_InitializeEx(int initsigs) -
Часть стабильного ABI.
Эта функция работает так же, как
Py_Initialize(), если initsigs имеет значение1. Если initsigs имеет значение0, функция пропускает регистрацию обработчиков сигналов при инициализации. Это может быть полезно, если CPython встраивается в более крупное приложение.Для настройки конфигурации инициализации Python используйте
Py_InitializeFromConfig().
-
PyStatus Py_InitializeFromConfig(const PyConfig *config) -
Инициализирует Python на основе конфигурации config, как описано в разделе Инициализация с помощью PyConfig.
Подробные сведения о предварительной инициализации интерпретатора, заполнении структуры конфигурации среды выполнения и запросе возвращаемой структуры состояния см. в разделе Конфигурация инициализации Python.
-
int Py_IsInitialized() -
Часть стабильного ABI.
Возвращает true (ненулевое значение), если интерпретатор Python инициализирован, и false (ноль) в противном случае. После вызова
Py_FinalizeEx()функция возвращает false, пока снова не будет вызванаPy_Initialize().
-
int Py_IsFinalizing() -
Часть стабильного ABI начиная с версии 3.13.
Возвращает true (ненулевое значение), если основной интерпретатор Python завершает работу. В противном случае возвращает false (ноль).
Добавлено в версии 3.13.
-
int Py_FinalizeEx() -
Часть стабильного 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() -
Часть стабильного ABI.
Это обратно совместимая версия
Py_FinalizeEx(), которая игнорирует возвращаемое значение.
-
int Py_BytesMain(int argc, char **argv) -
Часть стабильного ABI начиная с версии 3.8.
Аналогична
Py_Main(), но argv представляет собой массив байтовых строк, что позволяет вызывающему приложению передать декодирование текста среде выполнения CPython.Добавлено в версии 3.8.
-
int Py_Main(int argc, wchar_t **argv) -
Часть стабильного ABI.
Главная программа стандартного интерпретатора, охватывающая полный цикл инициализации и завершения работы, а также дополнительные действия для чтения параметров конфигурации из среды и командной строки и последующего выполнения
__main__в соответствии с разделом Командная строка.Эта функция предоставляется программам, которым требуется поддержка полного интерфейса командной строки CPython, а не только встраивание среды выполнения Python в более крупное приложение.
Параметры argc и argv аналогичны параметрам, передаваемым функции
main()программы на C, за исключением того, что элементы argv сначала преобразуются вwchar_tс помощьюPy_DecodeLocale(). Важно также учитывать, что элементы списка аргументов могут быть изменены так, чтобы указывать на другие строки (однако содержимое строк, на которые указывает список аргументов, не изменяется).Возвращаемое значение —
2, если список аргументов не представляет допустимую командную строку Python; в противном случае оно совпадает с возвращаемым значениемPy_RunMain().С точки зрения API конфигурации среды выполнения CPython, описанных в разделе конфигурации среды выполнения (без учета обработки ошибок),
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, который всегда запускается в изолированном режиме с помощью
Py_RunMain(), см. в разделе Конфигурация Python.
-
int PyUnstable_AtExit(PyInterpreterState *interp, void (*func)(void*), void *data) -
Это нестабильный API. Он может измениться без предупреждения в выпусках с изменением младшего номера версии.
Регистрирует функцию обратного вызова
atexitдля целевого интерпретатора interp. Функция аналогичнаPy_AtExit(), но принимает явный указатель на интерпретатор и указатель на данные для функции обратного вызова.Для interp должно существовать присоединенное состояние потока.
Добавлено в версии 3.13.
Предостережения при завершении работы среды выполнения
На позднем этапе завершения работы интерпретатора, после попытки дождаться завершения потоков, не являющихся демонами (хотя ожидание может быть прервано исключением KeyboardInterrupt) и выполнения функций atexit, среда выполнения помечается как завершающая работу: Py_IsFinalizing() и sys.is_finalizing() возвращают true. На этом этапе получать GIL может только поток завершения, инициировавший завершение работы (обычно главный поток).
Если во время завершения работы какой-либо поток, кроме потока завершения, пытается явно или неявно присоединить состояние потока, он переходит в постоянно заблокированное состояние, в котором остается до завершения программы. В большинстве случаев это безвредно, однако может привести к взаимной блокировке, если на более позднем этапе завершения работы предпринимается попытка получить блокировку, принадлежащую заблокированному потоку, или иным образом ожидать этот поток.
Жестко? Да. Это предотвращает случайные сбои и/или неожиданное пропускание финализаторов C++ выше по стеку вызовов, которое происходило, когда такие потоки принудительно завершались здесь в CPython 3.13 и более ранних версиях. В C API состояния потока среды выполнения CPython никогда не предусматривались обработка ошибок и сообщения об ошибках при присоединении состояния потока, которые позволили бы корректно выйти из этой ситуации. Для этого потребовались бы новые стабильные C API и переписывание большей части кода на C в экосистеме CPython с использованием этих API и обработкой ошибок.
Параметры процесса
-
void Py_SetProgramName(const wchar_t *name) -
Часть стабильного ABI.
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.program_name, см. раздел Конфигурация инициализации Python.Эту функцию следует вызывать до первого вызова
Py_Initialize(), если она вообще вызывается. Она сообщает интерпретатору значение аргументаargv[0]функцииmain()программы (преобразованное в широкие символы). Это значение используется функциейPy_GetPath()и некоторыми другими функциями ниже для поиска библиотек времени выполнения Python относительно исполняемого файла интерпретатора. Значение по умолчанию —'python'. Аргумент должен указывать на завершающуюся нулём строку широких символов в статической памяти, содержимое которой не будет меняться в течение выполнения программы. Код интерпретатора Python не изменяет содержимое этой области памяти.Используйте
Py_DecodeLocale(), чтобы декодировать строку байтов и получить строку типа wchar_t*.Устарела в версии 3.11, будет удалена в версии 3.15.
-
wchar_t *Py_GetProgramName() -
Часть стабильного 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() -
Часть стабильного 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() -
Часть стабильного ABI.
Возвращает префикс исполняемых файлов для установленных платформозависимых файлов. Он определяется по ряду сложных правил на основе имени программы, заданного с помощью
PyConfig.program_name, и некоторых переменных окружения; например, если имя программы —'/usr/local/bin/python', префикс исполняемых файлов —'/usr/local'. Возвращённая строка указывает на статическую область памяти; вызывающий код не должен изменять её. Этому значению соответствует переменная exec_prefix в корневом файлеMakefileи аргумент--exec-prefixскрипта configure на этапе сборки. В коде Python это значение доступно какsys.base_exec_prefix. Оно полезно только в Unix.Справка: префикс исполняемых файлов отличается от префикса, если платформозависимые файлы (например, исполняемые файлы и разделяемые библиотеки) устанавливаются в другое дерево каталогов. При типичной установке платформозависимые файлы могут устанавливаться в подкаталог
/usr/local/plat, а платформонезависимые — в/usr/local.В общем случае платформа представляет собой сочетание аппаратного и программного обеспечения, например, компьютеры Sparc под управлением операционной системы Solaris 2.x считаются одной платформой, компьютеры Intel под управлением Solaris 2.x — другой, а компьютеры Intel под управлением Linux — ещё одной. Разные основные версии одной операционной системы обычно также образуют разные платформы. С операционными системами, отличными от Unix, дело обстоит иначе: стратегии установки в этих системах настолько различаются, что префикс и префикс исполняемых файлов теряют смысл и задаются пустыми строками. Обратите внимание, что скомпилированные файлы байт-кода 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() -
Часть стабильного 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() -
Часть стабильного 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() -
Часть стабильного 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() -
Часть стабильного ABI.
Возвращает идентификатор текущей платформы. В Unix он формируется из «официального» названия операционной системы, преобразованного в нижний регистр, за которым следует номер основной версии; например, для Solaris 2.x, также известной как SunOS 5.x, значение —
'sunos5'. В macOS это'darwin'. В Windows —'win'. Возвращённая строка указывает на статическую область памяти; вызывающий код не должен изменять её. В коде Python это значение доступно какsys.platform.
-
const char *Py_GetCopyright() -
Часть стабильного ABI.
Возвращает официальную строку авторских прав для текущей версии Python, например
'Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam'Возвращённая строка указывает на статическую область памяти; вызывающий код не должен изменять её. В коде Python это значение доступно как
sys.copyright.
-
const char *Py_GetCompiler() -
Часть стабильного ABI.
Возвращает указание на компилятор, использованный для сборки текущей версии Python; строка заключена в квадратные скобки, например:
"[GCC 2.7.2.2]"
Возвращённая строка указывает на статическую область памяти; вызывающий код не должен изменять её. В коде Python это значение доступно как часть переменной
sys.version.
-
const char *Py_GetBuildInfo() -
Часть стабильного ABI.
Возвращает сведения о порядковом номере, а также дате и времени сборки текущего экземпляра интерпретатора Python, например
"#67, Aug 1 1997, 22:34:28"
Возвращённая строка указывает на статическую область памяти; вызывающий код не должен изменять её. В коде Python это значение доступно как часть переменной
sys.version.
-
void PySys_SetArgvEx(int argc, wchar_t **argv, int updatepath) -
Часть стабильного ABI.
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.argv,PyConfig.parse_argvиPyConfig.safe_path, см. раздел Конфигурация инициализации Python.Задаёт
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.Примечание
Рекомендуется, чтобы приложения, встраивающие интерпретатор 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) -
Часть стабильного ABI.
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.argvиPyConfig.parse_argv, см. раздел Конфигурация инициализации Python.Эта функция работает как
PySys_SetArgvEx()со значением updatepath, равным1, если только интерпретатор python не был запущен с параметром-I.Используйте
Py_DecodeLocale(), чтобы декодировать строку байтов и получить строку типа wchar_t*.См. также поля
PyConfig.orig_argvиPyConfig.argvв разделе Конфигурация инициализации Python.Изменено в версии 3.4: Значение updatepath зависит от
-I.Устарела в версии 3.11, будет удалена в версии 3.15.
-
void Py_SetPythonHome(const wchar_t *home) -
Часть стабильного ABI.
Этот API сохранён для обратной совместимости: вместо него следует задавать
PyConfig.home, см. раздел Конфигурация инициализации Python.Задаёт каталог «home» по умолчанию, то есть расположение стандартных библиотек Python. Значение строки аргумента описано в разделе
PYTHONHOME.Аргумент должен указывать на завершающуюся нулём строку символов в статической памяти, содержимое которой не будет меняться в течение выполнения программы. Код интерпретатора Python не изменяет содержимое этой области памяти.
Используйте
Py_DecodeLocale(), чтобы декодировать строку байтов и получить строку типа wchar_t*.Устарела в версии 3.11, будет удалена в версии 3.15.
-
wchar_t *Py_GetPythonHome() -
Часть стабильного ABI.
Возвращает «home» по умолчанию, то есть значение, заданное с помощью
PyConfig.home, либо значение переменной окруженияPYTHONHOME, если она задана.Эту функцию не следует вызывать до
Py_Initialize(), иначе она возвращаетNULL.Изменено в версии 3.10: Теперь возвращает
NULL, если вызвана доPy_Initialize().Устарела в версии 3.13, будет удалена в версии 3.15: Вместо неё используйте
PyConfig_Get("home")или переменную окруженияPYTHONHOME.
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/c-api/interp-lifecycle.html