[openstack-dev] HACKING and new-style relative imports

Kieran Spear kispear at gmail.com
Wed Jul 10 05:13:28 UTC 2013

On 10 July 2013 02:31, Monty Taylor <mordred at inaugust.com> wrote:
> On 07/09/2013 10:55 AM, Joe Gordon wrote:
>> On Tue, Jul 9, 2013 at 1:28 PM, Kieran Spear <kispear at gmail.com
>> <mailto:kispear at gmail.com>> wrote:
>>    Hi all,
>>    There's a review up to make Horizon pass H304 (no relative imports):
>>    https://review.openstack.org/#/c/35664/
>>    Old-style relative imports are dangerous, but I can't think of a
>>    good enough reason to forbid new-style imports, e.g.:
>>    from .views import IndexView
>>    instead of
>>    from openstack_dashboard.dashboards.project.images_and_snapshots.views \
>>          import IndexView
>>    particularly in Horizon where nesting is deep and you otherwise end
>>    up with many imports that won't fit into 80 characters. I think if
>>    we're going to make the change above the benefits would need to
>>    outweigh the effect on readability.
>>    There's some discussion on the review already, but I'd like to hear
>>    from a more general audience. Thoughts?
>> http://google-styleguide.googlecode.com/svn/trunk/pyguide.html#Imports
>> "Do not use relative names in imports. Even if the module is in the same
>> package, use the full package name. This helps prevent unintentionally
>> importing a package twice."
> From pep8:
> Relative imports for intra-package imports are highly discouraged.
> Always use the absolute package path for all imports. Even now that PEP
> 328 is fully implemented in Python 2.5, its style of explicit relative
> imports is actively discouraged; absolute imports are more portable and
> usually more readable.

In Horizon I think it's obvious that relative imports are more readable (and type-able) than the alternative. If portable is referring to moving code around, I think each style has portability benefits for both inter- and intra-package module moves, and there's a lot of overlap.

It sounds like this particular paragraph has been updated to account for PEP328 without considering why new-style imports should be discouraged.

There was a thread on python-dev a few years ago about the same issue:


On 10/5/2010 2:21 PM, Guido van Rossum wrote:
> On Tue, Oct 5, 2010 at 11:17 AM, Darren Dale<dsdale24 at gmail.com>  wrote:
>> The issue is implementing a PEP with nice support for relative
>> imports, and then documenting that it should never be used.
> Isn't this mostly historical? Until the new relative-import syntax was
> implemented there were various problems with relative imports. The
> short-term solution was to recommend not using them. The long-term
> solution was to implement an unambiguous syntax. Now it is time to
> withdraw the anti-recommendation. Of course, without going overboard
> -- I still find them an acquired taste; but they have their place.

But nothing ever came of the bug:

> Monty

More information about the OpenStack-dev mailing list