Add a note to PEP 338 about the use of relative imports
This commit is contained in:
parent
4939886cb8
commit
f4ddb4ef6e
33
pep-0338.txt
33
pep-0338.txt
|
@ -180,6 +180,39 @@ deleting ``sys.argv[0]`` (which refers to the ``runpy`` module itself)
|
||||||
and then invokes ``run_module(sys.argv[0], run_name="__main__",
|
and then invokes ``run_module(sys.argv[0], run_name="__main__",
|
||||||
alter_sys=True)``.
|
alter_sys=True)``.
|
||||||
|
|
||||||
|
Relative Imports
|
||||||
|
================
|
||||||
|
|
||||||
|
2.5b1 showed an annoying interaction between this PEP and PEP 328 -
|
||||||
|
explicit relative imports don't work from a main module, because
|
||||||
|
relative imports rely on ``__name__`` to determine the current module's
|
||||||
|
position in the package hierarchy.
|
||||||
|
|
||||||
|
Accordingly, the operation of ``run_module()`` was modified so that
|
||||||
|
another special variable ``__module_name__`` was defined in the
|
||||||
|
namespace of the module being executed. This variable always holds
|
||||||
|
the true module name, even if ``__name__`` is set to something else
|
||||||
|
(like ``'__main__'``)
|
||||||
|
|
||||||
|
Modules that don't rely on relative imports can be used from a
|
||||||
|
package as a main module without any changes. In order to both use
|
||||||
|
relative imports and also be usable as a main module, a module in a
|
||||||
|
package will currently need to use a structure similar to the
|
||||||
|
following::
|
||||||
|
|
||||||
|
# Docstring and any future statements
|
||||||
|
_is_main = False
|
||||||
|
if __name__ == "__main__":
|
||||||
|
_is_main = True
|
||||||
|
__name__ = __module_name__
|
||||||
|
|
||||||
|
# Support module section, including relative imports
|
||||||
|
|
||||||
|
if _is_main:
|
||||||
|
# Main module section
|
||||||
|
|
||||||
|
That said, Guido's recommended solution is to avoid using relative
|
||||||
|
imports in the first place.
|
||||||
|
|
||||||
Resolved Issues
|
Resolved Issues
|
||||||
================
|
================
|
||||||
|
|
Loading…
Reference in New Issue