模块的循环导入问题 一、什么是循环导入 两个模块互相导入,就形成了导入循环,比如下面的这种情况 print (x) from m2 import xy = 20 m1.py print (y) from m1 import yx = 1 m2.py 如果运行m1.py,则会产
print(x) from m2 import x y = 20m1.py
print(y) from m1 import y x = 1m2.py
如果运行m1.py,则会产生`ImportError: cannot import name ‘y`
如果运行m2.py,则会产生`ImportError: cannot import name ‘x`
所以根本原因是:在导入的时候,m1需要访问m2的变量y,但是y没有初始化完成
所以解决方法有两个:
1 print(x) 2 3 def func1(): 4 from m2 import x 5 print(x) 6 7 y =20m1.py
1 print(y) 2 3 def func1(): 4 from m1 import y 5 print(y) 6 7 x = 1m2.py
1 print(x) 2 3 y = 20 4 from m2 import xm1.py
1 print(y) 2 3 x = 1 4 from m1 import ym2.py
模块的路径搜索
一、模块的的搜索路径顺序
- 先从内存中已经导入的模块中寻找
- 内置的模块
- 自定制的函数中找
- 环境变量sys.path中找
主要记住未来项目的执行文件一定要弄一个环境变量