Lambda 函数因 /lib64/libc.so.6 失败:找不到版本“GLIBC_2.18”

Tan*_*kar 7 python-3.6 simple-salesforce aws-lambda-layers

我正在尝试在 AWS lambda 中创建一个 simple-salesforce (Python 库)层,并尝试从我的 python 代码中使用它(导入它)。我有 Windows 机器。

尽管我读到编译窗口可能会出现问题,所以我从 Windows 商店安装了 ubuntu1804,然后继续为 lambda 层创建 zip。(zip是为python文件夹创建的,结构为“python/lib/python3.6/site-packages/......”)

我正在使用Python 3.6。我针对这个问题浏览了几篇文章,但可以找到任何解决方案。该视频帮助我成功地在 AWS 中为 Pandas 和请求创建了一个层,并对我使用的 pip 命令进行了细微调整

sudo python3 -m pip install simple-salesforce -t build/python/lib/python3.6/site-packages
Run Code Online (Sandbox Code Playgroud)

我在 Simple salesforce 中使用的流程完全相同,但出现以下错误:

无法导入模块“lambda_function”:/lib64/libc.so.6:找不到版本“GLIBC_2.18”(/opt/python/lib/python3.6/site-packages/cryptography/hazmat/bindings/_rust 需要.abi3.so)

编辑:--我尝试使用 .whl 的另一种方法,虽然这没有给出上述错误,但给出错误为“找不到请求模块”,当我添加请求模块层时,它给出错误 authlib not found。(如果我评论 salesforce 相关的内容,请求层工作正常。甚至尝试上传为简单层,我遇到了相同的 authlib 问题)

编辑:我使用的 Lambda 代码如下

the code I am using is basic code which doesnt have any logic with empty imports

import json
import pandas as pd
import requests as req
from simple_salesforce.format import format_soql

def lambda_handler(event, context):
    #TODO
Run Code Online (Sandbox Code Playgroud)

小智 7

我在使用加密库(python)的 lambda 上安装 pysftp 时也收到了相同的错误,该错误类似于(/opt/python/lib/python3.6/site-packages/cryptography/hazmat/bindings/_rust.abi3 需要) 。所以)

对我有用的解决方案是 1] pip uninstall cryptography 2] pip install cryptography==3.4.8 以下github链接详细解释了它 https://github.com/pyca/cryptography/issues/6390


MaF*_*aFF 5

AWS lambda 函数就像虚拟环境,它们不附带.so内核级包的文件。安装 python 软件包时,必须确保系统相关文件也随之安装。这可以通过将参数传递--platform给 来实现pip install

来自 AWS 帖子如何将带有已编译二进制文件的 Python 包添加到我的部署包并使该包与 Lambda 兼容?

要在 Linux 操作系统外部使用 pip 时创建与 Lambda Python 运行时兼容的 Lambda 部署包或层,请运行 pip install 命令并将其manylinux2014作为参数值--platform

pip install \
    --platform manylinux2014_x86_64 \
    --target=my-lambda-function \
    --implementation cp \
    --python 3.9 \
    --only-binary=:all: --upgrade \
    simple-salesforce
Run Code Online (Sandbox Code Playgroud)


Tan*_*kar 0

我更改了代码,不使用 simple_salesforce 库,并使用请求(使用 Salesforce REST API)计算出所有逻辑。这并不是很理想,但我可以让它工作,因为我有一些交付要满足。