我有很多代码被抽象到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的文件要求,所以我复制了这篇SO文章,现在我遇到了上述错误。
这是我的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
我的 Serverless Framework 版本为
![this](https://istack.dev59.com/JO5UT.webp)
我已经花了几个小时搜索,但是人们对于无服务器的问题非常广泛,并且感觉自己已经非常仔细地遵循了 serverless-python-requirements 教程。
编辑:看起来错误中出现的软件包只取决于我在 xkcdrandomizer.py 中首先导入的内容。因此,似乎所有导入的软件包都不能正常工作。