Стабильность API C
Если не указано иное, API C Python охватывается Политикой обратной совместимости, PEP 387. Большинство изменений в нем обеспечивают исходную совместимость (обычно, путем добавления нового API). Изменения существующего API или удаление API выполняются только после периода устаревания или для исправления серьезных проблем.
Интерфейс приложения двоичных файлов (ABI) CPython совместим как вперед, так и назад при переходе между младшими версиями (если они скомпилированы одинаковым способом; см. Рассмотрение платформ ниже). Таким образом, код, скомпилированный для Python 3.10.0, будет работать на 3.10.8 и наоборот, но потребует отдельной компиляции для 3.9.x и 3.11.x.
Существует два уровня API C с разными ожиданиями стабильности:
-
Нестабильный API, может изменяться в младших версиях без периода устаревания. Он отмечается префиксом
PyUnstableв именах. -
Ограниченный API, совместим между несколькими младшими версиями. Когда
Py_LIMITED_APIопределен, только этот подмножество экспонируется изPython.h.
Эти вопросы обсуждаются более подробно ниже.
Имена с префиксом подчеркивания, такие как _Py_InternalState, являются закрытым API, который может изменяться без предварительного уведомления даже в исправительных выпусках. Если вам необходимо использовать этот API, рассмотрите возможность обратиться к разработчикам CPython, чтобы обсудить добавление публичного API для вашего случая использования.
Нестабильный API C
Любой API с именем, имеющим префикс PyUnstable, раскрывает детали реализации CPython и может меняться в каждом выпуске младшей версии (например, от 3.9 до 3.10) без предупреждений об устаревании. Однако он не будет изменяться в исправительных выпусках (например, от 3.10.0 до 3.10.1).
В целом, он предназначен для специализированных инструментов низкого уровня, таких как отладчики.
Проекты, использующие этот API, должны следить за разработкой CPython и потратить дополнительные усилия на адаптацию к изменениям.
Стабильный интерфейс приложения двоичных файлов
Для простоты этот документ обсуждает расширения, но Ограниченный API и стабильный ABI работают одинаково для всех способов использования API – например, для встраивания Python.
Ограниченный API C
Python 3.2 представил Ограниченный API, подмножество API C Python. Расширения, использующие только Ограниченный API, могут быть скомпилированы один раз и работать с несколькими версиями Python. Содержимое Ограниченного API перечислено ниже.
-
Py_LIMITED_API -
Определите эту макрос перед включением
Python.hдля включения использования только Ограниченного API и выбора версии Ограниченного API.Определите
Py_LIMITED_APIзначениеPY_VERSION_HEX, соответствующее самой низкой версии Python, поддерживаемой вашим расширением. Расширение будет работать без перекомпиляции со всеми выпусками Python 3, начиная со специфицированной, и может использовать Ограниченный API, введенный до этой версии.Вместо прямого использования макроса
PY_VERSION_HEX, жестко закодируйте минимальную младшую версию (например,0x030A0000для Python 3.10) для стабильности при компиляции с будущими версиями Python.Вы также можете определить
Py_LIMITED_APIна3. Это работает так же, как и0x03020000(Python 3.2, версия, в которой был введен Ограниченный API).
Стабильный ABI
Для этого Python предоставляет Стабильный ABI: набор символов, которые останутся совместимыми между версиями Python 3.x.
Стабильный ABI содержит символы, экспонированные в Ограниченном API, но также и другие – например, функции, необходимые для поддержки более ранних версий Ограниченного API.
В Windows расширения, использующие Стабильный ABI, должны быть связаны с python3.dll вместо библиотеки, специфичной для версии, такой как python39.dll.
На некоторых платформах Python будет искать и загружать файлы общих библиотек, имеющие тег abi3 (например, mymodule.abi3.so). Он не проверяет, соответствуют ли такие расширения Стабильному ABI. Пользователь (или его инструменты пакетирования) должен убедиться, что, например, расширения, созданные с Ограниченным API 3.10+, не устанавливаются для более ранних версий Python.
Все функции в Стабильном ABI присутствуют как функции в общей библиотеке Python, а не только как макросы. Это делает их доступными из языков, не использующих препроцессор C.
Область применения и производительность Ограниченного API
Цель Ограниченного API состоит в том, чтобы позволить все, что возможно с полным API C, но, возможно, с потерей производительности.
Например, хотя PyList_GetItem() доступен, его «небезопасная» макро-версия PyList_GET_ITEM() нет. Макрос может быть быстрее, потому что он может полагаться на детали реализации объекта списка, специфичные для версии.
Без определения Py_LIMITED_API, некоторые функции API C инлайнизированы или заменены макросами. Определение 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 включает в себя следующие элементы:
PY_VECTORCALL_ARGUMENTS_OFFSETPyAIter_Check()PyArg_Parse()PyArg_ParseTuple()PyArg_ParseTupleAndKeywords()PyArg_UnpackTuple()PyArg_VaParse()PyArg_VaParseTupleAndKeywords()PyArg_ValidateKeywordArguments()PyBaseObject_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_TypePyCFunctionPyCFunctionWithKeywordsPyCFunction_Call()PyCFunction_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_Type
PyDictProxy_New()PyDictProxy_TypePyDictRevIterItem_TypePyDictRevIterKey_TypePyDictRevIterValue_TypePyDictValues_TypePyDict_Clear()PyDict_Contains()PyDict_Copy()PyDict_DelItem()PyDict_DelItemString()PyDict_GetItem()PyDict_GetItemString()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_AcquireLock()PyEval_AcquireThread()PyEval_CallFunction()PyEval_CallMethod()PyEval_CallObjectWithKeywords()PyEval_EvalCode()PyEval_EvalCodeEx()PyEval_EvalFrame()PyEval_EvalFrameEx()PyEval_GetBuiltins()PyEval_GetFrame()PyEval_GetFuncDesc()PyEval_GetFuncName()PyEval_GetGlobals()PyEval_GetLocals()PyEval_InitThreads()PyEval_ReleaseLock()PyEval_ReleaseThread()
PyEval_RestoreThread()PyEval_SaveThread()PyEval_ThreadsInitialized()PyExc_ArithmeticErrorPyExc_AssertionErrorPyExc_AttributeErrorPyExc_BaseExceptionPyExc_BaseExceptionGroupPyExc_BlockingIOErrorPyExc_BrokenPipeErrorPyExc_BufferErrorPyExc_BytesWarningPyExc_ChildProcessErrorPyExc_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_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_Send()PyListIter_TypePyListRevIter_TypePyList_Append()PyList_AsTuple()
PyList_GetItem()PyList_GetSlice()PyList_Insert()PyList_New()PyList_Reverse()PyList_SetItem()PyList_SetSlice()PyList_Size()PyList_Sort()PyList_TypePyLongObjectPyLongRangeIter_TypePyLong_AsDouble()PyLong_AsLong()PyLong_AsLongAndOverflow()PyLong_AsLongLong()PyLong_AsLongLongAndOverflow()PyLong_AsSize_t()PyLong_AsSsize_t()PyLong_AsUnsignedLong()PyLong_AsUnsignedLongLong()PyLong_AsUnsignedLongLongMask()PyLong_AsUnsignedLongMask()PyLong_AsVoidPtr()PyLong_FromDouble()PyLong_FromLong()PyLong_FromLongLong()PyLong_FromSize_t()PyLong_FromSsize_t()PyLong_FromString()PyLong_FromUnsignedLong()PyLong_FromUnsignedLongLong()PyLong_FromVoidPtr()PyLong_GetInfo()PyLong_TypePyMap_TypePyMapping_Check()PyMapping_GetItemString()PyMapping_HasKey()PyMapping_HasKeyString()PyMapping_Items()PyMapping_Keys()PyMapping_Length()PyMapping_SetItemString()PyMapping_Size()PyMapping_Values()PyMem_Calloc()PyMem_Free()PyMem_Malloc()PyMem_Realloc()PyMemberDefPyMemberDescr_TypePyMember_GetOne()PyMember_SetOne()PyMemoryView_FromBuffer()PyMemoryView_FromMemory()PyMemoryView_FromObject()PyMemoryView_GetContiguous()PyMemoryView_TypePyMethodDefPyMethodDescr_TypePyModuleDefPyModuleDef_BasePyModuleDef_Init()PyModuleDef_TypePyModule_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_AsCharBuffer()PyObject_AsFileDescriptor()PyObject_AsReadBuffer()PyObject_AsWriteBuffer()PyObject_Bytes()PyObject_Call()PyObject_CallFunction()PyObject_CallFunctionObjArgs()PyObject_CallMethod()PyObject_CallMethodObjArgs()PyObject_CallNoArgs()PyObject_CallObject()PyObject_Calloc()PyObject_CheckBuffer()PyObject_CheckReadBuffer()PyObject_ClearWeakRefs()PyObject_CopyData()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_GetTypeData()PyObject_HasAttr()PyObject_HasAttrString()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_AddWarnOption()PySys_AddWarnOptionUnicode()PySys_AddXOption()PySys_FormatStderr()PySys_FormatStdout()PySys_GetObject()PySys_GetXOptions()PySys_HasWarnOptions()PySys_ResetWarnOptions()PySys_SetArgv()PySys_SetArgvEx()PySys_SetObject()PySys_SetPath()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_FromMetaclass()PyType_FromModuleAndSpec()PyType_FromSpec()PyType_FromSpecWithBases()PyType_GenericAlloc()PyType_GenericNew()PyType_GetFlags()PyType_GetModule()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_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_NewProxy()PyWeakref_NewRef()PyWrapperDescr_TypePyWrapper_New()PyZip_TypePy_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_GenericAliasType
Py_GetBuildInfo()Py_GetCompiler()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_IsInitialized()Py_IsNone()Py_IsTrue()Py_LeaveRecursiveCall()Py_Main()Py_MakePendingCalls()Py_NewInterpreter()Py_NewRef()Py_ReprEnter()Py_ReprLeave()Py_SetPath()Py_SetProgramName()Py_SetPythonHome()Py_SetRecursionLimit()Py_UCS4Py_UNBLOCK_THREADSPy_UTF8ModePy_VaBuildValue()Py_VersionPy_XNewRef()Py_bufferPy_intptr_tPy_ssize_tPy_uintptr_tallocfuncbinaryfuncdescrgetfuncdescrsetfuncdestructorgetattrfuncgetattrofuncgetbufferprocgetiterfuncgetterhashfuncinitprocinquiryiternextfunclenfuncnewfuncobjobjargprocobjobjprocreleasebufferprocreprfuncrichcmpfuncsetattrfuncsetattrofuncsetterssizeargfuncssizeobjargprocssizessizeargfuncssizessizeobjargprocsymtableternaryfunctraverseprocunaryfuncvectorcallfuncvisitproc
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/c-api/stable.html