我正在尝试在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/