相关疑难解决方法(0)

如何使用 ctypes.util.find_library 在 AWS lambda (python) 中导入 .so 库?

我正在尝试什么

我在 Lambda 上使用的 python 包 (OCRMYPDF) 需要 leptonica 库liblept.so.5。在隔离导入代码时,我发现问题在于find_library('lept')。打印结果返回 None。

from ctypes.util import find_library
def lambda_handler(event, context):
    liblept=find_library('lept')
    print("liblept:%s"%liblept)
Run Code Online (Sandbox Code Playgroud)

我正在使用的 python 包需要许多本机编译的依赖项。我正在尝试使用 lambda 层导入它们。

层结构

/opt/
  /opt/bin/
  /opt/lib/
    /opt/lib/liblept.so.5
  /opt/tesseract
Run Code Online (Sandbox Code Playgroud)

我可以使用 CDLL 访问该文件(代码如下)。但我不想重写包并用 CDLL 替换每个 find_library() 。是否可以设置find_library的导入目录?

/opt/
  /opt/bin/
  /opt/lib/
    /opt/lib/liblept.so.5
  /opt/tesseract
Run Code Online (Sandbox Code Playgroud)

我的图层代码有效

我使用了 docker 镜像来构建层。/opt/bin 中依赖于 leptonica 的文件正在运行(tesseract 运行正常,也测试了 OCR)。

liblept=CDLL("/opt/lib/liblept.so.5") # found
print("liblept:%s"%liblept)
Run Code Online (Sandbox Code Playgroud)

输出

START RequestId: d826d36c-4ce9-4b67-b501-8c9042edcf80 Version: $LATEST
tesseract 4.1.0
 leptonica-1.78.0
  libgif 5.1.4 : libjpeg 6b (libjpeg-turbo 1.2.90) : libpng 1.2.49 : …
Run Code Online (Sandbox Code Playgroud)

python ocr ctypes aws-lambda

5
推荐指数
1
解决办法
5483
查看次数

标签 统计

aws-lambda ×1

ctypes ×1

ocr ×1

python ×1