基础知识
1.路径:在sys.path这个变量里面的路径找可能匹配的package和module
2.package:在某个文件夹中添加一个__init__.py,这个文件夹便会被识别为package
文件结构:
错误1:项目文件夹不能作为package导入,需要再加一层结构
正确:
导入方法
示例项目:
在 A.py 中导入 B.py:
[在.py文件中导入相同路径下的模块]
import B # 导入 print(B.str) # 使用
A.py与B.py在同一个路径下,可以直接import
在 A.py 中导入 D.py:
[在.py文件中导入相同路径下的包中的模块]
错误:AttributeError: module 'sub_sub' has no attribute 'D'
import sub_sub # 导入package print(sub.sub.D.test_str) # 引用包sub_sub中D.py的test_str变量
正确:
from sub_sub import D # 从sub_sub包中导入D模块 print(D.test_str) # 使用D中的变量test_str
由此知,import 后面只能跟模块,而不能直接跟包,直接import 包,在使用时会报错
在 A.py 中导入 C.py:
[.py文件与需要导入的模块的上级目录在同一个包内]
from package.sub2 import C # 导入package中sub2包的C模块 print(C.test_str) # 使用C的变量test_str
小笔记
1.导入项目目录不同的路径下的.py文件,最好使用 from package import module 【扩展为:from package.subpackage import module】的方法,统一使用完整路径,提高移植性,并且各处引用高度统一
2.引用相同路径下的模块,可以使用import,但是会存在以下问题
A.py 通过import module 的方式引入了B模块,可以正常获取到B的变量,
A.py import B class PrintTest(object): num = 20 def printtest(self): print(B.test_str) test_class = PrintTest() test_class.printtest()
但是如果此时,不在同一路径下的C.py 调用A.py时
报错:ModuleNotFoundError: No module named 'B'
from package.sub1 import A test_str = A.test_class.num print(test_str)
正确:
A.py from packagesub1 import B class PrintTest(object): num = 20 def printtest(self): print(B.test_str) test_class = PrintTest() test_class.printtest()
此时,C才能够找到不在同一路径下的B文件
所以,from 路径 import module可以省去很多导入模块寻找不到路径的问题。