【问题标题】:On AWS Lambda, Openpyxl doesn't keep track of the image在 AWS Lambda 上,Openpyxl 不跟踪图像
【发布时间】:2021-02-25 23:44:33
【问题描述】:

当我有一个带有图像的model.xlsx 并且此代码在 Windows 上运行良好时。 (将图片保存在output.xlsx

import openpyxl

wb = openpyxl.load_workbook('model.xlsx')
#doing some stuff on the wb
wb.save('output.xlsx')

现在,当我在我的 AWS Lambda 上执行此操作时,一切正常,但我在 output.xlsx 上没有图像。 未引发错误消息。

import json
import openpyxl
from tempfile import NamedTemporaryFile
import boto3
import botocore


def lambda_handler(event, context):
    s3_client = boto3.client('s3', aws_access_key_id='*****', aws_secret_access_key='*****')
    wb = openpyxl.load_workbook('model.xlsx')
    #doing some stuff on the wb
    with NamedTemporaryFile() as tmp:
        wb.save(tmp.name)
        tmp.seek(0)
        s3_client.upload_file(tmp.name, "my-bucket-name", "filename-in-the-bucket")

    return {
        'statusCode': 200,
        'body': json.dumps("Hello World")
    }

我应该向 AWS 提出申请吗?打开pyxl?为什么没有错误信息?

【问题讨论】:

标签: python amazon-web-services aws-lambda openpyxl xlsx


【解决方案1】:

好的,我不确定 100%,但我会假设像 pip3 install --target ./theholypath openpyxl 这样的导入可以工作,但会因棘手的依赖关系(您没有并存储在其他地方的文件)而失败,就像今天使用 Pillow 失败一样.

因此,一些英雄为我们完成了这项工作,并将库完美地打包成我们称之为layer的东西。对于您需要的每个库,您可能会发现相应的层已经由好人构建。 (如果幸运的话,不是每个库都有层)。

就我而言,我添加了 2 层:

  • arn:aws:lambda:eu-west-3:770693421928:layer:Klayers-python38-Pillow:8
  • arn:aws:lambda:eu-west-3:770693421928:layer:Klayers-python38-openpyxl:5

而且...它有效!我的output.xlsx 现在有来自model.xlsx 的图片,你甚至不需要pip install --target my/path my_lib_name

现在,您可以找到自己需要的层以及实现它的方法here

警告:

某些图层版本将具有 expiry_date 字段。这是图层 > 将被删除的日期。

一般来说,图层计划在新图层版本发布 60 天后删除 > 针对该包发布。如果您使用图层的最新版本,则可以保证在该图层被删除之前 > 至少 60 天。

与层一起部署的所有函数仍将无限期地工作,但您将无法 > 部署引用已删除层版本的新函数。

【讨论】:

    猜你喜欢
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2021-12-07
    • 1970-01-01
    • 2021-06-11
    • 2020-07-21
    • 2021-04-02
    相关资源
    最近更新 更多