PDFInfoNotInstalledError AWS Lambda не может найти путь Poppler с pdf2image

Следуя руководству здесь: https://www.petewilcock.com/using-poppler-pdftotext-and-other-custom-binaries-on-aws-lambda/ Мне удалось получить двоичные файлы с помощью EC2. Но теперь, что касается последнего шага, я не могу найти способ заставить pdf2image использовать путь Поплера. Получение ошибки:

  "errorMessage": "Unable to get page count. Is poppler installed and in PATH?",
  "errorType": "PDFInfoNotInstalledError",

Что я пробовал:

  1. Добавление лямбда-слоя с помощью package.zip из этого руководства, затем вызов convert_from_bytes() без poppler_path
  2. Добавление лямбда-слоя с помощью package.zip из этого руководства, затем вызов convert_from_bytes() с poppler_path = '/ opt / lib /'
  3. Добавление каталога / lib и / bin непосредственно в мою лямбду и вызов convert_from_bytes() с poppler_path = '/ var / task / lib /'
  4. Добавление лямбда-слоя с помощью package.zip из этого руководства и добавление переменной среды PATH, сопоставленной с / opt / 4a. Проделаем то же самое и сопоставим его с / opt / lib /

    4b. Проделаем то же самое и сопоставим его с / opt / bin /

Моя лямбда для одного из вышеперечисленных:

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."
        }),       
    }

Мой package.zip выглядит так:

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


person Chenny    schedule 20.06.2020    source источник


Ответы (1)


Понять проблему

Что ж, я работал над этим в течение предыдущих 2 дней и даже глубоко погрузился в пакет pdf2image, чтобы понять, почему возникает ошибка.

вот что вызывает ошибку: пакет python pdf2image использует библиотеку подпроцесса для запуска двоичных файлов, таких как (pdfinfo, pdftocairo, ... и т. д.)

и он запускает команду Linux, такую ​​как pdfinfo /path/to/pdf/file, и кажется, что двоичные файлы при сжатии были на chmod -R 750 (в моем случае), и это не позволяет библиотеке подпроцесса запускать команду, вызывающую отказ в разрешении на ошибку, которая затем возвращает пакет pdf2image, чтобы сообщить вам то же самое ошибка, с которой вы сталкиваетесь.

Как решить:

перед заархивированием двоичных файлов убедитесь, что файлы модифицируются на 777, запустив chmod -R 777 .

затем при запуске метода convert_from_path() установите poppler_path в размер вашего двоичного файла.

вот и все

Примечание: я создаю слой, содержащий только двоичные файлы popplet-utils для использования в функции.

person abdlmjeed al-king    schedule 22.06.2020
comment
Какой poppler_path вы указали? А от sam local start-api тестировал? - person Abhishek; 03.07.2021