1、問題
循環導入,代碼如下:

from c import c def b(): print('b')

from b import b def a(): # from b import b print('a') b()

from a import a def c(): print('c') a()

from c import c from a import a from b import b c() b() a()
然后執行start.py,發現報錯
Traceback (most recent call last): File "/home/felix/PycharmProjects/DRF/test/u.py", line 5, in <module> from c import c File "/home/felix/PycharmProjects/DRF/test/c.py", line 8, in <module> from a import a File "/home/felix/PycharmProjects/DRF/test/a.py", line 16, in <module> from b import b File "/home/felix/PycharmProjects/DRF/test/b.py", line 8, in <module> from c import c ImportError: cannot import name 'c'
原因分析:因為a導入b,b導入c,c導入a的時候,都還沒有執行到函數定義的代碼,所以找不到模塊。
2、解決方法一:
改用導入包的方式,不用導入具體函數的方式

import b def a(): print('a') b.b()

import c def b(): print('b')

import a def c(): print('c') a.a()

from c import c from a import a from b import b c() b() a()
3、解決方法二:
在函數內導入,不在全局導入

def a(): print('a') from b import b b()

import c def b(): print('b')

def c(): print('c') from a import a a()

from c import c from a import a from b import b c() b() a()
4、解決方案三:
重構代碼,合並

def b(): print('b') def a(): print('a') b() def c(): print('c') from a import a a()

from abc_combine import a, b, c c() b() a()
循環導入問題的解決方案有三種,推薦方案三重構代碼,如果實在不想重構代碼,建議方案二。