在 aws lambda 中导入 pdfminer 时出错

Error on importing pdfminer in aws lambda

很抱歉问了重复的问题,因为他们没有解决我之前已经在这里问过的问题,如何使用 lambda 函数将 pdf 文件从 s3 转换为字符串变量,

我的 lambda 函数显示错误

我在 this answer 中找到以下代码 但我坚持在 lambda 中实现这段代码,请分享你的想法,如果下面的代码正确,数据变量将包含 s3 中 pdf 文件的字符串转换。如果否,请提出一些更改我的代码的建议

Unable to import module 'lambda_function': No module named 'pdfminer'

import json
import boto3
import botocore
import sys
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter
from pdfminer.layout import LAParams
import io
s3 = boto3.client('s3')
def lambda_handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    filename = 'myfile'
    s3.download_file(bucket,key, '/tmp/'+filename)
    print('reading')
    fp = open('/tmp/'+filename, 'rU').read()
    rsrcmgr = PDFResourceManager()
    retstr = io.StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    # Create a PDF interpreter object.
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    # Process each page contained in the document.

    for page in PDFPage.get_pages(fp):
    interpreter.process_page(page)
    data =  retstr.getvalue()

    print(data)

这里的问题是你的 lambda 函数无法找到 pdfminer 库。该库不存在于 lambda 容器中。为了克服这个问题,您需要将库安装在应用程序的根目录中(lambda_handler 文件所在的位置)。为此,有两种方法:

  1. 通过 运行 在您目录的根目录中执行此命令来安装 pdfminter:pip install pdfminter -t ./
  2. 在应用程序的根目录中创建一个 requirements.txt 文件并在其中定义 pdfminter。通过 运行 在目录的根目录中执行以下命令来安装所有依赖项:pip install -r requirements.txt -t ./

始终建议您在虚拟环境中运行上述命令。

参考文献:

  • 参考 this AWS 文档关于为 Lambda 创建部署包。
  • 参考 Whosebug 问题,他们在另一个依赖项中遇到了类似的问题。
  • 可以找到列出默认安装在 Python Lambda 环境中的所有模块的文档 here