Fix Python – What happens when using mutual or circular (cyclic) imports in Python?

Question

Asked By – Xolve

What will happen if two modules import each other?

To generalize the problem, what about the cyclic imports in Python?

Now we will see solution for issue: What happens when using mutual or circular (cyclic) imports in Python?


Answer

There was a really good discussion on this over at comp.lang.python last year. It answers your question pretty thoroughly.

Imports are pretty straightforward really. Just remember the following:

‘import’ and ‘from xxx import yyy’ are executable statements. They execute
when the running program reaches that line.

If a module is not in sys.modules, then an import creates the new module
entry in sys.modules and then executes the code in the module. It does not
return control to the calling module until the execution has completed.

If a module does exist in sys.modules then an import simply returns that
module whether or not it has completed executing. That is the reason why
cyclic imports may return modules which appear to be partly empty.

Finally, the executing script runs in a module named __main__, importing
the script under its own name will create a new module unrelated to
__main__.

Take that lot together and you shouldn’t get any surprises when importing
modules.

This question is answered By – Shane C. Mason

This answer is collected from stackoverflow and reviewed by FixPython community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0