首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在AWS Lambda中加载dlib

无法在AWS Lambda中加载dlib
EN

Stack Overflow用户
提问于 2019-01-06 04:53:12
回答 1查看 654关注 0票数 1

我正在AWS Lambda中创建一个使用DLIB包的函数。我让它在本地运行得很好,然后为了确保我正确地编译了二进制文件,我创建了一个基于AMI information given by Amazon的EC2实例,但是我似乎不能正确地打包我的依赖项。

这是我在尝试测试函数时从AWS Lambda收到的错误:

代码语言:javascript
复制
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文件,然后是两个子目录,名为libssite-packagesLibs包含liblapack.solibquadmath.solibstdc++.so.6等文件。

site-packages目录包含了我的python代码的所有依赖项-- CVNumpyDlib。我已经把头撞在桌子上好几天了。我怎么也搞不懂如何指示lambda使用我在libs目录中给出的libstdc++.so.6

我认为我正确地链接了lambda_function.py中的所有包

代码语言:javascript
复制
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
...

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-14 15:17:43

不要使用site-packages文件夹。相反,将文件压缩到site-packages文件夹和完整的lib文件夹中,并将其上传到AWS lambda(通过S3存储桶)。那么它应该可以工作了。我使用的文件夹结构是这样的。

代码语言:javascript
复制
├── 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文件夹加载共享库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54056161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档