模組物件¶
- PyTypeObjectPyModule_Type¶
- 為穩定 ABI 的一部分.
This instance of
PyTypeObjectrepresents the Python module type. Thisis exposed to Python programs astypes.ModuleType.
- intPyModule_Check(PyObject*p)¶
Return true ifp is a module object, or a subtype of a module object.This function always succeeds.
- intPyModule_CheckExact(PyObject*p)¶
Return true ifp is a module object, but not a subtype of
PyModule_Type. This function always succeeds.
- PyObject*PyModule_NewObject(PyObject*name)¶
- 回傳值:新的參照。 為穩定 ABI 的一部分 自 3.7 版本開始.
Return a new module object with
module.__name__set toname.The module's__name__,__doc__,__package__and__loader__attributes arefilled in (all but__name__are set toNone). The caller isresponsible for setting a__file__attribute.在失敗時回傳
NULL並設定例外。在 3.3 版被加入.
在 3.4 版的變更:
__package__和__loader__現在被設為None。
- PyObject*PyModule_New(constchar*name)¶
- 回傳值:新的參照。 為穩定 ABI 的一部分.
類似於
PyModule_NewObject(),但名稱是以 UTF-8 編碼的字串,而非 Unicode 物件。
- PyObject*PyModule_GetDict(PyObject*module)¶
- 回傳值:借用參照。 為穩定 ABI 的一部分.
Return the dictionary object that implementsmodule's namespace; this objectis the same as the
__dict__attribute of the module object.Ifmodule is not a module object (or a subtype of a module object),SystemErroris raised andNULLis returned.It is recommended extensions use other
PyModule_*andPyObject_*functions rather than directly manipulate a module's__dict__.The returned reference is borrowed from the module; it is valid untilthe module is destroyed.
- PyObject*PyModule_GetNameObject(PyObject*module)¶
- 回傳值:新的參照。 為穩定 ABI 的一部分 自 3.7 版本開始.
Returnmodule's
__name__value. If the module does notprovide one, or if it is not a string,SystemErroris raised andNULLis returned.在 3.3 版被加入.
- constchar*PyModule_GetName(PyObject*module)¶
- 為穩定 ABI 的一部分.
類似於
PyModule_GetNameObject(),但回傳以'utf-8'編碼的名稱。The returned buffer is only valid until the module is renamed or destroyed.Note that Python code may rename a module by setting its
__name__attribute.
- void*PyModule_GetState(PyObject*module)¶
- 為穩定 ABI 的一部分.
Return the "state" of the module, that is, a pointer to the block of memoryallocated at module creation time, or
NULL. SeePyModuleDef.m_size.
- PyModuleDef*PyModule_GetDef(PyObject*module)¶
- 為穩定 ABI 的一部分.
Return a pointer to the
PyModuleDefstruct from which the module wascreated, orNULLif the module wasn't created from a definition.On error, return
NULLwith an exception set.UsePyErr_Occurred()to tell this case apart from a missingPyModuleDef.
- PyObject*PyModule_GetFilenameObject(PyObject*module)¶
- 回傳值:新的參照。 為穩定 ABI 的一部分.
Return the name of the file from whichmodule was loaded usingmodule's
__file__attribute. If this is not defined, or if it is not astring, raiseSystemErrorand returnNULL; otherwise returna reference to a Unicode object.在 3.2 版被加入.
- constchar*PyModule_GetFilename(PyObject*module)¶
- 為穩定 ABI 的一部分.
類似於
PyModule_GetFilenameObject(),但回傳以 'utf-8' 編碼的檔案名稱。The returned buffer is only valid until the module's
__file__attributeis reassigned or the module is destroyed.在 3.2 版之後被棄用:
PyModule_GetFilename()raisesUnicodeEncodeErroronunencodable filenames, usePyModule_GetFilenameObject()instead.
模組定義¶
The functions in the previous section work on any module object, includingmodules imported from Python code.
Modules defined using the C API typically use amodule definition,PyModuleDef -- a statically allocated, constant “description" ofhow a module should be created.
The definition is usually used to define an extension's “main” module object(seeDefining extension modules for details).It is also used tocreate extension modules dynamically.
UnlikePyModule_New(), the definition allows management ofmodule state -- a piece of memory that is allocated and cleared togetherwith the module object.Unlike the module's Python attributes, Python code cannot replace or deletedata stored in module state.
- typePyModuleDef¶
- 為穩定 ABI 的一部分 (包含所有成員).
The module definition struct, which holds all information needed to createa module object.This structure must be statically allocated (or be otherwise guaranteedto be valid while any modules created from it exist).Usually, there is only one variable of this type for each extension module.
- PyModuleDef_Basem_base¶
Always initialize this member to
PyModuleDef_HEAD_INIT.
- constchar*m_name¶
Name for the new module.
- constchar*m_doc¶
Docstring for the module; usually a docstring variable created with
PyDoc_STRVARis used.
- Py_ssize_tm_size¶
Module state may be kept in a per-module memory area that can beretrieved with
PyModule_GetState(), rather than in static globals.This makes modules safe for use in multiple sub-interpreters.This memory area is allocated based onm_size on module creation,and freed when the module object is deallocated, after the
m_freefunction has been called, if present.Setting it to a non-negative value means that the module can bere-initialized and specifies the additional amount of memory it requiresfor its state.
Setting
m_sizeto-1means that the module does not supportsub-interpreters, because it has global state.Negativem_sizeis only allowed when usinglegacy single-phase initializationor whencreating modules dynamically.更多詳情請見PEP 3121。
- PyMethodDef*m_methods¶
A pointer to a table of module-level functions, described by
PyMethodDefvalues. Can beNULLif no functions are present.
- PyModuleDef_Slot*m_slots¶
An array of slot definitions for multi-phase initialization, terminated bya
{0,NULL}entry.When using legacy single-phase initialization,m_slots must beNULL.
- traverseprocm_traverse¶
A traversal function to call during GC traversal of the module object, or
NULLif not needed.This function is not called if the module state was requested but is notallocated yet. This is the case immediately after the module is createdand before the module is executed (
Py_mod_execfunction). Moreprecisely, this function is not called ifm_sizeis greaterthan 0 and the module state (as returned byPyModule_GetState())isNULL.在 3.9 版的變更:No longer called before the module state is allocated.
- inquirym_clear¶
A clear function to call during GC clearing of the module object, or
NULLif not needed.This function is not called if the module state was requested but is notallocated yet. This is the case immediately after the module is createdand before the module is executed (
Py_mod_execfunction). Moreprecisely, this function is not called ifm_sizeis greaterthan 0 and the module state (as returned byPyModule_GetState())isNULL.Like
PyTypeObject.tp_clear, this function is notalwayscalled before a module is deallocated. For example, when referencecounting is enough to determine that an object is no longer used,the cyclic garbage collector is not involved andm_freeis called directly.在 3.9 版的變更:No longer called before the module state is allocated.
- freefuncm_free¶
A function to call during deallocation of the module object, or
NULLif not needed.This function is not called if the module state was requested but is notallocated yet. This is the case immediately after the module is createdand before the module is executed (
Py_mod_execfunction). Moreprecisely, this function is not called ifm_sizeis greaterthan 0 and the module state (as returned byPyModule_GetState())isNULL.在 3.9 版的變更:No longer called before the module state is allocated.
- PyModuleDef_Basem_base¶
模組槽 (Module slots)¶
- typePyModuleDef_Slot¶
- intslot¶
A slot ID, chosen from the available values explained below.
- void*value¶
Value of the slot, whose meaning depends on the slot ID.
在 3.5 版被加入.
- intslot¶
The available slot types are:
- Py_mod_create¶
Specifies a function that is called to create the module object itself.Thevalue pointer of this slot must point to a function of the signature:
- PyObject*create_module(PyObject*spec,PyModuleDef*def)¶
The function receives a
ModuleSpecinstance, as defined inPEP 451, and the module definition.It should return a new module object, or set an errorand returnNULL.This function should be kept minimal. In particular, it should notcall arbitrary Python code, as trying to import the same module again mayresult in an infinite loop.
Multiple
Py_mod_createslots may not be specified in one moduledefinition.If
Py_mod_createis not specified, the import machinery will createa normal module object usingPyModule_New(). The name is taken fromspec, not the definition, to allow extension modules to dynamically adjustto their place in the module hierarchy and be imported under differentnames through symlinks, all while sharing a single module definition.There is no requirement for the returned object to be an instance of
PyModule_Type. Any type can be used, as long as it supportssetting and getting import-related attributes.However, onlyPyModule_Typeinstances may be returned if thePyModuleDefhas non-NULLm_traverse,m_clear,m_free; non-zerom_size; or slots other thanPy_mod_create.- PyObject*create_module(PyObject*spec,PyModuleDef*def)¶
- Py_mod_exec¶
Specifies a function that is called toexecute the module.This is equivalent to executing the code of a Python module: typically,this function adds classes and constants to the module.The signature of the function is:
If multiple
Py_mod_execslots are specified, they are processed in theorder they appear in them_slots array.
- Py_mod_multiple_interpreters¶
Specifies one of the following values:
- Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED¶
The module does not support being imported in subinterpreters.
- Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED¶
The module supports being imported in subinterpreters,but only when they share the main interpreter's GIL.(See隔離擴充模組.)
- Py_MOD_PER_INTERPRETER_GIL_SUPPORTED¶
The module supports being imported in subinterpreters,even when they have their own GIL.(See隔離擴充模組.)
This slot determines whether or not importing this modulein a subinterpreter will fail.
Multiple
Py_mod_multiple_interpretersslots may not be specifiedin one module definition.If
Py_mod_multiple_interpretersis not specified, the importmachinery defaults toPy_MOD_MULTIPLE_INTERPRETERS_SUPPORTED.在 3.12 版被加入.
- Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED¶
- Py_mod_gil¶
Specifies one of the following values:
- Py_MOD_GIL_USED¶
The module depends on the presence of the global interpreter lock (GIL),and may access global state without synchronization.
- Py_MOD_GIL_NOT_USED¶
The module is safe to run without an active GIL.
This slot is ignored by Python builds not configured with
--disable-gil. Otherwise, it determines whether or not importingthis module will cause the GIL to be automatically enabled. SeeFree-threaded CPython for more detail.Multiple
Py_mod_gilslots may not be specified in one module definition.If
Py_mod_gilis not specified, the import machinery defaults toPy_MOD_GIL_USED.在 3.13 版被加入.
- Py_MOD_GIL_USED¶
Creating extension modules dynamically¶
The following functions may be used to create a module outside of anextension'sinitialization function.They are also used insingle-phase initialization.
- PyObject*PyModule_Create(PyModuleDef*def)¶
- 回傳值:新的參照。
Create a new module object, given the definition indef.This is a macro that calls
PyModule_Create2()withmodule_api_version set toPYTHON_API_VERSION, ortoPYTHON_ABI_VERSIONif using thelimited API.
- PyObject*PyModule_Create2(PyModuleDef*def,intmodule_api_version)¶
- 回傳值:新的參照。 為穩定 ABI 的一部分.
Create a new module object, given the definition indef, assuming theAPI versionmodule_api_version. If that version does not match the versionof the running interpreter, a
RuntimeWarningis emitted.在失敗時回傳
NULL並設定例外。This function does not support slots.The
m_slotsmember ofdef must beNULL.備註
Most uses of this function should be using
PyModule_Create()instead; only use this if you are sure you need it.
- PyObject*PyModule_FromDefAndSpec(PyModuleDef*def,PyObject*spec)¶
- 回傳值:新的參照。
This macro calls
PyModule_FromDefAndSpec2()withmodule_api_version set toPYTHON_API_VERSION, ortoPYTHON_ABI_VERSIONif using thelimited API.在 3.5 版被加入.
- PyObject*PyModule_FromDefAndSpec2(PyModuleDef*def,PyObject*spec,intmodule_api_version)¶
- 回傳值:新的參照。 為穩定 ABI 的一部分 自 3.7 版本開始.
Create a new module object, given the definition indef and theModuleSpecspec, assuming the API versionmodule_api_version.If that version does not match the version of the running interpreter,a
RuntimeWarningis emitted.在失敗時回傳
NULL並設定例外。Note that this does not process execution slots (
Py_mod_exec).BothPyModule_FromDefAndSpecandPyModule_ExecDefmust be calledto fully initialize a module.備註
Most uses of this function should be using
PyModule_FromDefAndSpec()instead; only use this if you are sure you need it.在 3.5 版被加入.
- intPyModule_ExecDef(PyObject*module,PyModuleDef*def)¶
- 為穩定 ABI 的一部分 自 3.7 版本開始.
Process any execution slots (
Py_mod_exec) given indef.在 3.5 版被加入.
- PYTHON_API_VERSION¶
The C API version. Defined for backwards compatibility.
Currently, this constant is not updated in new Python versions, and is notuseful for versioning. This may change in the future.
- PYTHON_ABI_VERSION¶
Defined as
3for backwards compatibility.Currently, this constant is not updated in new Python versions, and is notuseful for versioning. This may change in the future.
支援的函式¶
The following functions are provided to help initialize a modulestate.They are intended for a module's execution slots (Py_mod_exec),the initialization function for legacysingle-phase initialization,or code that creates modules dynamically.
- intPyModule_AddObjectRef(PyObject*module,constchar*name,PyObject*value)¶
- 為穩定 ABI 的一部分 自 3.10 版本開始.
Add an object tomodule asname. This is a convenience function whichcan be used from the module's initialization function.
On success, return
0. On error, raise an exception and return-1.用法範例:
staticintadd_spam(PyObject*module,intvalue){PyObject*obj=PyLong_FromLong(value);if(obj==NULL){return-1;}intres=PyModule_AddObjectRef(module,"spam",obj);Py_DECREF(obj);returnres;}
To be convenient, the function accepts
NULLvalue with an exceptionset. In this case, return-1and just leave the raised exceptionunchanged.The example can also be written without checking explicitly ifobj is
NULL:staticintadd_spam(PyObject*module,intvalue){PyObject*obj=PyLong_FromLong(value);intres=PyModule_AddObjectRef(module,"spam",obj);Py_XDECREF(obj);returnres;}
Note that
Py_XDECREF()should be used instead ofPy_DECREF()inthis case, sinceobj can beNULL.The number of differentname strings passed to this functionshould be kept small, usually by only using statically allocated stringsasname.For names that aren't known at compile time, prefer calling
PyUnicode_FromString()andPyObject_SetAttr()directly.For more details, seePyUnicode_InternFromString(), which may beused internally to create a key object.在 3.10 版被加入.
- intPyModule_Add(PyObject*module,constchar*name,PyObject*value)¶
- 為穩定 ABI 的一部分 自 3.13 版本開始.
Similar to
PyModule_AddObjectRef(), but "steals" a referencetovalue.It can be called with a result of function that returns a new referencewithout bothering to check its result or even saving it to a variable.用法範例:
if(PyModule_Add(module,"spam",PyBytes_FromString(value))<0){gotoerror;}
在 3.13 版被加入.
- intPyModule_AddObject(PyObject*module,constchar*name,PyObject*value)¶
- 為穩定 ABI 的一部分.
類似於
PyModule_AddObjectRef(),但在成功時(如果回傳0)會偷走對value 的參照。The new
PyModule_Add()orPyModule_AddObjectRef()functions are recommended, since it iseasy to introduce reference leaks by misusing thePyModule_AddObject()function.備註
Unlike other functions that steal references,
PyModule_AddObject()only releases the reference tovalueon success.This means that its return value must be checked, and calling code must
Py_XDECREF()value manually on error.用法範例:
PyObject*obj=PyBytes_FromString(value);if(PyModule_AddObject(module,"spam",obj)<0){// If 'obj' is not NULL and PyModule_AddObject() failed,// 'obj' strong reference must be deleted with Py_XDECREF().// If 'obj' is NULL, Py_XDECREF() does nothing.Py_XDECREF(obj);gotoerror;}// PyModule_AddObject() stole a reference to obj:// Py_XDECREF(obj) is not needed here.
在 3.13 版之後被棄用:
PyModule_AddObject()已被軟性棄用。
- intPyModule_AddIntConstant(PyObject*module,constchar*name,longvalue)¶
- 為穩定 ABI 的一部分.
Add an integer constant tomodule asname. This convenience function can beused from the module's initialization function.Return
-1with an exception set on error,0on success.This is a convenience function that calls
PyLong_FromLong()andPyModule_AddObjectRef(); see their documentation for details.
- intPyModule_AddStringConstant(PyObject*module,constchar*name,constchar*value)¶
- 為穩定 ABI 的一部分.
Add a string constant tomodule asname. This convenience function can beused from the module's initialization function. The stringvalue must be
NULL-terminated.Return-1with an exception set on error,0on success.This is a convenience function that calls
PyUnicode_InternFromString()andPyModule_AddObjectRef();see their documentation for details.
- PyModule_AddIntMacro(module,macro)¶
Add an int constant tomodule. The name and the value are taken frommacro. For example
PyModule_AddIntMacro(module,AF_INET)adds the intconstantAF_INET with the value ofAF_INET tomodule.Return-1with an exception set on error,0on success.
- PyModule_AddStringMacro(module,macro)¶
將字串常數加入到module 中。
- intPyModule_AddType(PyObject*module,PyTypeObject*type)¶
- 為穩定 ABI 的一部分 自 3.10 版本開始.
Add a type object tomodule.The type object is finalized by calling internally
PyType_Ready().The name of the type object is taken from the last component oftp_nameafter dot.Return-1with an exception set on error,0on success.在 3.9 版被加入.
- intPyModule_AddFunctions(PyObject*module,PyMethodDef*functions)¶
- 為穩定 ABI 的一部分 自 3.7 版本開始.
Add the functions from the
NULLterminatedfunctions array tomodule.Refer to thePyMethodDefdocumentation for details on individualentries (due to the lack of a shared module namespace, module level"functions" implemented in C typically receive the module as their firstparameter, making them similar to instance methods on Python classes).This function is called automatically when creating a module from
PyModuleDef(such as when usingMulti-phase initialization,PyModule_Create, orPyModule_FromDefAndSpec).Some module authors may prefer defining functions in multiplePyMethodDefarrays; in that case they should call this functiondirectly.Thefunctions array must be statically allocated (or otherwise guaranteedto outlive the module object).
在 3.5 版被加入.
- intPyModule_SetDocString(PyObject*module,constchar*docstring)¶
- 為穩定 ABI 的一部分 自 3.7 版本開始.
Set the docstring formodule todocstring.This function is called automatically when creating a module from
PyModuleDef(such as when usingMulti-phase initialization,PyModule_Create, orPyModule_FromDefAndSpec).在 3.5 版被加入.
- intPyUnstable_Module_SetGIL(PyObject*module,void*gil)¶
- 這是不穩定 API,它可能在小版本發布中沒有任何警告地被變更。
Indicate thatmodule does or does not support running without the globalinterpreter lock (GIL), using one of the values from
Py_mod_gil. It must be called duringmodule's initializationfunction when usingLegacy single-phase initialization.If this function is not called during module initialization, theimport machinery assumes the module does not support running without theGIL. This function is only available in Python builds configured with--disable-gil.Return-1with an exception set on error,0on success.在 3.13 版被加入.
Module lookup (single-phase initialization)¶
The legacysingle-phase initializationinitialization scheme creates singleton modules that can be looked upin the context of the current interpreter. This allows the module object to beretrieved later with only a reference to the module definition.
These functions will not work on modules created using multi-phase initialization,since multiple such modules can be created from a single definition.
- PyObject*PyState_FindModule(PyModuleDef*def)¶
- 回傳值:借用參照。 為穩定 ABI 的一部分.
Returns the module object that was created fromdef for the current interpreter.This method requires that the module object has been attached to the interpreter state with
PyState_AddModule()beforehand. In case the corresponding module object is notfound or has not been attached to the interpreter state yet, it returnsNULL.
- intPyState_AddModule(PyObject*module,PyModuleDef*def)¶
- 為穩定 ABI 的一部分 自 3.3 版本開始.
Attaches the module object passed to the function to the interpreter state. This allowsthe module object to be accessible via
PyState_FindModule().Only effective on modules created using single-phase initialization.
Python calls
PyState_AddModuleautomatically after importing a modulethat usessingle-phase initialization,so it is unnecessary (but harmless) to call it from module initializationcode. An explicit call is needed only if the module's own init codesubsequently callsPyState_FindModule.The function is mainly intended for implementing alternative importmechanisms (either by calling it directly, or by referring to itsimplementation for details of the required state updates).If a module was attached previously using the samedef, it is replacedby the newmodule.
The caller must have anattached thread state.
成功時回傳
0,在失敗時回傳-1並設定例外。在 3.3 版被加入.
- intPyState_RemoveModule(PyModuleDef*def)¶
- 為穩定 ABI 的一部分 自 3.3 版本開始.
Removes the module object created fromdef from the interpreter state.Return
-1with an exception set on error,0on success.The caller must have anattached thread state.
在 3.3 版被加入.