programing

ImportError: libGL.so.1: 공유 객체 파일을 열 수 없습니다.해당 파일 또는 디렉터리가 없습니다.

bestcode 2022. 9. 21. 00:10
반응형

ImportError: libGL.so.1: 공유 객체 파일을 열 수 없습니다.해당 파일 또는 디렉터리가 없습니다.

cv2를 실행하려고 하는데 Import하려고 하면 다음 오류가 나타납니다.

ImportError: libGL.so.1: cannot open shared object file: No such file or directory

온라인 권장 솔루션이 설치 중입니다.

apt install libgl1-mesa-glx

이미 설치되어 있고 최신 버전입니다.

NB: 실제로 Docker에서 실행 중인데 OpenCV 버전을 확인할 수 없습니다.저는 matplotlib를 수입해 보았지만, 그것은 정상적으로 수입되고 있습니다.

도커 파일에 다음 행을 추가합니다.

RUN apt-get update
RUN apt-get install ffmpeg libsm6 libxext6  -y

이러한 명령어는 보통 로컬머신에 존재하는 cv2 의존관계를 설치하지만 Docker 컨테이너에 존재하지 않아 문제가 발생할 수 있습니다.

위의 솔루션이 작동하더라도.하지만 패키지 사이즈가 꽤 커요. libGL.so.1패키지로 제공되다libgl1그래서 다음 코드로도 충분합니다.

apt-get update && apt-get install libgl1

제 생각에는 이것이 조금 더 나은 해결책입니다.패키지python3-opencv에는 OpenCV의 모든 시스템 의존관계가 포함되어 있습니다.

RUN apt-get update && apt-get install -y python3-opencv
RUN pip install opencv-python

인스톨을 시도하다opencv-python-headless대신 python 의존성opencv-python이것은 외부 의존관계(numpy 이외)가 없는 사전 컴파일 바이너리 휠을 포함하고 있으며 Docker와 같은 헤드리스 환경을 대상으로 하고 있습니다.이것에 의해, 도커 이미지에서는, Docker 를 사용하는 것에 비해, 거의 700 mb 를 절약할 수 있었습니다.python3-opencvDebian 패키지(모든 종속성 포함)

패키지 매뉴얼에서는 이것과 관련 (더 자세한 내용)에 대해 설명합니다.opencv-contrib-python-headlesspypi 패키지

의 재현 예ImportError의문에 있어서

# docker run -it python:3.9-slim bash -c "pip -q install opencv-python; python -c 'import cv2'"
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python3.9/site-packages/cv2/__init__.py", line 5, in <module>
    from .cv2 import *
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
# docker run -it python:3.9-slim bash -c "pip -q install opencv-python-headless; python -c 'import cv2'"
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

저에게 있어서 유일하게 효과가 있었던 WA는 다음과 같습니다.

# These are for libGL.so issues
# RUN apt-get update
# RUN apt install libgl1-mesa-glx
# RUN apt-get install -y python3-opencv
# RUN pip3 install opencv-python
RUN pip3 install opencv-python-headless==4.5.3.56

CentOS, RHEL, Fedora 또는 기타 Linux Distros를 사용하는 경우yum다음과 같은 것이 있습니다.

sudo yum install mesa-libGL -y

이것을 에 넣습니다.Dockerfile

RUN apt-get update
RUN apt install -y libgl1-mesa-glx

행 앞

COPY requirements.txt requirements.txt

예를들면

......

RUN apt-get update
RUN apt install -y libgl1-mesa-glx

COPY requirements.txt requirements.txt

......

제 경우는, 다음의 조작으로 충분했습니다.그 때문에, 상기의 솔루션보다 공간도 절약됩니다.

RUN apt-get update && apt-get install -y --no-install-recommends \
        libgl1 \
        libglib2.0-0 \

GCP Appengine Flex 서버 환경에서 OpenCV를 사용하려고 할 때 동일한 오류가 발생했습니다.요건에서 "opencv-python"을 "opencv-python-headless"로 대체.txt는 문제를 해결했다.

OpenCV 매뉴얼에서는 데스크톱용 패키지와서버(헤드리스) 환경

모든 종류의 그래픽 라이브러리가 없는 비 GUI 서버에서 pip3 install opencv를 사용한 후 centos 8에서도 동일한 문제가 발생하였습니다.

dnf install opencv

필요한 의존관계를 모두 끌어옵니다.

라즈베리 파이에는, 이것을 넣어 주세요.

sudo apt-get install ffmpeg libsm6 libxext6  -y

필요한 솔루션은 다음과 같습니다.

pip install -U opencv-python
apt-get upgrade
apt update && apt install -y libsm6 libxext6 ffmpeg libfontconfig1 libxrender1 libgl1-mesa-glx

저에게는 프록시 설정과 관련된 문제였습니다.pypi는 nexus mirror를 사용하여 pypi를 실행했지만 opencv는 아무것도 작동하지 않았습니다.다른 네트워크에 접속할 때까지.

도커 컨테이너에서 cv2를 사용하다가 이 문제를 발견했습니다.수정 방법:

pip install opencv-contrib-python

opencv-module 대신 opencv-module-module을 설치합니다.

언급URL : https://stackoverflow.com/questions/55313610/importerror-libgl-so-1-cannot-open-shared-object-file-no-such-file-or-directo

반응형