Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x PDFinFonotInstallerRor AWS Lambda can';无法使用pdf2image找到Poppler路径_Python 3.x_Aws Lambda_Poppler - Fatal编程技术网

Python 3.x PDFinFonotInstallerRor AWS Lambda can';无法使用pdf2image找到Poppler路径

Python 3.x PDFinFonotInstallerRor AWS Lambda can';无法使用pdf2image找到Poppler路径,python-3.x,aws-lambda,poppler,Python 3.x,Aws Lambda,Poppler,按照这里的指南:我能够使用EC2获得二进制文件。但现在说到最后一步,我似乎找不到一种方法让pdf2image使用poppler路径。获取错误: "errorMessage": "Unable to get page count. Is poppler installed and in PATH?", "errorType": "PDFInfoNotInstalledError", 我所尝试的: 使用该指南中的package.zip添加lambda层,然后 调用convert\u fro

按照这里的指南:我能够使用EC2获得二进制文件。但现在说到最后一步,我似乎找不到一种方法让pdf2image使用poppler路径。获取错误:

  "errorMessage": "Unable to get page count. Is poppler installed and in PATH?",
  "errorType": "PDFInfoNotInstalledError",
我所尝试的:

  • 使用该指南中的package.zip添加lambda层,然后 调用
    convert\u from\u bytes()
    时没有poppler\u路径
  • 使用该指南中的package.zip添加lambda层,然后使用poppler\u path='/opt/lib/'调用
    convert\u from\u bytes()
  • 将/lib和/bin目录直接添加到我的lambda中,并使用poppler\u path='/var/task/lib/'调用
    convert\u from\u bytes()
  • 使用该指南中的package.zip添加lambda层,并添加映射到/opt/ 4a。执行相同的操作并将其映射到/opt/lib/

    4b。执行相同的操作并将其映射到/opt/bin/

  • 我的lambda适用于上述其中一项:

    import json
    import base64
    import os
    from uuid import uuid4
    from pdf2image import convert_from_bytes
    
    POPPLER_PATH = '/opt/lib/'
    
    def text_process_handler(event, context):
        document = bucketHelper.get_bucket_object('<Bucket>', '<document>.pdf')
        images = convert_from_bytes(document,dpi=150, poppler_path=POPPLER_PATH)
    
        return {
            "statusCode": 200,
            "body": json.dumps({
                "message": "Successful request."
            }),       
        }
    
    了解问题

    好的,我在前两天一直在做这件事,div甚至深入到pdf2image包中,以了解错误发生的原因

    以下是导致错误的原因: pdf2image python包使用子进程库来运行二进制文件,如(pdfinfo、pdftocairo等)

    它运行一个Linux命令,比如
    pdfinfo/path/to/pdf/file
    在我的例子中,压缩时的二进制文件似乎是在
    chmod-r750
    (在我的例子中),这阻止了子流程库运行导致错误“permission denied”的命令,然后返回pdf2image包来告诉您所面临的相同错误

    如何解决:

    在压缩二进制文件之前,请确保通过运行
    chmod-R 777在777上修改文件。

    然后在运行方法
    convert\u from\u path()
    时,将
    poppler\u路径设置为二进制文件的distenation

    就这样

    注意:我创建了一个仅包含要使用的popplet UTIL二进制文件的层 在函数中

    +--lib
    |  +--libpoppler.so.70
    |  +--libtiff.so.5
    |  +--etc...
    +--bin
    |  +--pdftoppm
    |  +--pdftotext
    |  +--etc...