有没有人有一个完全编译好的pandas版本,与AWS Lambda兼容?
在搜索了几个小时后,我似乎找不到我想要的东西,而且这方面的文档不存在。
我需要在Lambda函数中访问该软件包,但是我无法成功地将该软件包编译为适用于Lambda函数的软件包。
如果无法编译,是否有人可以提供可重现的步骤来创建二进制文件?
不幸的是,我尚未能够成功复制任何与此相关的指南,因为它们大多将pandas与我不需要的scipy组合起来,并增加了额外的负担。
有没有人有一个完全编译好的pandas版本,与AWS Lambda兼容?
在搜索了几个小时后,我似乎找不到我想要的东西,而且这方面的文档不存在。
我需要在Lambda函数中访问该软件包,但是我无法成功地将该软件包编译为适用于Lambda函数的软件包。
如果无法编译,是否有人可以提供可重现的步骤来创建二进制文件?
不幸的是,我尚未能够成功复制任何与此相关的指南,因为它们大多将pandas与我不需要的scipy组合起来,并增加了额外的负担。
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
pytz
,它还需要作为Linux版本进行加载)。 - Scott Brenstuhlpython 3.8 windows 10 lambda aws pandas
您需要在 Linux 机器和 Python 3.8 上执行以下步骤:
没有 Linux 机器?可以启动 Ubuntu EC2 实例或容器:
*对于上述第3点:您需要获取您的EC2 IP并插入它。如果您看到有关pem文件权限的错误,则需要右键单击pem文件>属性>安全>高级>禁用继承,并确保只有您的用户在“权限条目”中。最后,修复路径以指向pandas.zip文件在EC2实例上的位置以及您希望该文件最终出现的本地位置。
**注意lambda函数的Python运行时。确保它与您用于进行pip操作的Python版本相匹配(应为3.8)。
***原始文件夹名称“python”之所以被命名为这个名称,是根据AWS文档的规定。
# 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 .
在搜索了几个小时后,我似乎找不到我要找的内容,而且关于这个主题的文档也不存在。
所以我决定自己构建库来支持Amazon Linux 2架构。
经过大量的搜索和尝试,我发现层的概念非常好,而且对我很有效。
这个来自keithrozario的github仓库有很多预构建的层,你可以通过ARN简单地将它们添加到你的Lambda中,里面有一些很棒的东西,比如pandas、requests和sqlalchemy。
我创建了一个模板,使用AWS CLI编译和上传一个包含Python依赖项的层到Lambda,你可以在我的Gitlab仓库中找到它。
我在Amazon Linux EC2上运行这个程序,使用虚拟环境(venv)从requirements.txt文件安装库,然后使用AWS CLI加载压缩文件到Lambda。
请注意,文件夹结构my_zip_file/python/binaries是Lambda所必需的。
注意:Pandas是一个相当大的库。你的压缩层文件必须小于70MB。
你可能还会遇到可怕的"OpenBLAS WARNING - could not determine the L2 cache size on this system"错误消息。我不得不增加内存,从默认的128MB才能使Lambda成功运行。