heroku poppler buildpack 错误“libpng12.so.0:无法打开共享对象文件:没有这样的文件或目录”

问题描述

我正在尝试使用 pdf2image 库,特别是 convert_from_bytes 方法来使用 PyTesseract 将 pdf 转换为 txt 文件。我的应用程序在本地运行,但我想将该应用程序部署到 heroku。我曾尝试将 python-poppler 添加到我的 pipfile 中,但它在部署过程中无法下载。我一直在尝试使用 buildpack https://github.com/survantjames/heroku-buildpack-poppler.git,但是当我尝试使用该应用程序时,我在日志中收到此错误

2021-02-24T02:02:07.068105+00:00 app[web.1]: pages = convert_from_bytes(file,500)
2021-02-24T02:02:07.068106+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/pdf2image/pdf2image.py",line 270,in convert_from_bytes
2021-02-24T02:02:07.068124+00:00 app[web.1]: return convert_from_path(
2021-02-24T02:02:07.068131+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/pdf2image/pdf2image.py",line 97,in convert_from_path
2021-02-24T02:02:07.068132+00:00 app[web.1]: page_count = pdfinfo_from_path(pdf_path,userpw,poppler_path=poppler_path)["Pages"]
2021-02-24T02:02:07.068132+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/pdf2image/pdf2image.py",line 471,in pdfinfo_from_path
2021-02-24T02:02:07.068133+00:00 app[web.1]: raise pdfpageCountError(
2021-02-24T02:02:07.068133+00:00 app[web.1]: pdf2image.exceptions.pdfpageCountError: Unable to get page count.
2021-02-24T02:02:07.068134+00:00 app[web.1]: pdfinfo: error while loading shared libraries: libpng12.so.0: cannot open shared object file: No such file or directory

我该怎么做才能在 heroku 上安装 poppler 并在我的应用中工作?谢谢!

解决方法

解决方案 1:

查找哪些包包含libpng12.so.0
https://packages.debian.org/search?lang=en&suite=jessie&arch=i386&mode=filename&searchon=contents&keywords=libpng12.so.0

这是 libpng12-0:
https://packages.debian.org/en/jessie/libpng12-0

libpng 是一个实现用于读取和写入 PNG(便携式网络图形)格式文件的接口的库。

正是您在做什么(您正在从 pdf 创建图像)。这是您的 Poppler 构建包所需的依赖项。

您已经成功安装了 Python buildpack 和 Poppler buildpack。您需要先添加第三个构建包来安装 Poppler 的依赖项。

您可以使用 Apt 构建包:https://github.com/heroku/heroku-buildpack-apt
您可以在其中指定内容为 Aptfilelibpng12-0

然后是关于

的错误信息
2021-02-24T02:02:07.068134+00:00 app[web.1]: pdfinfo: error while loading shared libraries: libpng12.so.0: cannot open shared object file: No such file or directory

应该没了。可能会弹出有关您以相同方式解决的其他依赖项的新错误。


解决方案 2:

或者您只是修复 Poppler buildpack:https://github.com/survantjames/heroku-buildpack-poppler

正如您从自述文件中看到的,当他们创建它时,它是为 Cedar-14 设计的。此堆栈不再可用。您可以尝试使其与 Heroku-20 堆栈兼容。

compile 中,您必须指示它安装缺少的依赖项。

Here 您可以看到 Calibre 的依赖项是如何安装的。

如果问题不是依赖问题而是安装 Poppler 本身解决方案 1 不起作用。


解决方案 3:

可能已经有一个支持 Heroku-20 堆栈的 Poppler buildpack。您尝试的 Poppler buildpack 已有 5 年历史。有许多第三方 Poppler 构建包,例如this one 刚满 1 岁。
您将不得不尝试一下。


我不知道哪种解决方案是正确的。您将不得不尝试一下。 例如。解决方案 3 目前可能不可用。 Heroku-20 堆栈是新的,人们可能还没有使它与新的 Heroku 堆栈兼容。也许我链接的 buildpack 是 Heroku-18 堆栈的解决方案。

解决方案 2 始终有效,但它需要了解 buildpack 的工作原理和创建方式。这是最“复杂”的解决方案,也是最优雅的解决方案。

解决方案 1 可能有效但不是必需的,而且更易于修复。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...