プロジェクトのシナリオと問題の説明
インターネットに接続されていないサーバー上の Docker コンテナーで Python プログラムを実行します (Python のバージョンはバージョン 3.8)。インストールされている opencv-python はこのバージョンです:
opencv_python-4.7.0.68-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
プログラム パーツ import cv2 にエラーがあります: ImportError: libGL.so.1: 共有オブジェクト ファイルを開けません: そのようなファイルまたはディレクトリはありません
詳細は次のとおりです。
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.8/dist-packages/cv2/__init__.py", line 181, in <module>
bootstrap()
File "/usr/local/lib/python3.8/dist-packages/cv2/__init__.py", line 153, in bootstrap
native_module = importlib.import_module("cv2")
File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
原因分析:
この理由は主に、Docker を使用してアプリケーションを構築するときに cv2 依存関係が欠如しているためです。このエラーは、必要な追加の依存関係をインストールすることで解決できます。
解決:
オプション 1:
をインストールするとopencv-python-headless
、関連するすべての依存関係がインストールされ、このエラーが解決されます。opencv-python-headless には、外部依存関係 (numpy を除く) のないプリコンパイルされたバイナリ ホイールが含まれており、Docker のようなヘッドレス環境に適しています。私が使用しているバージョンを例に挙げると、
インストールされている opencv-python のバージョンは次のとおりです。
opencv_python-4.7.0.68-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
したがって、対応するバージョンの opencv-python-headless がインストールされ、
opencv_python_headless-4.7.0.68-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
エラーの問題は解決されました。このソリューションはオフライン環境により適しており、必要なのは対応するインストール パッケージのみです。
オプション II:
依存関係をインストールしますlibgl1
。
次のコマンドを使用します。
apt-get update && apt-get install libgl1
3番目の解決策:
cv2 の依存関係をインストールします。
この問題を解決するには、次のコードを DockerFile 行に追加するだけです。
RUN apt-get update
RUN apt-get install ffmpeg libsm6 libxext6 -y
パッケージが更新され、実行に必要な他のパッケージ cv2 がインストールされていることを確認します。
オプション 4:
インストールしますmesa-libGL.x86_64
。
yum インストール mesa-libGL.x86_64
参考:
インポートエラー: libgl.so.1: 共有オブジェクトファイルを開けません: そのようなファイルまたはディレクトリはありません
インポートエラー: libGL.so.1: 共有オブジェクトファイルを開けません