将pytz导入AWS lambda函数

时间:2016-01-20 17:26:15

标签: python python-3.x timezone aws-lambda pytz

我正在编写一个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'}

但当我删除导入pytz时,该函数会触发(如果没有时区信息,它就无法正常工作)

4 个答案:

答案 0 :(得分:10)

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

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

然后当你将其压缩并上传时,它就可用了。

编辑添加我创建了一个工具来为您完成大量工作 - 您可以在此处找到它:https://github.com/jimjkelly/lambda-deploy

答案 1 :(得分:5)

如果您在环境中无权访问pytz,则也许您有权访问python-dateutil。在这种情况下,您可以执行以下操作:

import datetime
import dateutil.tz

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

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

答案 2 :(得分:2)

要跟进@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

答案 3 :(得分:0)

我今天遇到了这个问题。我解决的方法是

  • 以python / pytz / ...库文件格式打包pytz zip文件
  • 创建Lambda层 enter image description here
  • 在我的lambda中使用了以上层