无法在 AWS Lambda 中加载 dlib
Unable to load dlib in AWS Lambda
我正在 AWS Lambda 中创建一个使用 DLIB 包的函数。我让它在本地运行良好,然后为了确保我正确编译二进制文件,我创建了一个基于 AMI information given by Amazon 的 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
。几天来我一直在思考 table。对于我的生活,我无法弄清楚如何指示 lambda 使用我在 libs
目录中给出的 libstdc++.so.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 文件夹和完整的 lib 文件夹中,并将其上传到 AWS lambda(通过 S3 存储桶)。它应该工作。对我有用的文件夹结构是这样的。
├── 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()
那样在代码中手动 link ,因此请删除这些行。 AWS lambda 将自动从 lib
文件夹加载共享库。
我正在 AWS Lambda 中创建一个使用 DLIB 包的函数。我让它在本地运行良好,然后为了确保我正确编译二进制文件,我创建了一个基于 AMI information given by Amazon 的 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
。几天来我一直在思考 table。对于我的生活,我无法弄清楚如何指示 lambda 使用我在 libs
目录中给出的 libstdc++.so.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 文件夹和完整的 lib 文件夹中,并将其上传到 AWS lambda(通过 S3 存储桶)。它应该工作。对我有用的文件夹结构是这样的。
├── 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()
那样在代码中手动 link ,因此请删除这些行。 AWS lambda 将自动从 lib
文件夹加载共享库。