【发布时间】:2021-07-09 02:39:22
【问题描述】:
我有很多代码被抽象到 execute() 中:
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-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,现在我得到了上面的错误。
这是我的 requirements.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中首先导入的内容。所以似乎所有导入的包都不起作用。
【问题讨论】:
标签: python aws-lambda serverless-framework serverless aws-serverless