Python的包的相对导入的深入理解和总结

之前在引用Python包的时候经常会出现各种各样的错误,网上找了许多方法感觉都解释的不是特别清楚,当然问题还是解决了,但也是稀里糊涂懵懵懂懂的解决的,后来自己实践了一下,test了一下,竟然搞懂了。

下面就分享一下,其实很简单,总结起来就一句话:一切包的相对导入都是在主程序所在目录之下进行的,不能导入它的上一级目录中的包。【如果你现在还没有解决你的问题或者对这方面还是个小白一样的话,请看看这个博主的一篇博客:https://www.cnblogs.com/ArsenalfanInECNU/p/5346751.html#4316316

首先我创建了一个实验目录,如图:

在Python IDLE中运行main.py,运行正常,结果如下:

这里,主程序是main.py,是我们第一个打开的程序,我们的一切import、from都是在main.py所在的目录下进行的,也就是一切相对导入都是在主程序所在的目录下进行的。下面我们把tom.py作为主程序打开,看看结果如何:

第一行代码有误,显然此时tom.py作为主程序时不能用from . import ***来导入同一级目录下的文件,若此时想要用tom.py导入同一级目录下的tombrother.py,删去from . 就好了,直接用import tombrother就可以了,结果如下:

我们可以看到,没有提示引入tombrother有误,提示的错误是No module named "Kate",就是没有找到Kate这个模块,这是因为,Kate在tom.py所在目录的外面,而此时,tom.py是主程序,所以Python不会去索引主程序目录外的目录去寻找这个Kate文件夹,也就不会找到kate.py,这才导致程序出错。(当然如果你把tets目录放在了系统的环境变量中就要另外说了)

所做的这些都是在向大家实践并检验“一切包的相对导入都是在主程序所在目录之下进行的,不能导入它的上一级目录中的包”这句话。

以上就是我对Python的包的相对导入的理解,希望可以帮到一头雾水的你。

原文地址:https://www.cnblogs.com/dragonbean/p/11413531.html