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 /Lib/importlib | |
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 'Lib/importlib')
-rw-r--r-- | Lib/importlib/_bootstrap.py | 12 |
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) |