mirror of
https://github.com/python/cpython.git
synced 2025-08-01 15:43:13 +00:00
gh-105922: Add PyImport_AddModuleRef() function (#105923)
* Add tests on PyImport_AddModuleRef(), PyImport_AddModule() and PyImport_AddModuleObject(). * pythonrun.c: Replace Py_XNewRef(PyImport_AddModule(name)) with PyImport_AddModuleRef(name).
This commit is contained in:
parent
7f97c8e367
commit
03f1a132ee
13 changed files with 150 additions and 25 deletions
|
@ -98,27 +98,40 @@ Importing Modules
|
|||
an exception set on failure (the module still exists in this case).
|
||||
|
||||
|
||||
.. c:function:: PyObject* PyImport_AddModuleRef(const char *name)
|
||||
|
||||
Return the module object corresponding to a module name.
|
||||
|
||||
The *name* argument may be of the form ``package.module``. First check the
|
||||
modules dictionary if there's one there, and if not, create a new one and
|
||||
insert it in the modules dictionary.
|
||||
|
||||
Return a :term:`strong reference` to the module on success. Return ``NULL``
|
||||
with an exception set on failure.
|
||||
|
||||
The module name *name* is decoded from UTF-8.
|
||||
|
||||
This function does not load or import the module; if the module wasn't
|
||||
already loaded, you will get an empty module object. Use
|
||||
:c:func:`PyImport_ImportModule` or one of its variants to import a module.
|
||||
Package structures implied by a dotted name for *name* are not created if
|
||||
not already present.
|
||||
|
||||
.. versionadded:: 3.13
|
||||
|
||||
|
||||
.. c:function:: PyObject* PyImport_AddModuleObject(PyObject *name)
|
||||
|
||||
Return the module object corresponding to a module name. The *name* argument
|
||||
may be of the form ``package.module``. First check the modules dictionary if
|
||||
there's one there, and if not, create a new one and insert it in the modules
|
||||
dictionary. Return ``NULL`` with an exception set on failure.
|
||||
|
||||
.. note::
|
||||
|
||||
This function does not load or import the module; if the module wasn't already
|
||||
loaded, you will get an empty module object. Use :c:func:`PyImport_ImportModule`
|
||||
or one of its variants to import a module. Package structures implied by a
|
||||
dotted name for *name* are not created if not already present.
|
||||
Similar to :c:func:`PyImport_AddModuleRef`, but return a :term:`borrowed
|
||||
reference` and *name* is a Python :class:`str` object.
|
||||
|
||||
.. versionadded:: 3.3
|
||||
|
||||
|
||||
.. c:function:: PyObject* PyImport_AddModule(const char *name)
|
||||
|
||||
Similar to :c:func:`PyImport_AddModuleObject`, but the name is a UTF-8
|
||||
encoded string instead of a Unicode object.
|
||||
Similar to :c:func:`PyImport_AddModuleRef`, but return a :term:`borrowed
|
||||
reference`.
|
||||
|
||||
|
||||
.. c:function:: PyObject* PyImport_ExecCodeModule(const char *name, PyObject *co)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue