summaryrefslogtreecommitdiffstats
path: root/Lib/importlib
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2016-01-22 23:25:50 (GMT)
committerBrett Cannon <brett@python.org>2016-01-22 23:25:50 (GMT)
commit849113af6ba96c36ffaaa9896c9a337eb3253b89 (patch)
treecbcbf462841260fbe63c30ed11776028c39ba74e /Lib/importlib
parent52c854a83819f1e5ec4aa907cdcc875b02a7ea07 (diff)
downloadcpython-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 'Lib/importlib')
-rw-r--r--Lib/importlib/_bootstrap.py12
1 files changed, 9 insertions, 3 deletions
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index 9adcf7b..f0a4e1c 100644
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -1032,11 +1032,17 @@ def _calc___package__(globals):
to represent that its proper value is unknown.
"""
+ package = globals.get('__package__')
spec = globals.get('__spec__')
- if spec is not None:
+ if package is not None:
+ if spec is not None and package != spec.parent:
+ _warnings.warn("__package__ != __spec__.parent "
+ f"({package!r} != {spec.parent!r})",
+ ImportWarning, stacklevel=3)
+ return package
+ elif spec is not None:
return spec.parent
- package = globals.get('__package__')
- if package is None:
+ else:
_warnings.warn("can't resolve package from __spec__ or __package__, "
"falling back on __name__ and __path__",
ImportWarning, stacklevel=3)