import 和 from 调用
module 目录有calc.py 和 test.py 两个文件
calc.py文件内容:
def add(x,z):
return x+z
def sub(x,z):
return x-z
test.py文件调用:
import calc #默认是同级目录下面查找
print(calc.add(1,2))
from calc import sub
print(sub(10,5))
导入模块按照下面方式查找
import sys
print(sys.path)
['D:\Study\module', 'D:\Study','C:\Program Files (x86)\Python36-32\python36.zip', 'C:\Program Files (x86)\Python36-32\DLLs', 'C:\Program Files (x86)\Python36-32\lib', 'C:\Program Files (x86)\Python36-32', 'C:\Program Files (x86)\Python36-32\lib\site-packages', 'C:\Program Files\JetBrains\PyCharm 2018.1.1\helpers\pycharm_matplotlib_backend']
总结下:
执行py文件的,执行文件的中的import 模块,只会导入当前执行文件的路劲导入文件,不会去其他目录查找(除系统提供的目录外).
例: 有如下一个目录结构的
calc文件内容如下:
test文件内容如下:
a文件内容如下:
调用:a.py 发现会报错
为什么报错了?
a.py --> 导入 from module import test (执行module目录中test文件) --> test 文件 import calc (报错) --> 因为当前执行的a.py文件 在当前目录找到calc(就是吧test这文件的内容拿到当前执行py里面来执行)
我们执行a.py文件的时候,只会找当前目录的模块文件,虽然我们导入module文件中的test文件,test文件有import calc模块(import calc.py文件);但是最终还是报错,这是因为我执行的py文件的是a.py ;而test中的import calc只是一个引入文件,并不是执行文件,解释器找到这层的时候,只会按照执行文件这层目录去导入文件,所以解释器只认识a,py这层文件,这时就报错了.这就是上面总结的,反复强调 执行py文件的,执行文件的中的import 模块,解释器只会导入当前执行文件的路劲导入文件,不会去其他目录查找(除系统提供的目录外),
如何修改:
test.py文件中的import calc 修改为 from module import calc 修改完就正常了