python - 在 AWS Lambda 上,Openpyxl 不跟踪图像
问题描述
当我有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?为什么没有错误信息?
解决方案
好的,我不确定 100%,但我会假设 import likepip3 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
现在,您可以在这里找到自己需要的层和实现方式。
警告:
某些图层版本将具有 expiry_date 字段。这是图层 > 将被删除的日期。
通常,图层计划在新图层版本发布 60 天后删除,> 针对该包发布。如果您使用该层的最新版本,则保证在该层被删除之前 > 至少 60 天。
与层一起部署的所有函数仍将无限期地工作,但您将无法 > 部署引用已删除层版本的新函数。
推荐阅读
- javascript - Android Webview:本地 html 加载外部 css 和 .js 文件 - 无法访问外部 .js 中的功能
- ios - 如何使用 Firebase 设置密码续订电子邮件?
- java - TSP 健身水平已关闭
- java - 替换部分xml,导航组件
- flutter - 如何永久删除 Dart DevTools?
- python - 使用 `snakemake` 的 MD 任务
- sorting - select2 以所需的顺序以编程方式选择选项
- php - 有没有办法调用稍后在 PHP 中初始化的变量?
- android - 有没有办法将 NDEF 消息传递给字符串?
- flutter - 即使在版本 1.20.0 之后使用 LengthLimitingTextInputFormatter,Flutter TextField 也不遵守 maxLength 限制