【问题标题】:ImportError: libGL.so.1: cannot open shared object file: No such file or directoryImportError:libGL.so.1:无法打开共享对象文件:没有这样的文件或目录
【发布时间】:2019-08-14 06:23:39
【问题描述】:

我正在尝试运行 cv2,但是当我尝试导入它时,我收到以下错误:

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

建议的在线解决方案正在安装

apt install libgl1-mesa-glx

但这已经安装并且是最新版本。

注意:我实际上是在 Docker 上运行它,我无法检查 OpenCV 版本。我尝试导入 matplotlib 并且导入正常。

【问题讨论】:

  • 你是怎么安装的? pip install opencv-python?可能是另一个问题。见github.com/matplotlib/matplotlib/issues/9954。尝试创建一个 virtualenv 并在那里测试它。你能分享你的代码 sn-p 抛出异常的地方吗?

标签: python ubuntu-14.04


【解决方案1】:

将以下行添加到您的 Dockerfile:

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

这些命令安装通常存在于本地计算机上的 cv2 依赖项,但可能会在您的 Docker 容器中丢失,从而导致问题。

【讨论】:

  • 它有什么作用,为什么我需要它用于 cv2?
  • 我收到一个错误:“E: Repository 'deb.debian.org/debian buster-updates InRelease' 将其 'Suite' 值从 'stable-updates' 更改为 'oldstable-updates'”。我通过使用修复它:sudo apt-get update --allow-releaseinfo-change
  • 这个解决方案对我有用,然后在 Docker 构建期间停止工作。我按照@SuryaTej 的建议将我的基本图像更改为 python:3.8-slim-buster,它起初工作,但后来也停止工作。我认为这可能是我这边的网络问题,但构建失败的频率往往更高。 > #8 254.6 Get:197 deb.debian.org/debian buster/main amd64 xdg-user-dirs amd64 0.17-2 [53.8 kB] > #8 254.6 E: 无法获取 deb.debian.org/debian/pool/main/libp/libpng1.6/… Hash Sum mismatch > #Last modify reported: Mon, 2019 年 4 月 8 日 10:11:25
  • 作者在 cmets 中提到他在 docker 中执行此操作。此命令只是安装本地机器上正常存在的 cv2 依赖项,但可能会在您的 docker 中丢失,从而导致问题@wovano
【解决方案2】:

在我看来,这是一个更好的解决方案。包python3-opencv包含了OpenCV的所有系统依赖。

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

【讨论】:

  • 我正在使用python:buster。上面的解决方案对我不起作用:ffmpeg 似乎已被弃用,我仍然有写入错误。 apt-get install -y python3-opencv 成功了。谢谢
  • 这几乎可以得到你想要的每一个库。我没试过,但是还需要 pip install 吗?
  • @MarkCarpenterJr - 使用 pip 将帮助您将打包版本保持在定义状态。如果您使用操作系统的版本,如果您的发行版正在更改软件包,您最终可能会更改依赖项。这可能不是你想要的。
  • 这绝对是最稳定的方法。 ffmpeg 问题正在打破主要答案。
【解决方案3】:

即使上述解决方案有效。但是它们的包装尺寸很大。 libGL.so.1 由包 libgl1 提供。所以下面的代码就足够了。

apt-get update && apt-get install libgl1

【讨论】:

    【解决方案4】:

    尝试安装opencv-python-headless python 依赖而不是opencv-python。这包括一个没有外部依赖项(numpy 除外)的预编译二进制轮,适用于 Docker 等无头环境。与使用 python3-opencv Debian 软件包(及其所有依赖项)相比,这在我的 docker 映像中节省了近 700mb。

    package documentation 讨论了这个和相关的(更广泛的)opencv-contrib-python-headless pypi 包。

    复制问题中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
    

    【讨论】:

      【解决方案5】:

      把这个放在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
      
      ......
      

      【讨论】:

        【解决方案6】:

        对我来说,唯一有效的 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
        

        【讨论】:

        • 谢谢。如果你正在使用 contrib,请不要忘记 opencv-contrib-python-headless
        【解决方案7】:

        就我而言,执行以下操作就足够了,与above solutions相比也节省了空间

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

        【讨论】:

        • 这确实占用了更少的空间。适用于 ubuntu 20
        【解决方案8】:

        如果您使用的是 CentOS、RHEL、Fedora 或其他使用 yum 的 Linux 发行版,您会想要:

        sudo yum install mesa-libGL -y
        

        【讨论】:

        • 这对我有帮助。非常感谢。
        • 这对我很有帮助,谢谢
        【解决方案9】:

        我在 GCP Appengine Flex 服务器环境中尝试使用 OpenCV 时遇到了同样的错误。将 requirements.txt 中的“opencv-python-headless”替换为“opencv-python”解决了这个问题。

        OpenCV documentation 讨论了桌面与服务器(无头)环境的不同软件包。

        【讨论】:

          【解决方案10】:

          在缺少各种图形库的非 gui 服务器上使用 pip3 install opencv 后,在 centos 8 上遇到了同样的问题。

          dnf install opencv

          引入所有需要的依赖项。

          【讨论】:

            【解决方案11】:

            对于一个树莓派,把这个,为我工作:

            sudo apt-get install ffmpeg libsm6 libxext6  -y
            

            【讨论】:

              【解决方案12】:

              这是您需要的解决方案:

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

              【讨论】:

              • apt-get upgrade 更新所有已安装的软件包,这完全是矫枉过正
              【解决方案13】:

              对我来说,问题与代理设置有关。对于 pypi,我使用 pypi 的 nexus 镜像,对于 opencv 没有任何效果。直到我连接到不同的网络。

              【讨论】:

                猜你喜欢
                • 2021-07-19
                • 1970-01-01
                • 2021-04-05
                • 2021-08-18
                • 2016-11-23
                • 1970-01-01
                • 2021-11-27
                • 2021-07-19
                • 1970-01-01
                相关资源
                最近更新 更多