When or why to use relative imports in Python

Each Answer to this Q is separated by one/two green lines.

Are there any rules or guidelines concerning when to use relative imports in Python? I see them in use all the time, such as in the Flask web framework. When searching for this topic, I only see articles on how to use relative imports, but not why.

So is there some special benefit to using:

from . import x

rather than:

from package import x

Moreover, I noticed that a related SO post mentions that relative imports are discouraged. Yet people still continue to use them.

Check out PEP 328’s section on relative imports

The rationale seems to be as written:

Several use cases were presented, the most important of which is being able to rearrange the structure of large packages without having to edit sub-packages. In addition, a module inside a package can’t easily import itself without relative imports.

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .