前置:
sys.path是python的搜索模块的路径集。
以下是目录结构:
1、首先同一目录下的模块间调用:b目录下Math_3.py调用Math_4.py
1 import sys
2 print('the path of Math_3 is {}'.format(sys.path))
3 from Math_4 import Math_4
4 class Math_3:
5
6 def __init__(self, a, b):
7 self.a = a
8 self.b = b
9
10 def mul(self):
11 return self.a * self.b
12
13 m4 = Math_4(6, 2)
14 print('the value of m4 is {}'.format(m4.div()))
15
16 if __name__ == '__main__':
17 m3 = Math_3(3, 2)
18 print('the value of m3 is {}'.format(m3.mul()))
19
20 #运行结果
21 the path of Math_3 is ['D:\\PyEx\\math\\b', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages']
22 the value of m4 is 3.0
23 the value of m3 is 6
知识兔2、基于第1步同级别目录下的模块调用:b目录下Math_3.py调用a目录下的Math_2.py
1 import sys
2 #表示导入当前文件的上层目录到搜索路径中
3 sys.path.append('..')
4 print('the path of Math_3 is {}'.format(sys.path))
5 from a.Math_2 import Math_2
6 from Math_4 import Math_4
7 class Math_3:
8
9 def __init__(self, a, b):
10 self.a = a
11 self.b = b
12
13 def mul(self):
14 return self.a * self.b
15
16 m2 = Math_2(3, 1)
17 print('the value of m2 is {}'.format(m2.sub()))
18
19 m4 = Math_4(6, 2)
20 print('the value of m4 is {}'.format(m4.div()))
21
22 if __name__ == '__main__':
23 m3 = Math_3(3, 2)
24 print('the value of m3 is {}'.format(m3.mul()))
25
26 #运行结果
27 the path of Math_3 is ['D:\\PyEx\\math\\b', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages', '..']
28 the value of m2 is 2
29 the value of m4 is 3.0
30 the value of m3 is 6
知识兔3、基于第2步,最外层目录math下的test_math.py调用b目录下的Math_3.py
1 import sys
2 print('the path of test_math is {}'.format(sys.path))
3 from b.Math_3 import Math_3
4 m1 = Math_1(1, 2)
5 m3 = Math_3(4, 5)
6 print('the value of m3 is {}'.format(m3.mul()))
7
8 #运行结果:
9 the path of test_math is ['D:\\PyEx\\math', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages']
10 the path of Math_3 is ['D:\\PyEx\\math', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages', '..']
11 Traceback (most recent call last):
12 File "test_math.py", line 4, in <module>
13 from b.Math_3 import Math_3
14 File "D:\PyEx\math\b\Math_3.py", line 5, in <module>
15 from Math_4 import Math_4
16 ModuleNotFoundError: No module named 'Math_4'
知识兔运行结果报错,根据14、15行信息,原因是在Math_3.py中导入的同一目录下的Math_4.py出错了,通过分析运行结果中打印出来的sys.path,是由于程序搜索模块的路径集中不包含D:\\PyEx\\math\\b,所以修改Math_3.py的代码如下:
1 import sys
2 sys.path.append('..')
3 print('the path of Math_3 is {}'.format(sys.path))
4 from a.Math_2 import Math_2
5 #修改后
6 from b.Math_4 import Math_4
7 class Math_3:
8
9 def __init__(self, a, b):
10 self.a = a
11 self.b = b
12
13 def mul(self):
14 return self.a * self.b
15
16 m2 = Math_2(3, 1)
17 print('the value of m2 is {}'.format(m2.sub()))
18
19 m4 = Math_4(6, 2)
20 print('the value of m4 is {}'.format(m4.div()))
21
22 if __name__ == '__main__':
23 m3 = Math_3(3, 2)
24 print('the value of m3 is {}'.format(m3.mul()))
知识兔4、基于以上修改再次运行test_math.py文件,其结果如下
is ['D:\\PyEx\\math', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages']
the path of Math_3 is ['D:\\PyEx\\math', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages', '..']
the value of m2 is 2
the value of m4 is 3.0
the value of m1 is 3
the value of m3 is 20
知识兔