【发布时间】:2018-11-15 15:03:10
【问题描述】:
我需要使用通过 API 网关触发的 AWS Lambda。我有 python 脚本,它从 S3bucket 加载机器学习模型并从 api 调用获取输入并预测结果。我可以成功触发用python内联编写的lambda函数。但我想使用机器学习包来预测 lambda 函数。所以我知道我需要上传带有安装在虚拟环境中的包的代码,我做到了。但是触发时的 lambda 会给出错误“无法导入模型 lambda_function”。我有带有方法“处理程序”的 lambda_function.py。请让我知道我是否做得对(创建虚拟环境并安装软件包并上传它)以及为什么会出现此错误。另外,请告诉我 Windows 和 AWS 控制台的解决方案。我已经看到很多关于 Linux 命令和使用 aws cli 的答案。
更新:
这快把我逼疯了!我已经尝试了答案中找到的所有方法,但没有一个对我有用。它给出了同样的错误:'无法导入模块:lambda_function'所以我无法理解错误在哪里。如果您有任何建议,请帮助我。在你说函数名称之前:我有正确的名称:lambda_function.lambda_handler。我压缩了内容而不是目录。请在下面查看我的 lambda 代码和 lambda 设置 lambda json file 拉姆达函数代码: 导入 boto3 导入操作系统 导入 uuid 导入sklearn 进口泡菜
def lambda_handler(event, context):
s3_client = boto3.client('s3')
s_desc=event['params']['querystring']['token']
X_test1=[]
X_test1.append(s_desc)
#load model
bucket = 'harshini-snow-bucket'
key = 'model.pkl'
download_path = '/tmp/{}{}'.format(uuid.uuid4(), key)
s3_client.download_file(bucket, key, download_path)
f = open(download_path, 'rb')
model = pickle.load(f)
f.close()
#class_predicted = model.predict(X_test1)
return X_test1
如果还有其他方法,请告诉我。我会尝试任何方法。
更新 2:
【问题讨论】:
-
看起来您遇到了缩进问题。当我在文件之间复制粘贴代码时,有时会得到这些。尝试取消缩进,重新缩进 pack.py 中的代码(您的错误图像显示问题出在 pack.py 中)。文本编辑器中通常还有一些选项可以帮助突出显示可能使用空格而不是制表符的位置,或者如果您只是忘记在某处缩进。
-
如你所见,我没有发现任何缩进错误,重试了几次。
-
您没有发布 pack.py... 正如您在错误消息中看到的那样,它说 pack.py 在第 12 行附近存在缩进问题(查看错误图像的日志输出区域)。有时我不得不重新进行缩进,因为看起来缩进很好,但实际上使用空格而不是制表符复制了一行,反之亦然。您遇到的“未缩进与任何外部缩进级别不匹配”错误往往意味着缩进只是错误的,可能是因为没有在函数或控制结构下缩进。
-
请查看显示 pack.py 的名为 code 的链接并检查缩进。
-
抱歉,我以为是 lambda_function.py。从这里看缩进确实很好,但就像我之前所说的,有时当有隐藏字符导致缩进问题时看起来很好。您是否尝试过取消缩进和重新缩进 lambda_handler 中的所有行?
标签: python windows amazon-web-services aws-lambda