循環インポートを行うとき、Python にはトリッキーなコーナー ケースがあります。次のように、"import ..." 形式の import ステートメントを使用する場合:
# a.py
import b
def method_a():
print "Method A called"
def call_b_from_a():
b.method_b()
# b.py
import c
def method_b():
print "Method B called"
def call_c_from_b():
c.method_c()
# c.py
import a
def method_c():
print "Method C called"
def call_a_from_c():
a.method_a()
次に、次のようなことができます。
>>> import a
>>> a.call_b_from_a()
Method B called
b と c についても同様です。要するに、すべてが機能します。ただし、「from ... import ...」形式の import ステートメントを使用すると、次のようになります。
# a.py
from b import method_b
def method_a():
print "Method A called"
def call_b_from_a():
method_b()
# b.py
from c import method_c
def method_b():
print "Method B called"
def call_c_from_b():
method_c()
# c.py
from a import method_a
def method_c():
print "Method C called"
def call_a_from_c():
method_a()
次に、次のようなエラーが発生します。
>>> import a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "a.py", line 2, in <module>
from b import method_b
File "b.py", line 2, in <module>
from c import method_c
File "c.py", line 2, in <module>
from a import method_a
ImportError: cannot import name method_a
つまり、循環インポートを使用できますが、まれなケースがいくつかあります。あなたのコードを実際に見なくても、おそらくそれに関連していると思います。
今後の参考のために、使用している実際のコードを投稿すると、ほとんどの場合、より良い回答が得られます。