Begin Again

Begin Again

technology

HEROKU with OpenCV-Python

HEROKUでPythonバックエンド(Flask)のアプリを動かそうとした際のエラー備忘録。

HEROKUがPythonを認識しない(requirements.txt)

f:id:Orihasam810:20200816061636p:plain
画像引用元:https://jp.heroku.com/home
HEROKUはrequirements.txtファイルによってPythonプログラムであることを認識する。 そこでrequirements.txtを作成し、Pythonプログラムのあるディレクトリに保存する。 requirements.txtの作成はpip freezを使うのが楽。 以下のコマンドを打ち込む。

pip freeze > requirements.txt

これで自分の環境にインストールされているライブラリが記述されたファイルが現在のディレクトリに作成される。
venvで仮想環境をアクティベートしている状態だと、仮想環境にインストールされているライブラリのみが書き出されるため、バージョン管理のためvenv環境で行う方が良い。

HEROKUが起動するPythonファイルを認識するためのProcfileも作成する必要がある。
こちらは拡張子が無いので、テキストエディタで作成する際に気をつける必要がある。
内容は以下の通り。

web: gunicorn Pythonファイル名:app

WSGIにgunicornを使用しているため、requirements.txtを作成する前に

pip install gunicorn

でgunicornをインストールしておく。

OpenCV関連エラー(libSM.so.6)

f:id:Orihasam810:20200816061945p:plain
画像引用元:https://opencv.org/
openCVをインポートしているプログラムをデプロイしたところ、

ImportError: libSM.so.6: cannot open shared object file: No such file or directory

というエラーがでた。 libSM.so.6がHEROKUには無いためでたエラーのようだ。
そこで、ターミナルに以下のコマンドを入力してbuildpackを追加する。

$ heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-apt

Aptfileをテキストエディタで作成し、requirements.txtと同じディレクトリに保存する。拡張子は無いので注意。
Aptfileの内容は以下の通り。

libsm6
libxrender1
libfontconfig1
libice6

これで準備は完了したのでデプロイする。

$ git add .
$ git commit -m "add_Aptfile"
$ git push heroku master

これで無事openCVがHEROKUで使えるようになる。

WEB技術全般について体系的に学習するならこの一冊がおすすめ

プロになるためのWeb技術入門 なぜ,あなたはWebシステムを開発できないのか [ 小森裕介 ]

価格:2,508円
(2020/8/16 06:25時点)
感想(10件)