先看现象。Dify 0.15 的工作流里加了代码节点做金额换算,import decimal 之后运行报 ModuleNotFoundError,同一个脚本在本地 Python 3.11 跑得好好的,换成 import re 也一样失败。
这类报错背后常见的原因有几处,逐个排除就行。代码节点跑在受限沙箱,只允许白名单模块。也可能是需要的依赖没装进沙箱镜像。
还有一种情况,代码节点用的 Python 版本与本地不一致。
另外,把 import 写在函数内部,沙箱扫描时漏判。
先用最小脚本确认沙箱可用能力
python -c "import sys;print(sys.version, sys.executable)"
接着把依赖逻辑挪到外部 HTTP 节点
curl -X POST http://internal/convert -d '{"amount":12.5}'
然后改为纯内置运算实现换算
python -c "print(round(12.5*100))"
末了在节点输出里打印异常堆栈定位
python -c "import traceback;traceback.print_exc()"
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
怎么算真的好了,看的是同一批现象。代码节点运行成功并返回预期数值,工作流日志里没有 ModuleNotFoundError。
提醒一点。工作流里的代码节点不是完整解释器,涉及第三方库时用 HTTP 节点调外部服务更稳。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
