我正在编写一个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时,该函数会触发(如果没有时区信息,它就无法正常工作)
答案 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)