是否有人拥有与AWS Lambda兼容的完全编译的pandas版本?
在搜索了几个小时后,我似乎无法找到我正在寻找的内容,并且关于此主题的文档不存在。
我需要在lambda函数中访问包,但是我没有成功地使包正确编译以便在Lambda函数中使用。
代替编译,任何人都可以提供可重现的步骤来创建二进制文件吗?
不幸的是,我无法成功复制任何关于主题的指南,因为它们大多数将大熊猫与我不需要的scipy结合起来,并增加了额外的负担。
答案 0 :(得分:16)
我相信你应该能够使用最近的pandas版本(或者可能是你机器上的版本)。您可以像这样自己创建一个包含pandas的lambda包,
首先找到您计算机上安装pandas软件包的位置,即打开python终端并输入
import pandas
pandas.__file__
应打印类似'/usr/local/lib/python3.4/site-packages/pandas/__init__.py'
'/usr/local/lib/python3.4/site-packages/pandas
)并将其放入存储库。使用像这样的pandas打包你的Lambda代码:
zip -r9 my_lambda.zip pandas/
zip -9 my_lambda.zip my_lambda_function.py
您还可以将代码部署到S3,并使Lambda使用S3中的代码。
aws s3 cp my_lambda.zip s3://dev-code//projectx/lambda_packages/
答案 1 :(得分:11)
经过一些修补和谷歌搜索后,我能够让一切工作并设置一个可以在将来克隆的回购。
关键要点:
Github回购: https://github.com/moesy/AWS-Lambda-ML-Microservice-Skeleton
答案 2 :(得分:4)
我知道这个问题是在几年前提出的,当时Lambda处于不同的阶段。
我最近遇到了类似的问题,我认为在这里为面对相同问题的未来用户添加最新解决方案是一个好主意。
事实证明,亚马逊在re:Invent 2018中发布了图层的概念。这是一个很棒的功能。这篇中型帖子比我在这里描述的要好得多:Creating New AWS Lambda Layer For Python Pandas Library
答案 3 :(得分:2)
仓库mthenw/awesome-layers列出了几个可公开使用的AWS Lambda层。
特别是,keithrozario/Klayers具有pandas + numpy,并且是最新的pandas 0.25。
其ARN为arn:aws:lambda:us-east-1:113088814899:layer:Klayers-python37-pandas:1
答案 4 :(得分:2)
@ashtonium的答案实际上有效,并且很可能是最简单的答案,但是,还需要一些其他步骤。另外,Pandas需要Pytz(在@ b3rt0提供的链接中提到),因此也需要包装。
unzip filename.whl
(Linux / MacOS)python/lib/python3.7/site-packages/
(对于您选择的版本,请交换3.7)python
这是一个非常常见的问题,希望我的解决方案有帮助。
2020年8月19日更新:
并非所有包装都提供Wheel-files。在这些情况下,您可以跳至步骤3,进入site-packages文件夹,然后使用pip3 install PACKAGE_NAME -t .
(无需venv)在其中安装软件包。有些软件包比其他软件包容易,有些则比较棘手。例如,Psycopg2要求您仅移动两个(在撰写本文时)软件包文件夹之一。
/欢呼声
答案 5 :(得分:2)
让熊猫在Lambda函数中工作的最简单方法是利用Lambda图层和AWS Data Wrangler。 Lambda层是一个zip存档,其中包含库或依赖项。根据AWS文档,使用层可以使您的部署程序包较小,从而使开发更加容易。
AWS Data Wrangler是一个开源软件包,可将熊猫的功能扩展到AWS服务。
遵循说明(在AWS Lambda层下)here.
答案 6 :(得分:1)
我设法使用python3.6 runtime在aws lambda中部署了熊猫代码。这是我要遵循的步骤:
这是一个助手:https://github.com/ysfmag/aws-lambda-py-pandas-template
答案 7 :(得分:1)
另一种选择是下载预编译的转轮文件,如本文所讨论:https://aws.amazon.com/premiumsupport/knowledge-center/lambda-python-package-compatible/
基本上,您需要转到https://pypi.org上的项目页面,并下载如下所示的文件:
然后将.whl文件解压缩到您的项目目录,然后将内容与lambda代码一起重新压缩。
注意:主Python函数文件必须位于生成的部署包.zip文件的根文件夹中。其他Python模块和依赖项可以位于子文件夹中。像这样:
my_lambda_deployment_package.zip
├───lambda_function.py
├───numpy
│ ├───[subfolders...]
├───pandas
│ ├───[subfolders...]
└───[additional package folders...]
答案 8 :(得分:0)
ryfeus在github上有一些预编译的软件包。
答案 9 :(得分:0)
我的解决方案是维护进入我的层的2个package.txt样式的文件包,一个名为provided_packages.txt
,另一个名为provided_linux_installs.txt
在部署之前(如果尚未安装软件包),我运行:
pip install -r provided_packages.txt -t layer_name/python/lib/python3.8/site-packages/.
pip download -r provided_linux_installs.txt --platform manylinux1_x86_64 --no-deps -d layer_name/python/lib/python3.8/site-packages
cd layer_name/python/lib/python3.8/site-packages
unzip \*.whl
rm *.whl
然后正常部署(我正在使用cdk synth
和cdk deploy \* --profile profile_name
)
如果有帮助,我的Provided_linux_installs.txt如下所示:
pandas==1.1.0
numpy==1.19.1
pytz==2020.1
python-dateutil==2.8.1
答案 10 :(得分:0)
# all the step are done in AWS EC2 Linux Free tier so that all the Libraries are compatible with the Lambda environment
# install the required packages
mkdir packages
pip3 install -t . pandas
pip3 install -t . numpy --upgrade
pip3 install -t . wikipedia --upgrade
pip3 install -t . sklearn --upgrade
pip3 install -t . pickle-mixin --upgrade
pip3 install -t . fuzzywuzzy --upgrade
# Now remove all unnecessary files
sudo rm -r *.whl *.dist-info __pycache__
# Now make a DIR so that lambda function can reconginzes
sudo mkdir -p build/python/lib/python3.6/site-packages
# Now move all the files from packages folder to site-packages folder
sudo mv /home/ec2-user/packages/* build/python/lib/python3.6/site-packages/
# Now move to the build packages
cd build
# Now zip all the files starting from python folder to site-packages
sudo zip -r python.zip .
将zip文件上传到lambda层
答案 11 :(得分:0)
python 3.8 windows 10 lambda aws 熊猫
您需要在 linux 机器和 python 3.8 上执行以下步骤:
没有linux机器?启动 Ubuntu EC2 实例或容器:
*对于上面的数字 3:您需要获取您的 EC2 IP 并将其插入。您可能会收到有关 pem 文件权限的错误,如果您这样做,则右键单击 pem 文件 > 属性 > 安全 > 高级 > 禁用继承,并确保只有您的用户在“权限条目”中。最后,修复路径以指向 pandas.zip 文件在 EC2 实例上的位置以及您希望文件在本地结束的位置。
**注意lambda函数的python运行时。确保它与您用于执行 pip 操作的 Python 版本相匹配(应该是 3.8)。
***原始文件夹名称“python”的命名是出于 AWS 文档中的原因。
答案 12 :(得分:0)
经过大量谷歌搜索和混乱之后,层的概念很棒,似乎对我有用。
这个来自 keithrozario 的 github 存储库有大量的预构建层,您可以通过 arn 简单地将其添加到您的 lambda 中,其中有一些很棒的东西,比如 Pandas、请求和 sqlalchemy。
我创建了一个模板,用于使用 AWS CLI 编译层(包含 Python 依赖项)并将其上传到 lambda,您可以在 in my Gitlab repo here 中找到该模板。
我在 Amazon Linux EC2 上运行它,使用虚拟环境 (venv) 从 requirements.txt 文件安装库,然后使用 AWS CLI 将压缩文件加载到 lambda。
注意 lambda 所需的文件夹结构 my_zip_file/python/binaries。
注意:Pandas 是一个相当大的库。您的压缩图层文件必须小于 70mb。
您可能还会遇到可怕的“OpenBLAS 警告 - 无法确定此系统上的 L2 缓存大小”错误消息。为了让 lambda 成功运行,我不得不将内存从默认的 128mb 增加。
答案 13 :(得分:0)
搜索了几个小时后,我似乎找不到我要找的东西,而且关于这个主题的文档也不存在。
所以我决定自己构建库来支持 Amazon Linux 2 架构。