将 pytz 导入 AWS lambda 函数

Import pytz into AWS lambda function

我正在编写一个与日期时间一起使用的 lambda 函数并尝试导入 pytz,以便在比较时可以考虑时区。

import boto3
import pytz
from datetime import timedelta, date, datetime
from boto3.dynamodb.conditions import Key, Attr

导致显示

{errorMessage=Unable to import module 'lambda_function'}

但是当我删除 import pytz 时,函数会触发(如果没有时区信息,它就不能正常工作)

您需要安装 pytz 包,以便它可用于您的 lambda。你这样做的方法是将它安装到你要压缩并上传到 AWS 的目录中(即与包含你的 lambda 函数的文件对等)。

pip install -t path/to/your/lambda pytz

然后压缩上传就可以了

编辑添加我创建了一个工具来为你做很多这样的事情 - 你可以在这里找到它:https://github.com/jimjkelly/lambda-deploy

如果您在您的环境中无法访问 pytz,也许您可​​以访问 python-dateutil。在那种情况下你可以这样做:

import datetime
import dateutil.tz

eastern = dateutil.tz.gettz('US/Eastern')
datetime.datetime.now(tz=eastern)

REF。 How to get current time in Pacific Timezone when import pytz fails?

我今天 运行 进入这个问题。我解决的方法是

  • 以python/pytz/...库文件
  • 格式打包一个pytz zip文件
  • 创建了一个 Lambda 层
  • 在我的lambda中使用了上面的层

要跟进@cheframzi 对“以 python/pytz/... 格式打包 pytz zip 文件”作为 Lambda 层的回答,这是一种方法。

mkdir python
pip3 install -t python pytz=='2019.2'
zip -r pytz.zip python
rm -rf python

然后就可以使用aws lambda publish-layer-version --layer-name <layer_name> --zip-file fileb://./pytz.zip部署新版本的层了。

只要该库安装在 zip 文件的 python/pytz 级别,AWS Lambda 就应该能够找到它。您也可以将它放在 python/lib/python3.8/site-packages\pytz 中,但对于您的特定 python 运行时版本,请参见此处:https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html