ImportError: libGL.so.1: cannot open shared object file の対処
結論を先に。このエラーは、OpenCV(cv2)が必要とするシステム共有ライブラリ libGL.so.1 が、サーバやコンテナに入っていないために起きます。libgl1 を入れるか、GUI不要ならヘッドレス版の opencv-python-headless を使えば解決します。
ImportError: libGL.so.1: cannot open shared object file: No such file or directory原因
opencv-python はOpenGL関連の共有ライブラリに依存します。デスクトップ環境なら入っていますが、Dockerの軽量イメージやサーバではこのライブラリが無く、import 時に読み込めず失敗します。
対処
- システムにライブラリを入れます(Debian/Ubuntu系)。
apt-get update && apt-get install -y libgl1環境によっては libglib2.0-0 も必要です。
- サーバやCIなど画面表示が不要な用途なら、ヘッドレス版に置き換えるのが確実です。
pip uninstall -y opencv-pythonpip install opencv-python-headless- Dockerで使うなら、Dockerfileにライブラリ導入を書いておきます。
RUN apt-get update && apt-get install -y libgl1 && rm -rf /var/lib/apt/lists/*まとめ
- 原因は cv2 が使う libGL.so.1 がシステムに無いこと
- apt で libgl1(必要なら libglib2.0-0)を入れる
- 画面不要なら opencv-python-headless に置き換える
- Docker はDockerfileでRUN apt-get install しておく