summaryrefslogtreecommitdiffstats
path: root/Doc
diff options
context:
space:
mode:
authorGéry Ogam <gery.ogam@gmail.com>2021-11-16 19:59:45 (GMT)
committerGitHub <noreply@github.com>2021-11-16 19:59:45 (GMT)
commitd7e210070f915d8df5fa863ecba8628304ee1ded (patch)
tree578e8c0fddee4cedc47cb29ef82e4841835e619d /Doc
parentdf4ae55e66e34ea8de6a34f0b104871ddaf35d53 (diff)
downloadcpython-d7e210070f915d8df5fa863ecba8628304ee1ded.zip
cpython-d7e210070f915d8df5fa863ecba8628304ee1ded.tar.gz
cpython-d7e210070f915d8df5fa863ecba8628304ee1ded.tar.bz2
bpo-37800: Clean up importlib documentation for some module attributes (GH-10016)
Automerge-Triggered-By: GH:brettcannon
Diffstat (limited to 'Doc')
-rw-r--r--Doc/library/importlib.rst140
1 files changed, 77 insertions, 63 deletions
diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst
index 5b4fba3..6b71e64 100644
--- a/Doc/library/importlib.rst
+++ b/Doc/library/importlib.rst
@@ -383,11 +383,11 @@ ABC hierarchy::
See :pep:`302` for the exact definition for a loader.
Loaders that wish to support resource reading should implement a
- ``get_resource_reader(fullname)`` method as specified by
+ :meth:`get_resource_reader` method as specified by
:class:`importlib.abc.ResourceReader`.
.. versionchanged:: 3.7
- Introduced the optional ``get_resource_reader()`` method.
+ Introduced the optional :meth:`get_resource_reader` method.
.. method:: create_module(spec)
@@ -405,17 +405,17 @@ ABC hierarchy::
An abstract method that executes the module in its own namespace
when a module is imported or reloaded. The module should already
- be initialized when ``exec_module()`` is called. When this method exists,
- :meth:`~importlib.abc.Loader.create_module` must be defined.
+ be initialized when :meth:`exec_module` is called. When this method exists,
+ :meth:`create_module` must be defined.
.. versionadded:: 3.4
.. versionchanged:: 3.6
- :meth:`~importlib.abc.Loader.create_module` must also be defined.
+ :meth:`create_module` must also be defined.
.. method:: load_module(fullname)
- A legacy method for loading a module. If the module cannot be
+ A legacy method for loading a module. If the module cannot be
loaded, :exc:`ImportError` is raised, otherwise the loaded module is
returned.
@@ -423,62 +423,64 @@ ABC hierarchy::
module should be used and reloaded.
Otherwise the loader should create a new module and insert it into
:data:`sys.modules` before any loading begins, to prevent recursion
- from the import. If the loader inserted a module and the load fails, it
+ from the import. If the loader inserted a module and the load fails, it
must be removed by the loader from :data:`sys.modules`; modules already
in :data:`sys.modules` before the loader began execution should be left
alone (see :func:`importlib.util.module_for_loader`).
- The loader should set several attributes on the module.
- (Note that some of these attributes can change when a module is
+ The loader should set several attributes on the module
+ (note that some of these attributes can change when a module is
reloaded):
- :attr:`__name__`
- The name of the module.
+ The module's fully-qualified name.
+ It is ``'__main__'`` for an executed module.
- :attr:`__file__`
- The path to where the module data is stored (not set for built-in
- modules).
+ The location the :term:`loader` used to load the module.
+ For example, for modules loaded from a .py file this is the filename.
+ It is not set on all modules (e.g. built-in modules).
- :attr:`__cached__`
- The path to where a compiled version of the module is/should be
- stored (not set when the attribute would be inappropriate).
+ The filename of a compiled version of the module's code.
+ It is not set on all modules (e.g. built-in modules).
- :attr:`__path__`
- A list of strings specifying the search path within a
- package. This attribute is not set on modules.
+ The list of locations where the package's submodules will be found.
+ Most of the time this is a single directory.
+ The import system passes this attribute to ``__import__()`` and to finders
+ in the same way as :attr:`sys.path` but just for the package.
+ It is not set on non-package modules so it can be used
+ as an indicator that the module is a package.
- :attr:`__package__`
- The fully-qualified name of the package under which the module was
- loaded as a submodule (or the empty string for top-level modules).
- For packages, it is the same as :attr:`__name__`. The
- :func:`importlib.util.module_for_loader` decorator can handle the
- details for :attr:`__package__`.
+ The fully-qualified name of the package the module is in (or the
+ empty string for a top-level module).
+ If the module is a package then this is the same as :attr:`__name__`.
- :attr:`__loader__`
- The loader used to load the module. The
- :func:`importlib.util.module_for_loader` decorator can handle the
- details for :attr:`__package__`.
+ The :term:`loader` used to load the module.
When :meth:`exec_module` is available then backwards-compatible
functionality is provided.
.. versionchanged:: 3.4
Raise :exc:`ImportError` when called instead of
- :exc:`NotImplementedError`. Functionality provided when
+ :exc:`NotImplementedError`. Functionality provided when
:meth:`exec_module` is available.
.. deprecated:: 3.4
The recommended API for loading a module is :meth:`exec_module`
- (and :meth:`create_module`). Loaders should implement
- it instead of load_module(). The import machinery takes care of
- all the other responsibilities of load_module() when exec_module()
- is implemented.
+ (and :meth:`create_module`). Loaders should implement it instead of
+ :meth:`load_module`. The import machinery takes care of all the
+ other responsibilities of :meth:`load_module` when
+ :meth:`exec_module` is implemented.
.. method:: module_repr(module)
- A legacy method which when implemented calculates and returns the
- given module's repr, as a string. The module type's default repr() will
- use the result of this method as appropriate.
+ A legacy method which when implemented calculates and returns the given
+ module's representation, as a string. The module type's default
+ :meth:`__repr__` will use the result of this method as appropriate.
.. versionadded:: 3.3
@@ -1420,69 +1422,80 @@ find and load modules.
.. class:: ModuleSpec(name, loader, *, origin=None, loader_state=None, is_package=None)
A specification for a module's import-system-related state. This is
- typically exposed as the module's ``__spec__`` attribute. In the
+ typically exposed as the module's :attr:`__spec__` attribute. In the
descriptions below, the names in parentheses give the corresponding
- attribute available directly on the module object.
- E.g. ``module.__spec__.origin == module.__file__``. Note however that
+ attribute available directly on the module object,
+ e.g. ``module.__spec__.origin == module.__file__``. Note, however, that
while the *values* are usually equivalent, they can differ since there is
- no synchronization between the two objects. Thus it is possible to update
- the module's ``__path__`` at runtime, and this will not be automatically
- reflected in ``__spec__.submodule_search_locations``.
+ no synchronization between the two objects. For example, it is possible to update
+ the module's :attr:`__file__` at runtime and this will not be automatically
+ reflected in the module's :attr:`__spec__.origin`, and vice versa.
.. versionadded:: 3.4
.. attribute:: name
- (``__name__``)
+ (:attr:`__name__`)
- A string for the fully-qualified name of the module.
+ The module's fully-qualified name.
+ The :term:`finder` should always set this attribute to a non-empty string.
.. attribute:: loader
- (``__loader__``)
+ (:attr:`__loader__`)
- The :term:`Loader <loader>` that should be used when loading
- the module. :term:`Finders <finder>` should always set this.
+ The :term:`loader` used to load the module.
+ The :term:`finder` should always set this attribute.
.. attribute:: origin
- (``__file__``)
+ (:attr:`__file__`)
- Name of the place from which the module is loaded, e.g. "builtin" for
- built-in modules and the filename for modules loaded from source.
- Normally "origin" should be set, but it may be ``None`` (the default)
- which indicates it is unspecified (e.g. for namespace packages).
+ The location the :term:`loader` should use to load the module.
+ For example, for modules loaded from a .py file this is the filename.
+ The :term:`finder` should always set this attribute to a meaningful value
+ for the :term:`loader` to use. In the uncommon case that there is not one
+ (like for namespace packages), it should be set to ``None``.
.. attribute:: submodule_search_locations
- (``__path__``)
+ (:attr:`__path__`)
- List of strings for where to find submodules, if a package (``None``
- otherwise).
+ The list of locations where the package's submodules will be found.
+ Most of the time this is a single directory.
+ The :term:`finder` should set this attribute to a list, even an empty one, to indicate
+ to the import system that the module is a package. It should be set to ``None`` for
+ non-package modules. It is set automatically later to a special object for
+ namespace packages.
.. attribute:: loader_state
- Container of extra module-specific data for use during loading (or
- ``None``).
+ The :term:`finder` may set this attribute to an object containing additional,
+ module-specific data to use when loading the module. Otherwise it should be
+ set to ``None``.
.. attribute:: cached
- (``__cached__``)
+ (:attr:`__cached__`)
- String for where the compiled module should be stored (or ``None``).
+ The filename of a compiled version of the module's code.
+ The :term:`finder` should always set this attribute but it may be ``None``
+ for modules that do not need compiled code stored.
.. attribute:: parent
- (``__package__``)
+ (:attr:`__package__`)
- (Read-only) The fully-qualified name of the package under which the module
- should be loaded as a submodule (or the empty string for top-level modules).
- For packages, it is the same as :attr:`__name__`.
+ (Read-only) The fully-qualified name of the package the module is in (or the
+ empty string for a top-level module).
+ If the module is a package then this is the same as :attr:`name`.
.. attribute:: has_location
- Boolean indicating whether or not the module's "origin"
- attribute refers to a loadable location.
+ ``True`` if the spec's :attr:`origin` refers to a loadable location,
+ ``False`` otherwise. This value impacts how :attr:`origin` is interpreted
+ and how the module's :attr:`__file__` is populated.
+
:mod:`importlib.util` -- Utility code for importers
---------------------------------------------------
@@ -1574,8 +1587,9 @@ an :term:`importer`.
:exc:`ImportError` is raised if **name** is a relative module name but
**package** is a false value (e.g. ``None`` or the empty string).
- :exc:`ImportError` is also raised a relative name would escape its containing
- package (e.g. requesting ``..bacon`` from within the ``spam`` package).
+ :exc:`ImportError` is also raised if a relative name would escape its
+ containing package (e.g. requesting ``..bacon`` from within the ``spam``
+ package).
.. versionadded:: 3.3