diff options
author | Brett Cannon <brett@python.org> | 2016-01-22 23:25:50 (GMT) |
---|---|---|
committer | Brett Cannon <brett@python.org> | 2016-01-22 23:25:50 (GMT) |
commit | 849113af6ba96c36ffaaa9896c9a337eb3253b89 (patch) | |
tree | cbcbf462841260fbe63c30ed11776028c39ba74e /Doc | |
parent | 52c854a83819f1e5ec4aa907cdcc875b02a7ea07 (diff) | |
download | cpython-849113af6ba96c36ffaaa9896c9a337eb3253b89.zip cpython-849113af6ba96c36ffaaa9896c9a337eb3253b89.tar.gz cpython-849113af6ba96c36ffaaa9896c9a337eb3253b89.tar.bz2 |
Issue #25791: Warn when __package__ != __spec__.parent.
In a previous change, __spec__.parent was prioritized over
__package__. That is a backwards-compatibility break, but we do
eventually want __spec__ to be the ground truth for module details. So
this change reverts the change in semantics and instead raises an
ImportWarning when __package__ != __spec__.parent to give people time
to adjust to using spec objects.
Diffstat (limited to 'Doc')
-rw-r--r-- | Doc/reference/import.rst | 18 | ||||
-rw-r--r-- | Doc/whatsnew/3.6.rst | 6 |
2 files changed, 17 insertions, 7 deletions
diff --git a/Doc/reference/import.rst b/Doc/reference/import.rst index a162851..56049ce 100644 --- a/Doc/reference/import.rst +++ b/Doc/reference/import.rst @@ -554,20 +554,30 @@ the module. details. This attribute is used instead of ``__name__`` to calculate explicit - relative imports for main modules -- as defined in :pep:`366` -- - when ``__spec__`` is not defined. + relative imports for main modules, as defined in :pep:`366`. It is + expected to have the same value as ``__spec__.parent``. + + .. versionchanged:: 3.6 + The value of ``__package__`` is expected to be the same as + ``__spec__.parent``. .. attribute:: __spec__ The ``__spec__`` attribute must be set to the module spec that was - used when importing the module. This is used primarily for - introspection and during reloading. Setting ``__spec__`` + used when importing the module. Setting ``__spec__`` appropriately applies equally to :ref:`modules initialized during interpreter startup <programs>`. The one exception is ``__main__``, where ``__spec__`` is :ref:`set to None in some cases <main_spec>`. + When ``__package__`` is not defined, ``__spec__.parent`` is used as + a fallback. + .. versionadded:: 3.4 + .. versionchanged:: 3.6 + ``__spec__.parent`` is used as a fallback when ``__package__`` is + not defined. + .. attribute:: __path__ If the module is a package (either regular or namespace), the module diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst index 8064537..5872cc0 100644 --- a/Doc/whatsnew/3.6.rst +++ b/Doc/whatsnew/3.6.rst @@ -274,9 +274,9 @@ Changes in the Python API :mod:`wave`. This means they will export new symbols when ``import *`` is used. See :issue:`23883`. -* When performing a relative import, ``__spec__.parent`` is used - is ``__spec__`` is defined instead of ``__package__``. - (Contributed by Rose Ames in :issue:`25791`.) +* When performing a relative import, if ``__package__`` does not compare equal + to ``__spec__.parent`` then :exc:`ImportWarning` is raised. + (Contributed by Brett Cannon in :issue:`25791`.) Changes in the C API |