无服务器部署不起作用(Python、Lambda)

2024-05-14 23:15:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我将许多代码抽象为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来部署它,使用serverless python需求插件。其中一些是本地包(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部署和sls调用-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版本是this 我的docker版本是20.10.5,构建55c4c88

我在Google上搜索了几个小时,但是人们在serverless上的问题非常大,我觉得我已经非常仔细地学习了serverless python需求教程

编辑:错误中出现的包似乎只取决于我在xkcdrandomizer.py中首先导入的内容。看来所有导入的包都不起作用了


Tags: pyimporttrueexecute错误bodycv2xkcd
1条回答
网友
1楼 · 发布于 2024-05-14 23:15:39

我想出来了。当我遇到libGL.so错误时,这是我最接近成功的一次,添加opencv“修复”实际上只会使所有导入中断

解决方案是在需求中加入opencv python headless,而不是opencv python,因为headless版本是为没有图形依赖项或类似内容的服务器而设计的

相关问题 更多 >

    热门问题