无法导入模块“lambda_function”:无法从“lxml”aws lambda 导入名称“etree”

问题描述 投票:0回答:2

我尝试使用 aws lambda 函数。我需要使用 lxml python 模块。

当我尝试导入时:

from lxml import html

def lambda_handler(event,context):
    return 'okay'

aws 显示一些错误。这里:

{
"errorMessage": "Unable to import module 'lambda_function': cannot import name 'etree' from 'lxml' (/var/task/lxml/__init__.py)",
 "errorType": "Runtime.ImportModuleError",
 "requestId": "426b7f93-d703-4d7d-9bda-86cbfdf85fe2",
 "stackTrace": []
}

当我尝试在本地 PC 上使用 lxml 中的“html”时。该代码仅适用于 python 3.10 版本。它仅适用于 conda 环境和本地 PC,仅在 python-3.10 上运行。

  1. 我尝试安装更新的 lxml 模块。
  2. 在 AWS Lambda 上尝试过 3.10 python 版本
  3. 在 Docker Ubuntu 上安装 lxml。然后上传.zip
  4. 使用模块作为 AWS 上的层。

没有任何作用。我能做什么?

谢谢。

python amazon-web-services aws-lambda lxml
2个回答
3
投票

发生这种情况是因为

lxml
是一个依赖于操作系统的库。如果您使用 MacBook 或 ubuntu 安装它,您将获得与 Lambda 运行时内使用的操作系统 (Amazon Linux 2) 不兼容的二进制文件。

要解决此问题,您必须生成与 Amazon Linux 2 兼容的二进制文件。

  • 您可以使用预构建的打包 Docker 映像,例如
    lambci/lambda
    查看此处
  • 创建您自己的自定义 Dockerfile,将
    requirements.txt
    文件复制到基于 Amazon Linux 的容器内 并运行
    pip install -r requirements.txt
    。然后,您可以将 Docker 容器生成的 python 包复制到主机(您的 PC 或 CI/CD 代理)中,并将其与代码一起压缩到 Lambda。您可以查看 Python 3.11 的示例。

0
投票

在 ECR 中使用图像并将带有代码的 Python 图像上传到 lambda 在此输入图片描述

© www.soinside.com 2019 - 2024. All rights reserved.