I don't understand the following from pep-0404
In Python 3, implicit relative imports within packages are no longer
available – only absolute imports and explicit relative imports are
supported. In addition, star imports (e.g. from x import *) are only
permitted in module level code.
What is a relative import?
In what other places star import was allowed in python2?
Please explain with examples.
Best Answer
Relative import happens whenever you are importing a package relative to the current script/package.
Consider the following tree for example:
Now, your
derived.py
requires something frombase.py
. In Python 2, you could do it like this (inderived.py
):Python 3 no longer supports that since it's not explicit whether you want the 'relative' or 'absolute'
base
. In other words, if there was a Python package namedbase
installed in the system, you'd get the wrong one.Instead it requires you to use explicit imports which explicitly specify location of a module on a path-alike basis. Your
derived.py
would look like:The leading
.
says 'importbase
from module directory'; in other words,.base
maps to./base.py
.Similarly, there is
..
prefix which goes up the directory hierarchy like../
(with..mod
mapping to../mod.py
), and then...
which goes two levels up (../../mod.py
) and so on.Please however note that the relative paths listed above were relative to directory where current module (
derived.py
) resides in, not the current working directory.@BrenBarn has already explained the star import case. For completeness, I will have to say the same ;).
For example, you need to use a few
math
functions but you use them only in a single function. In Python 2 you were permitted to be semi-lazy:Note that it already triggers a warning in Python 2:
In modern Python 2 code you should and in Python 3 you have to do either:
or: