我的需求背景:
最近在研究使用jenkins持续集成去执行python测试,但是在部署jenkins项目之后,‘构建触发器’执行定时构建任务中的批处理命令(就是与cmd中运行的命令是一样的),jenkins执行后,控制台马上就报错了,如下图:
提示:
File “driver_unit_class_note_csv.py”, line 7, in
from youdao.unit_txt_note.yd_note_report.HTMLTestRunner import HTMLTestRunner
ModuleNotFoundError: No module named ‘youdao’
意思是说,在driver_unit_class_note_csv.py文件的第7行,导入HTMLTestRunner文件中的HTMLTestRunner类的时候找不到from后面名为‘yuodao’的包。
后面我直接在cmd控制台中去执行了driver_unit_class_note_csv.py,错误是一样的
也在网上找了一些资料,但是对于我现在的脚本没用,还是会报错,后面根据网上资料的思路整理了下,目前找到两种方法。
我这边先给看下我的目录结构
方法一:在当前文件要使用from导入文件的上面佳加入两行代码
import sys
sys.path.append('../..')
自己的理解,可以跳过
该方法与网上找的类似,网上是这样的sys.path.append(’…’),我直接拷过来用,发现还是会报错(这也正常,同样的代码不在两个地方用不一定适用),后面查看了下print(sys.path)中的内容,发现是一堆路径(pycharm会自动检索from后面的路径,而在cmd控制台中运行脚本,是只能找到当前文件下方的路径的,这就需要通过代码加载路径到sys.path中,根据网上方法的思路,猜想是不是把报错信息找不到的包‘youdao’的目录对当前文件(driver_unit_class_note_csv.py)做相对路径找到‘youdao’这个包名是不是就可以了.后面经过实验是可以的,网上找的方法sys.path.append(’…’)只是将相对当前文件的路径加入到了sys.path中,针对于我的目录结构,我需要把当前文件(driver_unit_class_note_csv.py)的上级的上级的路径放到sys.path中。
结果图:
方法二:去掉from 后面的 ‘youdao.’,其他内容不变
# 修改前
from youdao.unit_txt_note.yd_note_report.HTMLTestRunner import HTMLTestRunner
# 修改后
from unit_txt_note.yd_note_report.HTMLTestRunner import HTMLTestRunner
自己的理解,可以跳过
根据方法一分析的思路,尝试将from 后面的 youdao 包去掉,这样就使得检索的路径在当前文件(driver_unit_class_note_csv.py)的父路径就好了,这样就不需要用到youdao的包了,实验后确实可以。
结果图:
另一篇文章中还有其他情况的解决方法py文件(引用自定义库和第三方库)在dos窗口中运行提示找不到模块的问题
上面的理解只是自己根据尝试的实际结果推出来的,如果有什么地方写的不对的还请指出
▩初出茅庐,如果有其他好的方法,欢迎留言 (ง •_•)ง