将 pytz 导入 AWS lambda 函数
Posted
技术标签:
【中文标题】将 pytz 导入 AWS lambda 函数【英文标题】:Import pytz into AWS lambda function 【发布时间】:2016-04-26 16:26:52 【问题描述】:我正在编写一个适用于日期时间的 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 时,函数会触发(如果没有时区信息,它就无法正常工作)
【问题讨论】:
【参考方案1】:要跟进@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
部署新版本的层。
只要库安装在压缩文件的python/pytz
级别,AWS Lambda 应该能够找到它。您也可以将它放在 python/lib/python3.8/site-packages\pytz
中,但对于您的特定 python 运行时版本,请参见此处:https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html
【讨论】:
【参考方案2】:我今天遇到了这个问题。我解决的方法是
以 python/pytz/... 库文件格式打包一个 pytz zip 文件 创建了一个 Lambda 层 在我的 lambda 中使用了上面的层【讨论】:
【参考方案3】:如果您在您的环境中无权访问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?
【讨论】:
完美答案。很高兴在没有外部库的情况下使用此功能。【参考方案4】:您需要安装 pytz 包,以便它可用于您的 lambda。您执行此操作的方法是将 pip 安装到您要压缩并上传到 AWS 的目录中(即与包含您的 lambda 函数的文件对等)。
pip install -t path/to/your/lambda pytz
然后当你把它压缩并上传时,它就可以使用了。
编辑添加我创建了一个工具来为你做很多事情 - 你可以在这里找到它:https://github.com/jimjkelly/lambda-deploy
【讨论】:
我希望避免这种情况,但我感觉您可能是正确的。我将尝试找到另一种方法来实现我的最终目标,但现在标记为正确答案。非常感谢。 我实际上一直在开发一种工具来自动执行此操作(以及为您处理将其推送到 AWS),但我还没有将它推送到 github。当您使用带有编译位的库时,会遇到很大的痛苦。 ://以上是关于将 pytz 导入 AWS lambda 函数的主要内容,如果未能解决你的问题,请参考以下文章
AWS Lambda Python3.7 函数 - numpy:无法导入名称“WinDLL”
aws lambda 无法导入模块“lambda_function”:没有名为“requests”的模块
AWS Lambda NodeJS导入返回空模块,但仅在AWS中
AWS Lambda 到 Firestore 错误:无法导入名称“cygrpc”