part1 主程序与待导入模块在统一目录下
下面的介绍的前提
1、新建cc.py
2、假设已经存在aa.py,且cc.py与aa.py在同级目录下
3、假设aa中有函数bb
4、想在在cc中导入aa的方法
1、from modulename import functionname(or *)
(前一种导入特定函数语句,后一种导入所以该模块下的函数)
from aa import bb(or from aa import *)
bb #(这样调用bb函数)
2、import modulename
(缺点使用该模块下的函数时,需要声明这个模块的命名空间)
import aa
aa.bb #(这样调用bb函数)
part2 主程序与待导入模块不在统一目录下
上面介绍的是导入模块与主程序在同级目录下的情况,下面介绍不同级目录
明确一点:py找模块时候,只会在sys.path中的路径找,sy路径已经自动中存在当前主程序的目录,但找module时只会查找py文件,不会搜索当前目录的子目录,解决方法后面会说
ps、如何查看sys.path?
import sys
print(sys.path)
1、待导入模块在主程序目录下的一个目录(dir代表目录,mod代表模块)
--dir1
--mod1.py(主程序)
--dir2
--mod2.py(待导入模块)
之前说到找模块时不会在当前目录(dir1)下的子目录找(dir2),所以按照之前part1中所用的import mod2
会引起错误
解决方法:在dir2下新建__init__.py
--dir1
--mod1.py(主程序)
--dir2
--__init__.py
--mod2.py(待导入模块)
这样就会在dir2下找模块了
import dir2.mod2
2、待导入模块在主程序目录上的一个目录(dir代表目录,mod代表模块)
--dir1
--mod1.py(待导入模块)
--dir2
--mod2.py(主程序)
解决方法:在sys.path中添加父目录
import sys
sys.path.append('..')
import mod1
part3总结
1、找模块是在sys.path中找,且当前目录默认存在,不会搜索下一层目录与上一层目录,解决方法参考上面
2、注意module!=function!=dir