

发布于 2024-04-15 19:34更新于 2024-04-16 09:19846浏览明明手动能够成功执行的应用,触发器执行却报错
No module named 'xxx'
比如图1:

!!!!前排预警:这部分比较繁琐,着急解决的小伙伴可以直接跳到解决思路
通过图1的显示信息,我们可以看到他报错的流程名称和行号,因此可以定位问题在module2流程的11行。

这样语法没有问题呀,这个模块导入为什么出错了呢,线索断开

从影刀的设置中导出运行日志来看一看更详细的日志🤓

找到当天日期.log文件,比如"20240415.log"
再根据触发器执行的时间找到报错,比如我根据运行日志发现触发器运行开始时间为17:14

通过时间再日志中找到对应日志信息

从这个地方往下面就是这次运行的日志啦✨
从日志中我们可以发现报错
ERROR: Cannot install -r C:\Users\mifunA\AppData\Local\ShadowBot\users\594724179938185216\apps\6a66f5ee-4c39-493a-bea0-fdcc5072a161_Release\venv\Lib\requirements-tmp.txt (line 15)
and async-timeout==4.0.2 because these package versions have conflicting dependencies.
The conflict is caused by:
The user requested async-timeout==4.0.2
redis 5.0.3 depends on async-timeout>=4.0.3; python_full_version < "3.11.3"
看不懂?把他丢给【影刀GPT】问问吧😝

通过GPT的’专业‘回答,我们可以得知,是async-timeout==4.0.2这个包和redis包的版本冲突的问题。😁
在找到错误原因以后,怎么解决呢?🥲
为什么手动安装的时候没有问题,但是触发器执行的时候就会出错呢?🤖
小知识补充:手动执行本质是在编辑应用的环境执行的,也称为开发环境。而触发器执行是在一个新的环境中执行的,也可称为触发器环境。细心的小伙伴也行就能够从日志信息中推测出来,在触发器第一次执行的时候,会先把必要的环境信息重新部署一遍,也包括安装python包。
综上,我们可以知道这个错误是在触发器环境中第一次安装Python包的时候出错了🤓
那么为什么手动安装Python包的时候没有报错,但是在触发器环境安装却出现了问题呢?
当我们在开发环境手动安装的时候,比如这里我们先安装async-timeout==4.0.2版本,然后再安装redis=5.0.3版本
再这个过程中,当安装redis的时候,聪明的python会发现async-timeout==4.0.2版本不匹配,所以就把async-timeout包卸载了,然后重新安装为符合版本的async-timeout==4.0.3的版本,安装完毕以后,我们此时运行程序是没有问题的,但是安装记录中记录async-timeout的版本是4.0.2


当触发器环境中安装python包的时候,这些包是批量安装的,就在这个过程中,安装模块才反应过来async-timeout和redis版本是不兼容的,因此就报错了。🤖
针对于案例中的问题该如何解决呢?
我们只需要在开发环境中的python模块包管理界面,把async-timeout这个模块升级模块,然后再次发版运行就能运行成功啦

1、查看触发器的运行日志,记录运行时间

2、从设置中导出日志,打开日期.log来根据运行时间和计划任务名称找到对应日志
3、找到报错信息,找到版本无法匹配的模块名称

4、编辑应用,在python包管理界面升级对应模块,并发布

5、重新触发进行验证
完成✌️
莫莫
影刀社区团队
邮箱:momo@yingdao.com

最好的社区环境是一群超级棒的开发者!