python - 在AWS lambda函数中使用scrapy作为层

标签 python amazon-web-services web-scraping scrapy aws-lambda

我正在尝试在AWS lambda函数中使用scrapy作为一个层。

我使用pip在我的目录中安装scrapy:

pip install scrapy 

目录格式与我已经工作的所有层相同。 我压缩并上传到图层中。 我将该层包含到 lambda 函数中。 我导入了scrapy:

import scrapy

当我运行该项目时,我收到此错误:

{
  "errorMessage": "Unable to import module 'lambda_function'"
}

Unable to import module 'lambda_function': /opt/python/lxml/etree.so: invalid ELF header

最佳答案

正如 @balderman 的评论所暗示的那样,您需要本地库才能运行 scrapy。 这是非常可行的,我会尽量简单地解释。

scrapy 的二进制文件必须在与 lambda 实例相同的环境中编译。 Lambda 使用 AWS Linux 启动。

您可以启动运行 AmazonLinux 的 EC2 或使用 docker,最简单的方法是启动 docker 容器。

$ sudo docker run -it amazonlinux bash

现在您需要将所有 .so 文件下载/解压到一个目录中,然后将其压缩。另外,请确保将所有 .so 文件保存在 zip 内名为 lib 的文件夹中。压缩后,zip 应该类似于以下内容:

.
├── lib
│   ├── libcrypto.so.10
│   ├── libcrypto.so.1.0.2k
│   ├── libfontconfig.so.1
│   ├── libfontconfig.so.1.7.0
.......

然后您可以将其压缩并作为图层上传。它将上传到您的 Lambda 容器中的/opt/。 AWS 在 many other locations 中的/opt/lib 下查找库文件.

对您来说,具有挑战性的部分是弄清楚如何获取所有必需的 .so 文件,以便 scrapy 正常运行。

关于python - 在AWS lambda函数中使用scrapy作为层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55022402/

相关文章:

python - 通过命令行调用scrapy的自定义导出器

html - 从 html 表中提取链接

python - 在 Python 中保存异构图像网格

python - 无法弄清打印语句的问题

python - 使用 PYC 文件而不是 PY

python - 多重处理的映射函数忽略我的全局变量的更新

python - 使用无服务器框架将 Plotly/Dash 应用程序部署到 AWS

python - 如何使用 python 调用带有参数的第二个 lambda 函数

python - AWS Lambda : How to manage deployment packages greater than 250mb

python - 在 Selenium 中使用 find_element_by_class_name 遍历多个类