我必须在AWS的Python Lambda函数上运行 pdf2image ,但是这需要在计算机上安装poppler和poppler-utils。
我试图在许多不同的地方搜索该怎么做,但是找不到任何东西或使用lambda函数完成此操作的任何人。
你们中的任何人都知道如何生成poppler二进制文件,将其放在我的Lambda包中并告诉Lambda使用吗?
谢谢大家。
答案 0 :(得分:1)
AWS lambda在包含软件和库的执行环境中运行,如果您不需要的任何东西都不需要安装,则需要安装它以创建执行环境。 https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html
对于poppler,请按照以下步骤创建自己的二进制文件 https://github.com/skylander86/lambda-text-extractor/blob/master/BuildingBinaries.md
答案 1 :(得分:0)
为了将Poppler放在Lambda上,我们将构建一个包含poppler的压缩文件夹并将其添加为图层。在运行Amazon Linux 2(t2micro足够多)的EC2实例上执行以下步骤。
在EC2机器上安装docker。说明here
mkdir -p poppler_binaries
使用此link或从下面复制/粘贴。
FROM ubuntu:18.04
# Installing dependencies
RUN apt update
RUN apt-get update
RUN apt-get install -y locate \
libopenjp2-7 \
poppler-utils
RUN rm -rf /poppler_binaries; mkdir /poppler_binaries;
RUN updatedb
RUN cp $(locate libpoppler.so) /poppler_binaries/.
RUN cp $(which pdftoppm) /poppler_binaries/.
RUN cp $(which pdfinfo) /poppler_binaries/.
RUN cp $(which pdftocairo) /poppler_binaries/.
RUN cp $(locate libjpeg.so.8 ) /poppler_binaries/.
RUN cp $(locate libopenjp2.so.7 ) /poppler_binaries/.
RUN cp $(locate libpng16.so.16 ) /poppler_binaries/.
RUN cp $(locate libz.so.1 ) /poppler_binaries/.
运行以下命令将在您的主目录中生成一个zip文件。
docker build -t poppler-build .
# Run the container
docker run -d --name poppler-build-cont poppler-build sleep 20
#docker exec poppler-build-cont
sudo docker cp poppler-build-cont:/poppler_binaries .
# Cleaning up
docker kill poppler-build-cont
docker rm poppler-build-cont
docker image rm poppler-build
cd poppler_binaries
zip -r9 ..poppler.zip .
cd ..
下载zip文件或将其上传到S3。转到Lambda控制台页面创建一个图层,然后将其添加到您的函数中。有关图层here的信息。
为了避免像here所述那样在zip中添加不必要的文件夹结构。我们将添加一个环境变量以指向我们的依赖项
PYTHONPATH: /opt/
还有中提琴!您现在可以在Poppler上使用Lambda函数了!
注意:归功于这两篇文章,这有助于我将其拼凑起来
警告:请勿尝试将pdf2image添加到同一层。我不确定为什么,但是当它们在同一层时,pdf2image找不到poppler。
答案 2 :(得分:0)
@Alex Albracht,您好:感谢您编写的简单说明!他们帮了很多忙。但是我真的很难让lambda函数找到poppler路径。因此,我会尽力将其加起来,以使其清楚。
二进制文件应该放在一个zip文件夹中,该文件夹的结构如下: poppler.zip-> bin / poppler 其中poppler文件夹包含二进制文件。然后可以将此压缩文件夹作为层上传到AWS lambda中。
要使pdf2image起作用,它需要poppler路径。这应该以“ / opt / bin / poppler”格式包含在lambda函数中。
例如, poppler_path =“ / opt / bin / poppler” 页面= convert_from_path(PDF_file,500,poppler_path = poppler_path)