目录
文件循环导入问题
模块的查找顺序
验证模块查找顺序的方法
绝对导入与相对导入
上一篇我们介绍了模块/文件的导入, 现在重点讲一下文件的导入.
两个文件彼此导入彼此, 循环导入的时候极有可能出现某个名字还没有被创建就是用的情况导致报错, 所以以后写代码的时候要尽量避免出现循环导入的问题.
如果确实需要循环导入就要确保双方使用的名字都必须'提前定义好'
出现错误的解决方法:
1. 将导入模块的句式定义在名字的下面
2. 浆倒入模块的句式写在函数体代码内.
判断文件类型
py文件可以被分为两种类型
1. 执行文件
2.被导入文件
可以通过内置变量__name__的方法进行查看.
当__name__所在的文件是执行文件的时候,结果为__main__
当__name__所在的文件是被导入文件的时候,结果为文件名(模块名)
if __name__ == 'main':
当前文件是执行文件的时候才会执行的子代码块.
简写方式为: 直接输入main之后Tab键补全即可
1.先从内存空间中查找
2.再从内置模块中查找
3.最后去sys.path查找(类似于我们前面学习的环境变量)
如果上述三个地方都找不到 那么直接报错!!!
1. 从内存空间中查找
睡眠期间将md文件删除
2. 验证从内置模块中查找
"""强调:在创建py文件时候一定不要跟模块名(内置、第三方)冲突!!!"""
3. 验证sys.path[类似于环境变量]
结果是一个列表 里面存放了很多路径
['C:\\me\\JetBrains\\PycharmProjects\\模块大全', 'C:\\me\\JetBrains\\PycharmProjects\\模块大全', 'C:\\me\\JetBrains\\PyCharm 2021.3.2\\plugins\\python\\helpers\\pycharm_display', 'C:\\me\\JetBrains\\Python36\\python36.zip', 'C:\\me\\JetBrains\\Python36\\DLLs', 'C:\\me\\JetBrains\\Python36\\lib', 'C:\\me\\JetBrains\\Python36', 'C:\\Users\\y1859\\AppData\\Roaming\\Python\\Python36\\site-packages', 'C:\\me\\JetBrains\\Python36\\lib\\site-packages', 'C:\\me\\JetBrains\\PyCharm 2021.3.2\\plugins\\python\\helpers\\pycharm_matplotlib_backend']
当内存中和内置中都没有要查找的模块时 就会去下面的路径中挨个查找
sys.path中虽然有很多路径 但是只需要重点关注第一个
第一个其实就是执行文件所在的路径
查找模块的时候只需要站在执行文件所在的路径查看即可
解决方法
1. 主动添加sys.path路径[类似于添加环境变量]
pycharm会自动将项目目录所在的路径添加到sys.path中
2.利用from...import...句式指名道姓的查找
从aaa文件夹里导入bbb模块
可以通过.(点)的方式进入下一次目录
在导入模块的时候一切查找模块的句式都是以执行文件为准
无论导入的句式是在执行文件中还是在被导入文件中!!!
绝对导入
永远按照执行文件所在的路径一层层往下查找(无脑查找即可)
相对导入
相当导入打破了必须参照执行文件的所在路径的要求 只需要考虑当前模块所在的路径然后使用特殊符号.去查找其他模块即可
from . import a
相对导入只能在被导入文件中使用 不能在执行文件中使用
.表示当前路径
..表示上一层路径
../..表示上上一层路径
以后如果想一劳永逸 那么就只使用绝对导入即可