Стабильность C API
Если не указано иное, на C API Python распространяется политика обратной совместимости PEP 387. Большинство изменений в нём совместимы на уровне исходного кода (обычно это просто добавление нового API). Изменение существующего API или удаление API допускается только после периода устаревания либо для устранения серьёзных проблем.
Двоичный интерфейс приложений (ABI) CPython совместим вперёд и назад в пределах минорного выпуска (если сборки выполнены одинаковым способом; см. раздел Особенности платформ ниже). Таким образом, код, скомпилированный для Python 3.10.0, будет работать с версией 3.10.8 и наоборот, но для версий 3.9.x и 3.11.x его потребуется скомпилировать отдельно.
Существуют два уровня стабильности C API:
-
Нестабильный API может изменяться в минорных версиях без периода устаревания. Его имена помечены префиксом
PyUnstable. -
Ограниченный API совместим на протяжении нескольких минорных выпусков. Если определён
Py_LIMITED_API, изPython.hпредоставляется только это подмножество.
Подробнее они рассматриваются ниже.
Имена с префиксом подчёркивания, например _Py_InternalState, относятся к закрытому API, который может измениться без уведомления даже в исправляющих выпусках. Если вам необходимо использовать этот API, свяжитесь с разработчиками CPython, чтобы обсудить добавление открытого API для вашего случая.
Нестабильный C API
Любой API, имя которого начинается с префикса PyUnstable, раскрывает подробности реализации CPython и может изменяться в каждом минорном выпуске (например, с 3.9 на 3.10) без каких-либо предупреждений об устаревании. Однако в исправляющем выпуске (например, с 3.10.0 на 3.10.1) он не изменяется.
Как правило, он предназначен для специализированных низкоуровневых инструментов, таких как отладчики.
Предполагается, что проекты, использующие этот API, будут следить за разработкой CPython и прикладывать дополнительные усилия для адаптации к изменениям.
Стабильный двоичный интерфейс приложений
Для простоты в этом документе используется термин расширения, однако Ограниченный API и Стабильный ABI работают одинаково для всех способов использования API, например для встраивания Python.
Ограниченный C API
В Python 3.2 был представлен Ограниченный API — поднабор C API Python. Расширения, использующие только Ограниченный API, можно скомпилировать один раз и загружать в нескольких версиях Python. Состав Ограниченного API перечислен ниже.
-
Py_LIMITED_API -
Определите этот макрос перед подключением
Python.h, чтобы использовать только Ограниченный API и выбрать его версию.Задайте
Py_LIMITED_APIзначениеPY_VERSION_HEX, соответствующее самой старой версии Python, которую поддерживает ваше расширение. Расширение будет совместимо на уровне ABI со всеми выпусками Python 3 начиная с указанной версии и сможет использовать Ограниченный API, представленный не позднее этой версии.Вместо непосредственного использования макроса
PY_VERSION_HEXукажите минимальную минорную версию (например,0x030A0000для Python 3.10), чтобы обеспечить стабильность при компиляции с будущими версиями Python.Также можно задать
Py_LIMITED_APIзначение3. Это работает так же, как0x03020000(Python 3.2 — версия, в которой появился Ограниченный API).
Стабильный ABI
Для этого Python предоставляет Стабильный ABI — набор символов, которые сохраняют совместимость на уровне ABI во всех версиях Python 3.x.
Примечание
Стабильный ABI предотвращает проблемы ABI, такие как ошибки компоновщика из-за отсутствующих символов или повреждение данных из-за изменений расположения структур или сигнатур функций. Однако другие изменения в Python могут повлиять на поведение расширений. Подробности см. в политике обратной совместимости Python (PEP 387).
Стабильный ABI включает символы, предоставляемые в Ограниченном API, а также другие символы, например функции, необходимые для поддержки более старых версий Ограниченного API.
В Windows расширения, использующие Стабильный ABI, следует компоновать с python3.dll, а не с библиотекой для конкретной версии, такой как python39.dll.
На некоторых платформах Python ищет и загружает файлы разделяемых библиотек с тегом abi3 в имени (например, mymodule.abi3.so). Он не проверяет, соответствуют ли такие расширения Стабильному ABI. Пользователь (или его инструменты упаковки) должен убедиться, что, например, расширения, собранные с Ограниченным API версии 3.10 или новее, не устанавливаются для более ранних версий Python.
Все функции Стабильного ABI представлены в разделяемой библиотеке Python именно как функции, а не только как макросы. Благодаря этому их можно использовать из языков, в которых не применяется препроцессор C.
Область применения и производительность Ограниченного API
Цель Ограниченного API — предоставить все возможности полного C API, пусть и с возможным снижением производительности.
Например, хотя PyList_GetItem() доступна, её «небезопасный» вариант в виде макроса PyList_GET_ITEM() недоступен. Макрос может работать быстрее, поскольку он может полагаться на детали реализации объекта списка, зависящие от версии.
Если Py_LIMITED_API не определён, некоторые функции C API встраиваются в код или заменяются макросами. Определение Py_LIMITED_API отключает такое встраивание, обеспечивая стабильность по мере совершенствования структур данных Python, но, возможно, снижая производительность.
Если не задавать Py_LIMITED_API, можно скомпилировать расширение для Ограниченного API с ABI, зависящим от версии. Это может повысить производительность для этой версии Python, но ограничит совместимость. В таком случае компиляция с Py_LIMITED_API создаст расширение, которое можно распространять там, где недоступна сборка для конкретной версии, например для предварительных выпусков следующей версии Python.
Ограничения Ограниченного API
Обратите внимание: компиляция с Py_LIMITED_API не гарантирует полного соответствия кода Ограниченному API или Стабильному ABI. Py_LIMITED_API охватывает только определения, тогда как API включает и другие аспекты, например ожидаемую семантику.
Одна из проблем, от которой Py_LIMITED_API не защищает, — вызов функции с аргументами, недопустимыми в более старой версии Python. Например, рассмотрим функцию, которая начинает принимать NULL в качестве аргумента. В Python 3.9 значение NULL теперь выбирает поведение по умолчанию, однако в Python 3.8 аргумент будет использоваться напрямую, что приведёт к разыменованию NULL и аварийному завершению. Аналогичное рассуждение применимо к полям структур.
Другая проблема состоит в том, что некоторые поля структур в настоящее время не скрываются при определённом Py_LIMITED_API, хотя они входят в Ограниченный API.
По этим причинам мы рекомендуем тестировать расширение на всех поддерживаемых им минорных версиях Python и, по возможности, собирать его для самой старой из них.
Мы также рекомендуем изучить документацию по всем используемым API и проверить, указано ли явно, что они входят в Ограниченный API. Даже при определённом Py_LIMITED_API по техническим причинам доступны некоторые закрытые объявления (а иногда это происходит непреднамеренно из-за ошибок).
Также обратите внимание, что Ограниченный API не обязательно стабилен: компиляция с Py_LIMITED_API в Python 3.8 означает, что расширение будет работать с Python 3.12, но не обязательно будет компилироваться с Python 3.12. В частности, некоторые части Ограниченного API могут быть признаны устаревшими и удалены при условии, что Стабильный ABI останется стабильным.
Особенности платформ
Стабильность ABI зависит не только от Python, но и от используемого компилятора, низкоуровневых библиотек и параметров компилятора. Для целей Стабильного ABI эти особенности определяют «платформу». Обычно они зависят от типа операционной системы и архитектуры процессора.
Каждый дистрибьютор Python несёт ответственность за то, чтобы все версии Python для конкретной платформы собирались способом, не нарушающим Стабильный ABI. Так обстоит дело с выпусками для Windows и macOS от python.org, а также со многими сторонними дистрибьюторами.
Состав Ограниченного API
В настоящее время Ограниченный API включает следующие элементы:
METH_CLASSMETH_COEXISTMETH_FASTCALLMETH_METHODMETH_NOARGSMETH_OMETH_STATICMETH_VARARGSPY_VECTORCALL_ARGUMENTS_OFFSETPyAIter_Check()PyArg_Parse()PyArg_ParseTuple()PyArg_ParseTupleAndKeywords()PyArg_UnpackTuple()PyArg_VaParse()PyArg_VaParseTupleAndKeywords()PyArg_ValidateKeywordArguments()PyBUF_ANY_CONTIGUOUSPyBUF_CONTIGPyBUF_CONTIG_ROPyBUF_C_CONTIGUOUSPyBUF_FORMATPyBUF_FULLPyBUF_FULL_ROPyBUF_F_CONTIGUOUSPyBUF_INDIRECTPyBUF_MAX_NDIMPyBUF_NDPyBUF_READPyBUF_RECORDSPyBUF_RECORDS_ROPyBUF_SIMPLEPyBUF_STRIDEDPyBUF_STRIDED_ROPyBUF_STRIDESPyBUF_WRITABLEPyBUF_WRITEPyBaseObject_TypePyBool_FromLong()PyBool_TypePyBuffer_FillContiguousStrides()PyBuffer_FillInfo()PyBuffer_FromContiguous()PyBuffer_GetPointer()PyBuffer_IsContiguous()PyBuffer_Release()PyBuffer_SizeFromFormat()PyBuffer_ToContiguous()PyByteArrayIter_TypePyByteArray_AsString()PyByteArray_Concat()PyByteArray_FromObject()PyByteArray_FromStringAndSize()PyByteArray_Resize()PyByteArray_Size()PyByteArray_TypePyBytesIter_TypePyBytes_AsString()PyBytes_AsStringAndSize()PyBytes_Concat()PyBytes_ConcatAndDel()PyBytes_DecodeEscape()PyBytes_FromFormat()PyBytes_FromFormatV()PyBytes_FromObject()PyBytes_FromString()PyBytes_FromStringAndSize()PyBytes_Repr()PyBytes_Size()PyBytes_TypePyCFunctionPyCFunctionFastPyCFunctionFastWithKeywordsPyCFunctionWithKeywordsPyCFunction_GetFlags()PyCFunction_GetFunction()PyCFunction_GetSelf()PyCFunction_New()PyCFunction_NewEx()PyCFunction_TypePyCMethod_New()PyCallIter_New()PyCallIter_TypePyCallable_Check()PyCapsule_DestructorPyCapsule_GetContext()PyCapsule_GetDestructor()PyCapsule_GetName()PyCapsule_GetPointer()PyCapsule_Import()PyCapsule_IsValid()PyCapsule_New()PyCapsule_SetContext()PyCapsule_SetDestructor()PyCapsule_SetName()PyCapsule_SetPointer()PyCapsule_TypePyClassMethodDescr_TypePyCodec_BackslashReplaceErrors()PyCodec_Decode()PyCodec_Decoder()PyCodec_Encode()PyCodec_Encoder()PyCodec_IgnoreErrors()PyCodec_IncrementalDecoder()PyCodec_IncrementalEncoder()PyCodec_KnownEncoding()PyCodec_LookupError()PyCodec_NameReplaceErrors()PyCodec_Register()PyCodec_RegisterError()PyCodec_ReplaceErrors()PyCodec_StreamReader()PyCodec_StreamWriter()PyCodec_StrictErrors()PyCodec_Unregister()PyCodec_XMLCharRefReplaceErrors()PyComplex_FromDoubles()PyComplex_ImagAsDouble()PyComplex_RealAsDouble()PyComplex_TypePyDescr_NewClassMethod()PyDescr_NewGetSet()PyDescr_NewMember()PyDescr_NewMethod()PyDictItems_TypePyDictIterItem_TypePyDictIterKey_TypePyDictIterValue_TypePyDictKeys_TypePyDictProxy_New()PyDictProxy_TypePyDictRevIterItem_TypePyDictRevIterKey_TypePyDictRevIterValue_TypePyDictValues_TypePyDict_Clear()PyDict_Contains()PyDict_Copy()PyDict_DelItem()PyDict_DelItemString()PyDict_GetItem()PyDict_GetItemRef()PyDict_GetItemString()PyDict_GetItemStringRef()PyDict_GetItemWithError()PyDict_Items()PyDict_Keys()PyDict_Merge()PyDict_MergeFromSeq2()PyDict_New()PyDict_Next()PyDict_SetItem()PyDict_SetItemString()PyDict_Size()PyDict_TypePyDict_Update()PyDict_Values()PyEllipsis_TypePyEnum_TypePyErr_BadArgument()PyErr_BadInternalCall()PyErr_CheckSignals()PyErr_Clear()PyErr_Display()PyErr_DisplayException()PyErr_ExceptionMatches()PyErr_Fetch()PyErr_Format()PyErr_FormatV()PyErr_GetExcInfo()PyErr_GetHandledException()PyErr_GetRaisedException()PyErr_GivenExceptionMatches()PyErr_NewException()PyErr_NewExceptionWithDoc()PyErr_NoMemory()PyErr_NormalizeException()PyErr_Occurred()PyErr_Print()PyErr_PrintEx()PyErr_ProgramText()PyErr_ResourceWarning()PyErr_Restore()PyErr_SetExcFromWindowsErr()PyErr_SetExcFromWindowsErrWithFilename()PyErr_SetExcFromWindowsErrWithFilenameObject()PyErr_SetExcFromWindowsErrWithFilenameObjects()PyErr_SetExcInfo()PyErr_SetFromErrno()PyErr_SetFromErrnoWithFilename()PyErr_SetFromErrnoWithFilenameObject()PyErr_SetFromErrnoWithFilenameObjects()PyErr_SetFromWindowsErr()PyErr_SetFromWindowsErrWithFilename()PyErr_SetHandledException()PyErr_SetImportError()PyErr_SetImportErrorSubclass()PyErr_SetInterrupt()PyErr_SetInterruptEx()PyErr_SetNone()PyErr_SetObject()PyErr_SetRaisedException()PyErr_SetString()PyErr_SyntaxLocation()PyErr_SyntaxLocationEx()PyErr_WarnEx()PyErr_WarnExplicit()PyErr_WarnFormat()PyErr_WriteUnraisable()PyEval_AcquireThread()PyEval_EvalCode()PyEval_EvalCodeEx()PyEval_EvalFrame()PyEval_EvalFrameEx()PyEval_GetBuiltins()PyEval_GetFrame()PyEval_GetFrameBuiltins()PyEval_GetFrameGlobals()PyEval_GetFrameLocals()PyEval_GetFuncDesc()PyEval_GetFuncName()PyEval_GetGlobals()PyEval_GetLocals()PyEval_InitThreads()PyEval_ReleaseThread()PyEval_RestoreThread()PyEval_SaveThread()PyExc_ArithmeticErrorPyExc_AssertionErrorPyExc_AttributeErrorPyExc_BaseExceptionPyExc_BaseExceptionGroupPyExc_BlockingIOErrorPyExc_BrokenPipeErrorPyExc_BufferErrorPyExc_BytesWarningPyExc_ChildProcessError
PyExc_ConnectionAbortedErrorPyExc_ConnectionErrorPyExc_ConnectionRefusedErrorPyExc_ConnectionResetErrorPyExc_DeprecationWarningPyExc_EOFErrorPyExc_EncodingWarningPyExc_EnvironmentErrorPyExc_ExceptionPyExc_FileExistsErrorPyExc_FileNotFoundErrorPyExc_FloatingPointErrorPyExc_FutureWarningPyExc_GeneratorExitPyExc_IOErrorPyExc_ImportErrorPyExc_ImportWarningPyExc_IndentationErrorPyExc_IndexErrorPyExc_InterruptedErrorPyExc_IsADirectoryErrorPyExc_KeyErrorPyExc_KeyboardInterruptPyExc_LookupErrorPyExc_MemoryErrorPyExc_ModuleNotFoundErrorPyExc_NameErrorPyExc_NotADirectoryErrorPyExc_NotImplementedErrorPyExc_OSErrorPyExc_OverflowErrorPyExc_PendingDeprecationWarningPyExc_PermissionErrorPyExc_ProcessLookupErrorPyExc_RecursionErrorPyExc_ReferenceErrorPyExc_ResourceWarningPyExc_RuntimeErrorPyExc_RuntimeWarningPyExc_StopAsyncIterationPyExc_StopIterationPyExc_SyntaxErrorPyExc_SyntaxWarningPyExc_SystemErrorPyExc_SystemExitPyExc_TabErrorPyExc_TimeoutErrorPyExc_TypeErrorPyExc_UnboundLocalErrorPyExc_UnicodeDecodeErrorPyExc_UnicodeEncodeErrorPyExc_UnicodeErrorPyExc_UnicodeTranslateErrorPyExc_UnicodeWarningPyExc_UserWarningPyExc_ValueErrorPyExc_WarningPyExc_WindowsErrorPyExc_ZeroDivisionErrorPyExceptionClass_Name()PyException_GetArgs()PyException_GetCause()PyException_GetContext()PyException_GetTraceback()PyException_SetArgs()PyException_SetCause()PyException_SetContext()PyException_SetTraceback()PyFile_FromFd()PyFile_GetLine()PyFile_WriteObject()PyFile_WriteString()PyFilter_TypePyFloat_AsDouble()PyFloat_FromDouble()PyFloat_FromString()PyFloat_GetInfo()PyFloat_GetMax()PyFloat_GetMin()PyFloat_TypePyFrameObjectPyFrame_GetCode()PyFrame_GetLineNumber()PyFrozenSet_New()PyFrozenSet_TypePyGC_Collect()PyGC_Disable()PyGC_Enable()PyGC_IsEnabled()PyGILState_Ensure()PyGILState_GetThisThreadState()PyGILState_Release()PyGILState_STATEPyGetSetDefPyGetSetDescr_TypePyImport_AddModule()PyImport_AddModuleObject()PyImport_AddModuleRef()PyImport_AppendInittab()PyImport_ExecCodeModule()PyImport_ExecCodeModuleEx()PyImport_ExecCodeModuleObject()PyImport_ExecCodeModuleWithPathnames()PyImport_GetImporter()PyImport_GetMagicNumber()PyImport_GetMagicTag()PyImport_GetModule()PyImport_GetModuleDict()PyImport_Import()PyImport_ImportFrozenModule()PyImport_ImportFrozenModuleObject()PyImport_ImportModule()PyImport_ImportModuleLevel()PyImport_ImportModuleLevelObject()PyImport_ImportModuleNoBlock()PyImport_ReloadModule()PyIndex_Check()PyInterpreterStatePyInterpreterState_Clear()PyInterpreterState_Delete()PyInterpreterState_Get()PyInterpreterState_GetDict()PyInterpreterState_GetID()PyInterpreterState_New()PyIter_Check()PyIter_Next()PyIter_NextItem()PyIter_Send()PyListIter_TypePyListRevIter_TypePyList_Append()PyList_AsTuple()PyList_GetItem()PyList_GetItemRef()PyList_GetSlice()PyList_Insert()PyList_New()PyList_Reverse()PyList_SetItem()PyList_SetSlice()PyList_Size()PyList_Sort()PyList_TypePyLongObjectPyLongRangeIter_TypePyLong_AsDouble()PyLong_AsInt()PyLong_AsInt32()PyLong_AsInt64()PyLong_AsLong()PyLong_AsLongAndOverflow()PyLong_AsLongLong()PyLong_AsLongLongAndOverflow()PyLong_AsNativeBytes()PyLong_AsSize_t()PyLong_AsSsize_t()PyLong_AsUInt32()PyLong_AsUInt64()PyLong_AsUnsignedLong()PyLong_AsUnsignedLongLong()PyLong_AsUnsignedLongLongMask()PyLong_AsUnsignedLongMask()PyLong_AsVoidPtr()PyLong_FromDouble()PyLong_FromInt32()PyLong_FromInt64()PyLong_FromLong()PyLong_FromLongLong()PyLong_FromNativeBytes()PyLong_FromSize_t()PyLong_FromSsize_t()PyLong_FromString()PyLong_FromUInt32()PyLong_FromUInt64()PyLong_FromUnsignedLong()PyLong_FromUnsignedLongLong()PyLong_FromUnsignedNativeBytes()PyLong_FromVoidPtr()PyLong_GetInfo()PyLong_TypePyMap_TypePyMapping_Check()PyMapping_GetItemString()PyMapping_GetOptionalItem()PyMapping_GetOptionalItemString()PyMapping_HasKey()PyMapping_HasKeyString()PyMapping_HasKeyStringWithError()PyMapping_HasKeyWithError()PyMapping_Items()PyMapping_Keys()PyMapping_Length()PyMapping_SetItemString()PyMapping_Size()PyMapping_Values()PyMem_Calloc()PyMem_Free()PyMem_Malloc()PyMem_RawCalloc()PyMem_RawFree()PyMem_RawMalloc()PyMem_RawRealloc()PyMem_Realloc()PyMemberDefPyMemberDescr_TypePyMember_GetOne()PyMember_SetOne()PyMemoryView_FromBuffer()PyMemoryView_FromMemory()PyMemoryView_FromObject()PyMemoryView_GetContiguous()PyMemoryView_TypePyMethodDefPyMethodDescr_TypePyModuleDefPyModuleDef_BasePyModuleDef_Init()PyModuleDef_SlotPyModuleDef_TypePyModule_Add()PyModule_AddFunctions()PyModule_AddIntConstant()PyModule_AddObject()PyModule_AddObjectRef()PyModule_AddStringConstant()PyModule_AddType()PyModule_Create2()PyModule_ExecDef()PyModule_FromDefAndSpec2()PyModule_GetDef()PyModule_GetDict()PyModule_GetFilename()PyModule_GetFilenameObject()PyModule_GetName()PyModule_GetNameObject()PyModule_GetState()PyModule_New()
PyModule_NewObject()PyModule_SetDocString()PyModule_TypePyNumber_Absolute()PyNumber_Add()PyNumber_And()PyNumber_AsSsize_t()PyNumber_Check()PyNumber_Divmod()PyNumber_Float()PyNumber_FloorDivide()PyNumber_InPlaceAdd()PyNumber_InPlaceAnd()PyNumber_InPlaceFloorDivide()PyNumber_InPlaceLshift()PyNumber_InPlaceMatrixMultiply()PyNumber_InPlaceMultiply()PyNumber_InPlaceOr()PyNumber_InPlacePower()PyNumber_InPlaceRemainder()PyNumber_InPlaceRshift()PyNumber_InPlaceSubtract()PyNumber_InPlaceTrueDivide()PyNumber_InPlaceXor()PyNumber_Index()PyNumber_Invert()PyNumber_Long()PyNumber_Lshift()PyNumber_MatrixMultiply()PyNumber_Multiply()PyNumber_Negative()PyNumber_Or()PyNumber_Positive()PyNumber_Power()PyNumber_Remainder()PyNumber_Rshift()PyNumber_Subtract()PyNumber_ToBase()PyNumber_TrueDivide()PyNumber_Xor()PyOS_AfterFork()PyOS_AfterFork_Child()PyOS_AfterFork_Parent()PyOS_BeforeFork()PyOS_CheckStack()PyOS_FSPath()PyOS_InputHookPyOS_InterruptOccurred()PyOS_double_to_string()PyOS_getsig()PyOS_mystricmp()PyOS_mystrnicmp()PyOS_setsig()PyOS_sighandler_tPyOS_snprintf()PyOS_string_to_double()PyOS_strtol()PyOS_strtoul()PyOS_vsnprintf()PyObjectPyObject.ob_refcntPyObject.ob_typePyObject_ASCII()PyObject_AsFileDescriptor()PyObject_Bytes()PyObject_Call()PyObject_CallFunction()PyObject_CallFunctionObjArgs()PyObject_CallMethod()PyObject_CallMethodObjArgs()PyObject_CallNoArgs()PyObject_CallObject()PyObject_Calloc()PyObject_CheckBuffer()PyObject_ClearWeakRefs()PyObject_CopyData()PyObject_DelAttr()PyObject_DelAttrString()PyObject_DelItem()PyObject_DelItemString()PyObject_Dir()PyObject_Format()PyObject_Free()PyObject_GC_Del()PyObject_GC_IsFinalized()PyObject_GC_IsTracked()PyObject_GC_Track()PyObject_GC_UnTrack()PyObject_GenericGetAttr()PyObject_GenericGetDict()PyObject_GenericSetAttr()PyObject_GenericSetDict()PyObject_GetAIter()PyObject_GetAttr()PyObject_GetAttrString()PyObject_GetBuffer()PyObject_GetItem()PyObject_GetIter()PyObject_GetOptionalAttr()PyObject_GetOptionalAttrString()PyObject_GetTypeData()PyObject_HasAttr()PyObject_HasAttrString()PyObject_HasAttrStringWithError()PyObject_HasAttrWithError()PyObject_Hash()PyObject_HashNotImplemented()PyObject_Init()PyObject_InitVar()PyObject_IsInstance()PyObject_IsSubclass()PyObject_IsTrue()PyObject_Length()PyObject_Malloc()PyObject_Not()PyObject_Realloc()PyObject_Repr()PyObject_RichCompare()PyObject_RichCompareBool()PyObject_SelfIter()PyObject_SetAttr()PyObject_SetAttrString()PyObject_SetItem()PyObject_Size()PyObject_Str()PyObject_Type()PyObject_Vectorcall()PyObject_VectorcallMethod()PyProperty_TypePyRangeIter_TypePyRange_TypePyReversed_TypePySeqIter_New()PySeqIter_TypePySequence_Check()PySequence_Concat()PySequence_Contains()PySequence_Count()PySequence_DelItem()PySequence_DelSlice()PySequence_Fast()PySequence_GetItem()PySequence_GetSlice()PySequence_In()PySequence_InPlaceConcat()PySequence_InPlaceRepeat()PySequence_Index()PySequence_Length()PySequence_List()PySequence_Repeat()PySequence_SetItem()PySequence_SetSlice()PySequence_Size()PySequence_Tuple()PySetIter_TypePySet_Add()PySet_Clear()PySet_Contains()PySet_Discard()PySet_New()PySet_Pop()PySet_Size()PySet_TypePySlice_AdjustIndices()PySlice_GetIndices()PySlice_GetIndicesEx()PySlice_New()PySlice_TypePySlice_Unpack()PyState_AddModule()PyState_FindModule()PyState_RemoveModule()PyStructSequence_DescPyStructSequence_FieldPyStructSequence_GetItem()PyStructSequence_New()PyStructSequence_NewType()PyStructSequence_SetItem()PyStructSequence_UnnamedFieldPySuper_TypePySys_Audit()PySys_AuditTuple()PySys_FormatStderr()PySys_FormatStdout()PySys_GetObject()PySys_GetXOptions()PySys_ResetWarnOptions()PySys_SetArgv()PySys_SetArgvEx()PySys_SetObject()PySys_WriteStderr()PySys_WriteStdout()PyThreadStatePyThreadState_Clear()PyThreadState_Delete()PyThreadState_Get()PyThreadState_GetDict()PyThreadState_GetFrame()PyThreadState_GetID()PyThreadState_GetInterpreter()PyThreadState_New()PyThreadState_SetAsyncExc()PyThreadState_Swap()PyThread_GetInfo()PyThread_ReInitTLS()PyThread_acquire_lock()PyThread_acquire_lock_timed()PyThread_allocate_lock()PyThread_create_key()PyThread_delete_key()PyThread_delete_key_value()PyThread_exit_thread()PyThread_free_lock()PyThread_get_key_value()PyThread_get_stacksize()PyThread_get_thread_ident()PyThread_get_thread_native_id()PyThread_init_thread()PyThread_release_lock()PyThread_set_key_value()PyThread_set_stacksize()PyThread_start_new_thread()PyThread_tss_alloc()PyThread_tss_create()PyThread_tss_delete()PyThread_tss_free()PyThread_tss_get()PyThread_tss_is_created()PyThread_tss_set()PyTraceBack_Here()PyTraceBack_Print()PyTraceBack_TypePyTupleIter_TypePyTuple_GetItem()PyTuple_GetSlice()PyTuple_New()PyTuple_Pack()PyTuple_SetItem()PyTuple_Size()PyTuple_TypePyTypeObjectPyType_ClearCache()
PyType_Freeze()PyType_FromMetaclass()PyType_FromModuleAndSpec()PyType_FromSpec()PyType_FromSpecWithBases()PyType_GenericAlloc()PyType_GenericNew()PyType_GetBaseByToken()PyType_GetFlags()PyType_GetFullyQualifiedName()PyType_GetModule()PyType_GetModuleByDef()PyType_GetModuleName()PyType_GetModuleState()PyType_GetName()PyType_GetQualName()PyType_GetSlot()PyType_GetTypeDataSize()PyType_IsSubtype()PyType_Modified()PyType_Ready()PyType_SlotPyType_SpecPyType_TypePyUnicodeDecodeError_Create()PyUnicodeDecodeError_GetEncoding()PyUnicodeDecodeError_GetEnd()PyUnicodeDecodeError_GetObject()PyUnicodeDecodeError_GetReason()PyUnicodeDecodeError_GetStart()PyUnicodeDecodeError_SetEnd()PyUnicodeDecodeError_SetReason()PyUnicodeDecodeError_SetStart()PyUnicodeEncodeError_GetEncoding()PyUnicodeEncodeError_GetEnd()PyUnicodeEncodeError_GetObject()PyUnicodeEncodeError_GetReason()PyUnicodeEncodeError_GetStart()PyUnicodeEncodeError_SetEnd()PyUnicodeEncodeError_SetReason()PyUnicodeEncodeError_SetStart()PyUnicodeIter_TypePyUnicodeTranslateError_GetEnd()PyUnicodeTranslateError_GetObject()PyUnicodeTranslateError_GetReason()PyUnicodeTranslateError_GetStart()PyUnicodeTranslateError_SetEnd()PyUnicodeTranslateError_SetReason()PyUnicodeTranslateError_SetStart()PyUnicode_Append()PyUnicode_AppendAndDel()PyUnicode_AsASCIIString()PyUnicode_AsCharmapString()PyUnicode_AsDecodedObject()PyUnicode_AsDecodedUnicode()PyUnicode_AsEncodedObject()PyUnicode_AsEncodedString()PyUnicode_AsEncodedUnicode()PyUnicode_AsLatin1String()PyUnicode_AsMBCSString()PyUnicode_AsRawUnicodeEscapeString()PyUnicode_AsUCS4()PyUnicode_AsUCS4Copy()PyUnicode_AsUTF16String()PyUnicode_AsUTF32String()PyUnicode_AsUTF8AndSize()PyUnicode_AsUTF8String()PyUnicode_AsUnicodeEscapeString()PyUnicode_AsWideChar()PyUnicode_AsWideCharString()PyUnicode_BuildEncodingMap()PyUnicode_Compare()PyUnicode_CompareWithASCIIString()PyUnicode_Concat()PyUnicode_Contains()PyUnicode_Count()PyUnicode_Decode()PyUnicode_DecodeASCII()PyUnicode_DecodeCharmap()PyUnicode_DecodeCodePageStateful()PyUnicode_DecodeFSDefault()PyUnicode_DecodeFSDefaultAndSize()PyUnicode_DecodeLatin1()PyUnicode_DecodeLocale()PyUnicode_DecodeLocaleAndSize()PyUnicode_DecodeMBCS()PyUnicode_DecodeMBCSStateful()PyUnicode_DecodeRawUnicodeEscape()PyUnicode_DecodeUTF16()PyUnicode_DecodeUTF16Stateful()PyUnicode_DecodeUTF32()PyUnicode_DecodeUTF32Stateful()PyUnicode_DecodeUTF7()PyUnicode_DecodeUTF7Stateful()PyUnicode_DecodeUTF8()PyUnicode_DecodeUTF8Stateful()PyUnicode_DecodeUnicodeEscape()PyUnicode_EncodeCodePage()PyUnicode_EncodeFSDefault()PyUnicode_EncodeLocale()PyUnicode_Equal()PyUnicode_EqualToUTF8()PyUnicode_EqualToUTF8AndSize()PyUnicode_FSConverter()PyUnicode_FSDecoder()PyUnicode_Find()PyUnicode_FindChar()PyUnicode_Format()PyUnicode_FromEncodedObject()PyUnicode_FromFormat()PyUnicode_FromFormatV()PyUnicode_FromObject()PyUnicode_FromOrdinal()PyUnicode_FromString()PyUnicode_FromStringAndSize()PyUnicode_FromWideChar()PyUnicode_GetDefaultEncoding()PyUnicode_GetLength()PyUnicode_InternFromString()PyUnicode_InternInPlace()PyUnicode_IsIdentifier()PyUnicode_Join()PyUnicode_Partition()PyUnicode_RPartition()PyUnicode_RSplit()PyUnicode_ReadChar()PyUnicode_Replace()PyUnicode_Resize()PyUnicode_RichCompare()PyUnicode_Split()PyUnicode_Splitlines()PyUnicode_Substring()PyUnicode_Tailmatch()PyUnicode_Translate()PyUnicode_TypePyUnicode_WriteChar()PyVarObjectPyVarObject.ob_basePyVarObject.ob_sizePyVectorcall_Call()PyVectorcall_NARGS()PyWeakReferencePyWeakref_GetObject()PyWeakref_GetRef()PyWeakref_NewProxy()PyWeakref_NewRef()PyWrapperDescr_TypePyWrapper_New()PyZip_TypePy_ASNATIVEBYTES_ALLOW_INDEXPy_ASNATIVEBYTES_BIG_ENDIANPy_ASNATIVEBYTES_DEFAULTSPy_ASNATIVEBYTES_LITTLE_ENDIANPy_ASNATIVEBYTES_NATIVE_ENDIANPy_ASNATIVEBYTES_REJECT_NEGATIVEPy_ASNATIVEBYTES_UNSIGNED_BUFFERPy_AUDIT_READPy_AddPendingCall()Py_AtExit()Py_BEGIN_ALLOW_THREADSPy_BLOCK_THREADSPy_BuildValue()Py_BytesMain()Py_CompileString()Py_DecRef()Py_DecodeLocale()Py_END_ALLOW_THREADSPy_EncodeLocale()Py_EndInterpreter()Py_EnterRecursiveCall()Py_Exit()Py_FatalError()Py_FileSystemDefaultEncodeErrorsPy_FileSystemDefaultEncodingPy_Finalize()Py_FinalizeEx()Py_GenericAlias()Py_GenericAliasTypePy_GetBuildInfo()Py_GetCompiler()Py_GetConstant()Py_GetConstantBorrowed()Py_GetCopyright()Py_GetExecPrefix()Py_GetPath()Py_GetPlatform()Py_GetPrefix()Py_GetProgramFullPath()Py_GetProgramName()Py_GetPythonHome()Py_GetRecursionLimit()Py_GetVersion()Py_HasFileSystemDefaultEncodingPy_IncRef()Py_Initialize()Py_InitializeEx()Py_Is()Py_IsFalse()Py_IsFinalizing()Py_IsInitialized()Py_IsNone()Py_IsTrue()Py_LeaveRecursiveCall()Py_Main()Py_MakePendingCalls()Py_NewInterpreter()Py_NewRef()Py_PACK_FULL_VERSION()Py_PACK_VERSION()Py_READONLYPy_REFCNT()Py_RELATIVE_OFFSETPy_ReprEnter()Py_ReprLeave()Py_SetProgramName()Py_SetPythonHome()Py_SetRecursionLimit()Py_TPFLAGS_BASETYPEPy_TPFLAGS_DEFAULTPy_TPFLAGS_HAVE_GCPy_TPFLAGS_HAVE_VECTORCALLPy_TPFLAGS_ITEMS_AT_ENDPy_TPFLAGS_METHOD_DESCRIPTORPy_TP_USE_SPECPy_TYPE()Py_T_BOOLPy_T_BYTEPy_T_CHARPy_T_DOUBLEPy_T_FLOATPy_T_INTPy_T_LONGPy_T_LONGLONGPy_T_OBJECT_EXPy_T_PYSSIZETPy_T_SHORTPy_T_STRINGPy_T_STRING_INPLACE
Py_T_UBYTEPy_T_UINTPy_T_ULONGPy_T_ULONGLONGPy_T_USHORTPy_UCS4Py_UNBLOCK_THREADSPy_UTF8ModePy_VaBuildValue()Py_VersionPy_XNewRef()Py_am_aiterPy_am_anextPy_am_awaitPy_am_sendPy_bf_getbufferPy_bf_releasebufferPy_bufferPy_intptr_tPy_mod_createPy_mod_execPy_mod_gilPy_mod_multiple_interpretersPy_mp_ass_subscriptPy_mp_lengthPy_mp_subscriptPy_nb_absolutePy_nb_addPy_nb_andPy_nb_boolPy_nb_divmodPy_nb_floatPy_nb_floor_dividePy_nb_indexPy_nb_inplace_addPy_nb_inplace_andPy_nb_inplace_floor_dividePy_nb_inplace_lshiftPy_nb_inplace_matrix_multiplyPy_nb_inplace_multiplyPy_nb_inplace_orPy_nb_inplace_powerPy_nb_inplace_remainderPy_nb_inplace_rshiftPy_nb_inplace_subtractPy_nb_inplace_true_dividePy_nb_inplace_xorPy_nb_intPy_nb_invertPy_nb_lshiftPy_nb_matrix_multiplyPy_nb_multiplyPy_nb_negativePy_nb_orPy_nb_positivePy_nb_powerPy_nb_remainderPy_nb_rshiftPy_nb_subtractPy_nb_true_dividePy_nb_xorPy_sq_ass_itemPy_sq_concatPy_sq_containsPy_sq_inplace_concatPy_sq_inplace_repeatPy_sq_itemPy_sq_lengthPy_sq_repeatPy_ssize_tPy_tp_allocPy_tp_basePy_tp_basesPy_tp_callPy_tp_clearPy_tp_deallocPy_tp_delPy_tp_descr_getPy_tp_descr_setPy_tp_docPy_tp_finalizePy_tp_freePy_tp_getattrPy_tp_getattroPy_tp_getsetPy_tp_hashPy_tp_initPy_tp_is_gcPy_tp_iterPy_tp_iternextPy_tp_membersPy_tp_methodsPy_tp_newPy_tp_reprPy_tp_richcomparePy_tp_setattrPy_tp_setattroPy_tp_strPy_tp_tokenPy_tp_traversePy_tp_vectorcallPy_uintptr_tallocfuncbinaryfuncdescrgetfuncdescrsetfuncdestructorgetattrfuncgetattrofuncgetbufferprocgetiterfuncgetterhashfuncinitprocinquiryiternextfunclenfuncnewfuncobjobjargprocobjobjprocreleasebufferprocreprfuncrichcmpfuncsetattrfuncsetattrofuncsetterssizeargfuncssizeobjargprocssizessizeargfuncssizessizeobjargprocsymtableternaryfunctraverseprocunaryfuncvectorcallfuncvisitproc
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/c-api/stable.html