0

私はpdf2imageライブラリ、特にconvert_from_bytesメソッドを使用して、pytesseractを使用してpdfをtxtファイルに変換しようとしています。私のアプリはローカルで実行されますが、アプリを heroku にデプロイしたいと考えています。pipfile に python-poppler を追加しようとしましたが、展開中にダウンロードに失敗します。ビルドパック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

poppler を heroku にインストールしてアプリで動作させるにはどうすればよいですか? ありがとう!

4

1 に答える 1

1

解決策 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 (Portable Network Graphics) 形式のファイルを読み書きするためのインターフェイスを実装したライブラリです。

まさにあなたがしていることです(PDFから画像を作成しています)。これは、Poppler ビルドパックに必要な依存関係です。

Poppler ビルドパックと一緒に Python ビルドパックをインストールすることができました。最初に Poppler の依存関係をインストールする 3 番目のビルドパックを追加する必要があります。

Apt ビルドパックを使用できます: https://github.com/heroku/heroku-buildpack-aptそこで、 content で
を指定します。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 ビルドパックを修正するだけです: https://github.com/survantjames/heroku-buildpack-poppler

作成時の ReadMe からわかるように、Cedar-14 用でした。このスタックは利用できなくなりました。Heroku-20 スタックと互換性を持たせることができます。

compile不足している依存関係をインストールするように指示する必要があります。

ここでは、Calibre の依存関係がどのようにインストールされたかを確認できます。

問題が依存関係の問題ではなく、Poppler 自体のインストールでは解決策 1 が機能しない場合。


解決策 3:

Heroku-20 スタックをサポートする Poppler ビルドパックが既に存在する場合があります。あなたが試した Poppler ビルドパックは 5 年前のものです。多くのサードパーティの Poppler ビルドパックがあります。たとえば、これは 1 年ちょっと前のものです。
それらを試してみる必要があります。


どのソリューションが正しいかはわかりません。それらを試してみる必要があります。たとえば、解決策 3 は現時点では利用できない可能性があります。Heroku-20 スタックは新しく、人々はまだ新しい Heroku スタックと互換性を持たせていない可能性があります。リンクしたビルドパックは、Heroku-18 スタックのソリューションかもしれません。

解決策 2 は常に機能しますが、ビルドパックがどのように機能し、どのように作成されるかについて多少の知識が必要です。これは最も「複雑な」ソリューションですが、最もエレガントなソリューションでもあります。

解決策 1 はおそらく機能しますが、必須ではなく、より簡単に修正できます。

于 2021-02-24T08:36:06.910 に答える