如何解决无服务器部署不起作用Python、Lambda
xkcdrandomizer.py
import xkcd
import cv2
import imageio
import matplotlib.pyplot as plt
import numpy as np
import random
from kumikolib import Kumiko
import tweepy
import json
import os
...
...
...
def handler(event,context):
statusout = execute()
body = {
"message": statusout,"input": event
}
response = {
"statusCode": 200,"body": json.dumps(body)
}
return response
我正在尝试使用 serverless 来部署它,使用 serverless-python-requirements 插件。其中一些是本地包 (kumiko),所以我预计这些包会出错,但我使用 xkcd 得到了一个包,这是一个可通过 pip 获得的包。
这是我的 serverless.yml:
service: xkcdrandomizer
provider:
name: aws
runtime: python3.8
functions:
xkcdrandomizer:
handler: xkcdrandomizer.handler
events:
- schedule:
rate: cron(0 20 * * ? *)
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: true
useDownloadCache: true
useStaticCache: false
slim: true
strip: false
layer:
name: ${self:provider.stage}-cv2
description: Python requirements lambda layer
compatibleRuntimes:
- python3.8
allowedAccounts:
- '*'
运行 sls deploy 和 sls invoke -f xkcdrandomizer 产生以下错误:
{
"errorMessage": "Unable to import module 'xkcdrandomizer': No module named 'xkcd'","errorType": "Runtime.ImportModuleError","stackTrace": []
}
以前,我的 yml 只在底部有这个:
custom:
pythonRequirements:
dockerizePip: true
但这产生了错误
"errorMessage": "Unable to import module 'xkcdrandomizer': libGL.so.1: cannot open shared object file: No such file or directory",
可能是因为opencv的文件要求,所以我复制了this SO post,现在出现了上面的错误。
这是我的需求.txt:
certifi==2020.12.5
chardet==4.0.0
cycler==0.10.0
idna==2.10
imageio==2.9.0
kiwisolver==1.3.1
matplotlib==3.4.1
numpy==1.20.2
oauthlib==3.1.0
opencv-python==4.5.1.48
Pillow==8.2.0
pyparsing==2.4.7
PySocks==1.7.1
python-dateutil==2.8.1
requests==2.25.1
requests-oauthlib==1.3.0
six==1.15.0
tweepy==3.10.0
urllib3==1.26.4
xkcd==2.4.2
我的 sls 版本是 我的docker版本是20.10.5,build 55c4c88
我已经做了几个小时的谷歌搜索,但人们在无服务器方面的问题非常大,感觉就像我非常密切地遵循无服务器-python-要求教程。
编辑:似乎错误中出现的包仅取决于我首先在 xkcdrandomizer.py 中导入的内容。所以似乎所有导入的包都不起作用。
解决方法
我想通了。当我遇到 libGL.so 错误时,这是我离成功最近的一次,而添加 opencv“修复”实际上只会使所有导入中断。
解决方案是将 opencv-python-headless 放在需求中而不是 opencv-python,因为 headless 版本是为没有图形依赖性或类似的东西的服务器制作的。 >
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。