3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ImportError libgl.so.1 cannot open shared object file no such file or directory を解決したい

Last updated at Posted at 2021-04-03

はじめに

opencvを使った、Djangoのデプロイについて、
ハマったので、個人備忘録を残します。
知識不足だったのは以下の2点。(2021/03/30現在)

  • staticファイルの取扱いについて
  • opencvのライブラリ

以下は、GitHub に push したDjango プロジェクトを
Heroku にデプロイする時の話です。

デプロイ後、
Webアプリを起動すると、ブラウザに以下の文章が表示され、
何をしたらいいのかよく分からない状態に陥りました。

Not Found

The requested resource was not found on this server.

今回はこのエラーに対する解決策を残します。

目次

  1. 開発環境
  2. Not Found の原因は opencv なので opencv-python-headless に変更して解決する
  3. アプリケーションサーバーで静的ファイルを参照できるようにpython manage.py collectstaticを実行する
  4. 参考文献

開発環境

MacBook Air 2017
macOS Catalina 10.15.16

dj-database-url==0.5.0
Django==3.1.7
django-heroku==0.3.1
gunicorn==20.1.0
mediapipe==0.8.3.1
numpy==1.20.2
opencv-python==4.5.1.48

venv (python -m venv venv)

Not Found の原因は opencv なので opencv-python-headless に変更して解決する

まずは原因を探すために以下を入力。

(venv) % heroku logs --tail

すると、ログの中間あたりに次のようなエラーが記録されていました。

(venv) % ImportError libgl.so.1 cannot open shared object file no such file or directory

調べてみると、
herokuでOpenCVを利用する [Python3]
を見つけ、同じような手順でbuildpacks、
Aptfileを追加してもエラーは解消されなかった。

そもそも ImportError: libSM.so.6:..ではなく、
...so.1:なんだけどな...
と思いながらさらに調べていくと、
以下にたどり着きました。
Importerror: libgl.so.1: cannot open shared object file: no such file or directory opencv error

以下のように、
requirements.txtを編集したら良かったみたいです。

requirements.txt

traitlets==4.3.3
tzlocal==2.1
urllib3==1.26.2
validators==0.18.1
watchdog==0.10.4
wcwidth==0.2.5
webencodings==0.5.1
widgetsnbextension==3.5.1
wincertstore==0.2
zipp==3.4.0
opencv-python--headless==4.5.1.48


上記のように、opencvライブラリは
--headless を含めたバージョンへの変更が必要だったみたいです。


<a id="#アプリケーションサーバーで静的ファイルを参照できるようにpython-manage.py collectstaticを実行する"></a>
# アプリケーションサーバーで静的ファイルを参照できるようにpython manage.py collectstaticを実行する

これでデプロイは成功したかのように思えましたが、
ブラウザ上での表示は変わらず Not Found.. のままでした。

何も表示されないのは、さすがにおかしいと思い、
静的ファイル関連で調べていくと、
以下の記事が見つかりました。

[Djangoにおける静的ファイル(static file)の取り扱い](https://qiita.com/saira/items/a1c565c4a2eace268a07)

この記事を参考に、
ターミナル上で以下を実行しました。

```terminal
(venv) % python manage.py collectstatic

これを実行し、
GitHub と Heroku への更新を反映させると、
無事アプリが表示されました。

Opencv は便利だけど大体導入でつまづく...。

参考文献

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?