[Python-ideas] Avoid circular import

Sven Marnach sven at marnach.net
Tue Apr 10 15:56:36 CEST 2012


Oleg Broytman schrieb am Tue, 10. Apr 2012, um 16:03:15 +0400:
>    I didn't and do not recommend merging code into one huge module. Call
> me dogmatic but I recommend to refactor and move common parts to avoid
> circular import.

I actually did ran into cases where this was not possible.  (I just
wrote a lengthy description of such a case, but I figured it wasn't
too helpful, so it's not included here.)

A point to consider is that there are cases of circular imports that
used to work fine with implicit relative imports.  When using explicit
relative imports though, they would stop working -- see [1] for a
minimal example demonstrating this problem.

[1]: http://stackoverflow.com/questions/6351805/cyclic-module-dependencies-and-relative-imports-in-python

This issue can be easily overcome with function-level imports, but
some people don't like function-level imports either.

The same issue turned up when porting the Python Imaging Library to
Python 3.  PIL uses implicit relative, circular imports which have to
be turned into function-level imports to work properly on Python 3,
see [2] for details.

[2]: https://github.com/sloonz/pil-py3k/pull/2

Cheers,
    Sven



More information about the Python-ideas mailing list