Стабильность API C
API C языка Python охвачен политикой обратной совместимости, PEP 387. Хотя API C будет изменяться с каждой промежуточной версией выпуска (например, с 3.9 до 3.10), большинство изменений будут совместимы на уровне исходного кода, обычно путём добавления новых API. Изменение существующего API или удаление API выполняется только после периода устаревания или для исправления серьёзных проблем.
Интерфейс прикладного бинарного кода (ABI) CPython совместим вперёд и назад в пределах одной промежуточной версии выпуска (если они скомпилированы одинаково; см. Учитывание особенностей платформы ниже). Таким образом, код, скомпилированный для Python 3.10.0, будет работать в Python 3.10.8 и наоборот, но потребует отдельной компиляции для 3.9.x и 3.10.x.
Имена, начинающиеся с подчёркивания, такие как _Py_InternalState, являются закрытым API, который может изменяться без предварительного уведомления даже в выпусках с исправлениями.
Стабильный интерфейс прикладного бинарного кода
Python 3.2 представил ограниченный API, подмножество API C языка Python. Расширения, использующие только ограниченный API, можно скомпилировать один раз и использовать с несколькими версиями Python. Содержимое ограниченного API перечислено ниже.
Для этого Python предоставляет стабильный ABI: набор символов, которые останутся совместимыми в разных версиях Python 3.x. Стабильный ABI содержит символы, экспонированные в ограниченном API, но также и другие – например, функции, необходимые для поддержки более старых версий ограниченного API.
(Для простоты в этом документе упоминаются расширения, но ограниченный API и стабильный ABI работают одинаково для всех применений API – например, для интеграции Python.)
-
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).
В 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 включает в себя следующие элементы:
PyAIter_Check()PyArg_Parse()PyArg_ParseTuple()PyArg_ParseTupleAndKeywords()PyArg_UnpackTuple()PyArg_VaParse()PyArg_VaParseTupleAndKeywords()PyArg_ValidateKeywordArguments()PyBaseObject_TypePyBool_FromLong()PyBool_TypePyByteArrayIter_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_TypePyDictProxy_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_ExceptionMatches()PyErr_Fetch()PyErr_Format()PyErr_FormatV()PyErr_GetExcInfo()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_SetImportError()PyErr_SetImportErrorSubclass()PyErr_SetInterrupt()PyErr_SetInterruptEx()PyErr_SetNone()PyErr_SetObject()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_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_TypeError
PyExc_UnboundLocalErrorPyExc_UnicodeDecodeErrorPyExc_UnicodeEncodeErrorPyExc_UnicodeErrorPyExc_UnicodeTranslateErrorPyExc_UnicodeWarningPyExc_UserWarningPyExc_ValueErrorPyExc_WarningPyExc_WindowsErrorPyExc_ZeroDivisionErrorPyExceptionClass_Name()PyException_GetCause()PyException_GetContext()PyException_GetTraceback()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_TypePyMemoryView_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_CheckReadBuffer()PyObject_ClearWeakRefs()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_GetItem()PyObject_GetIter()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()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()PySuper_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_FromModuleAndSpec()PyType_FromSpec()PyType_FromSpecWithBases()PyType_GenericAlloc()PyType_GenericNew()PyType_GetFlags()PyType_GetModule()
PyType_GetModuleState()PyType_GetSlot()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_GetSize()PyUnicode_InternFromString()PyUnicode_InternImmortal()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_sizePyWeakReferencePyWeakref_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_GenericAliasTypePy_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_XNewRef()Py_intptr_tPy_ssize_tPy_uintptr_tallocfuncbinaryfuncdescrgetfuncdescrsetfuncdestructorgetattrfunc
getattrofuncgetiterfuncgetterhashfuncinitprocinquiryiternextfunclenfuncnewfuncobjobjargprocobjobjprocreprfuncrichcmpfuncsetattrfuncsetattrofuncsetterssizeargfuncssizeobjargprocssizessizeargfuncssizessizeobjargprocsymtableternaryfunctraverseprocunaryfuncvisitproc
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/c-api/stable.html