Python python3.7 嵌套导入问题

Tho · 2019年06月11日 · 最后由 Tho 回复于 2019年06月14日 · 1451 次阅读

各位大佬,我想问下这种嵌套导入怎么导入,loginpage.py 的 loginPage 类继承 base.py 的 Page 类, 我运行 test.py 提示 base 不能找到,图片的路径是反斜杠的

我试过每个文件下面放init.py ,然后用 from ..base import Page , 一样没用

最佳回复

改成

from page_obj.base import Page

试试

共收到 8 条回复 时间 点赞
Tho #8 · 2019年06月14日 Author
flystar 回复

谢谢,之前不知道相对导入跟运行文件有关系,直到第一个回复提醒后,就意识到了,嗯,另外,请教一下,这个目录结构有什么问题呀,我是看书 Page object 代码设计思路参考的,test_case 目录下就是这样的,一个/models ,一个/page_obj,page_obj 放各个页面的需要操作,*_run_test.py 就是各种页面的用例了

在命令行运行, 因为我搞不清 ide 当前工作目录到底在哪;写不出超过 100 行的代码,用啥 ide...

看图片是没有 init.py 让当前目录变成模块。上面说的很对啊,要学下 python 导入机制

简单的说,Python 导入机制就是搜索当前工作目录、sys.path、site-packages、pythonpath 一系列目录,如果能找到需要导入的文件就导入,找不到就会报错
注意,你的当前工作目录是 test_case,当 from page_obj import loginPage 时,loginPage 再去 from base import Page,此时,page_obj 并没有在 Python 模块搜索路径当中,所以报错
所以这里要用包的相对导入,from .base import Page,相对导入,就是相对于当前文件位置的导入,解释器就会顺着找到上层目录的 base,然后顺利导入
还有,感觉你的目录结构有问题啊,如果你想做类似框架的东西,你应该把基础代码封装成包,供写 case 导入,case 放到另外一边用 git 之类的管理

Tho 回复

跟你的目录结构有关系,估计是 pylint 觉得你的 page_obj 目录不是顶层目录,在这个目录下面加一个 __init__.py 看看

Tho #6 · 2019年06月11日 Author
xiaoshihu 回复

谢谢,这个可以,之前试过这个,但是我没注销 sys.path.append ,而且,我那个软件语法(pylint)一直给我爆红,我以为不行

改成

from page_obj.base import Page

试试

Tho #1 · 2019年06月11日 Author

各位大佬,帮忙看看,谢谢!

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册