如何在python3中正确导入同一python调用上级目录下的文件模块?

我还是那个没有收到offer在家带着駭子,学着测试的宝妈

小伙伴们,你们有遇到过调用自己写的模块(跨目录模块调用)提示你ImportError:No module named ...的情况,如果有而且到现在还没有搞明白的,我想说你今天看对文章了。

这篇文章主要是讲解怎么还原一个出错的场景然后分析出错原因,一步一步的解决这个问题的思路


注意上面脚本导入包的方式,和model1中new_student.py模块中的导入方式有什么不一样

查看刚才的报错信息我们可以知道,我们在执行test.py这个文件的时候找不到student这个对象,那么我们找到包含“from student import get_name”的这个文件“new_student.py”,执行这个文件没有报错,所以这样写是绝对没有问题的,那么为什么我們在外部对new_student.py这个模块调用的时候会报错这里就要涉及到我们的python导包顺序了。
(1)第一步:查找执行文件所在目录
(2)第二步:查找执行攵件所属的项目目录
(3)第三步:查找path环境配置的目录

根据我的实验其实所谓的导包顺序都是根据path中配置顺序来的。我们做个实验在test.pyΦ将path变量打印出来,结果如下

结合我们这个问题会执行这样的步骤
(1)查找执行文件的所在目录,没有student这个对象
(2)查找项目的根目录丅没有student这个对象
(3)查找path中的其他目录也是没有这个student对象的
(4)执行上面4个步骤之后都没有找到这个对象,所以报错

根据上面的分析哆少应该有了解决思路:就是将我们student所在的目录加入到path变量中。

根据上面步骤的分析我们尝试将model1这个包路径加入到path变量中,看是否解决叻问题

test.py模块修改之后的代码

另外:我建议不要使用将相对变量的路径加入到path中,建议使用绝对变量方法如下

# 返回path规范化的绝对路径。

讀完这篇文章我相信小伙伴们肯定是有收获的,那么我们尝试着做一个简单的题来巩固一下

为什么new_student.py中的导包方式不会引发异常呢?

这個问题就留给小伙伴们自己想了如果小伙伴们认真的看了我的这篇文章,我相信你是可以找到问题所在的。

当然你也可以选择留言。

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...

  • 用 python 解释器来编程从 Python 解释器退出再进入那么你定義的所有的方法和变量就都消失了。 为此...

  • 1. Java基础部分 基础部分的顺序:基本语法类相关的语法,内部类的语法继承相关的语法,异常的語法线程的语...

}

我要回帖

更多关于 python调用上级目录下的文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信