Python python3.7 嵌套导入问题

Tho · June 11, 2019 · Last by Tho replied at June 14, 2019 · 963 hits

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

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

最佳回复

改成

from page_obj.base import Page

试试

共收到 8 条回复 时间 点赞
Tho #1 · June 11, 2019 作者

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

改成

from page_obj.base import Page

试试

Tho #3 · June 11, 2019 作者
xiaoshihu 回复

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

Tho 回复

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

简单的说,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之类的管理

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

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

Tho #8 · June 14, 2019 作者
flystar 回复

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

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up