Python 无法在AWS Lambda中加载dlib

Python 无法在AWS Lambda中加载dlib,python,aws-lambda,dlib,Python,Aws Lambda,Dlib,我正在AWS Lambda中创建一个使用DLIB包的函数。我让它在本地正常工作,然后为了确保正确编译二进制文件,我基于创建了一个EC2实例,但我似乎无法正确打包依赖项 这是我尝试测试功能时从AWS Lambda收到的错误: Unable to import module 'lambda_function': /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /var/task/site-packa

我正在AWS Lambda中创建一个使用DLIB包的函数。我让它在本地正常工作,然后为了确保正确编译二进制文件,我基于创建了一个EC2实例,但我似乎无法正确打包依赖项

这是我尝试测试功能时从AWS Lambda收到的错误:

Unable to import module 'lambda_function': /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /var/task/site-packages/dlib.cpython-36m-x86_64-linux-gnu.so)
在我的包中(保存在S3中,因为它是49mb),我有我的
lambda_function.py
文件,然后是两个子目录,分别名为
libs
site packages
Libs
包含诸如
liblapack.so
libquadmath.so
libstdc++.so.6
等文件

然后,
site packages
目录包含我的python代码的所有依赖项-
CV
Numpy
Dlib
。几天来我一直把头撞在桌子上。就我的一生而言,我不知道如何指导lambda使用
libstdc++。因此,我在
libs
目录中给出了.6

我想我在
lambda_function.py

import sys
import os

# Import installed packages (in site-packages and lib)
CWD = os.path.dirname(os.path.realpath(__file__))

site_pkgs = os.path.join(CWD, "site-packages")
lib_pkgss = os.path.join(CWD, "libs")

sys.path.append(site_pkgs)
sys.path.append(lib_pkgss)

import json
import cv2
import numpy as np
import dlib
import boto3
...

你知道我在这里遗漏了什么吗?

不要使用site packages文件夹。相反,将文件压缩到site packages文件夹和complete lib文件夹中,并将其上载到AWS lambda(通过S3 bucket)。那就行了。对我有效的文件夹结构是这样的

├── dlib.cpython-36m-x86_64-linux-gnu.so
├── easy_install.py
├── lambda_function.py
├── lib
│   ├── libgfortran.so.3
│   ├── libopenblas.so.0
│   └── libquadmath.so.0          # only these three are needed.
├── pip
├── pip-10.0.1.dist-info
├── pkg_resources
├── setuptools
├── setuptools-39.0.1.dist-info
├── numpy
└── any other packages you might have(like scikit opencv etc)

压缩此文件夹,然后将其上载到lambda。您不需要像使用
sys.path.append()
os.path.join()
那样在代码内部手动链接,所以请删除这些行。AWS lambda将自动从
lib
文件夹加载共享库

太棒了!有时间我会试试这个。感谢您的回复:)您遇到了什么错误?此外,当你压缩文件时,不包括顶级文件夹。因此,我意识到,当我上传时,我在Lambda中遇到了一个不同的错误,我错过了,lib文件夹已经工作了。只是使用Amazons AMI重新编译DLIB。