导入错误:libGL.so.1:无法打开共享对象文件:没有这样的文件或目录

Rya*_*an 112 python ubuntu-14.04

我正在尝试运行 cv2,当我尝试导入它时,我得到了

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

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

apt install libgl1-mesa-glx

但这已经安装并且是最新版本。任何帮助都会非常有帮助。提前致谢。

Tus*_*lhe 228

RUN apt-get update ##[edited]
RUN apt-get install ffmpeg libsm6 libxext6  -y
Run Code Online (Sandbox Code Playgroud)

将这些行添加到您的 Dockerfile

  • 如果您不需要 GUI 功能,下面的答案可以使用 opencv-python-headless,请参阅此处:https://github.com/opencv/opencv-python/issues/370 (10认同)
  • 它有什么作用以及为什么 cv2 需要它? (6认同)
  • 这非常有帮助。在我的远程服务器上运行 cv2 时遇到问题。 (4认同)
  • 该解决方案适用于 python:3.8-slim-buster 基础映像 (3认同)
  • 作者在评论中提到他正在 docker 中执行此操作。此命令仅安装本地计算机上正常存在的 cv2 依赖项,但在您的 docker 中可能会丢失,从而导致问题@wovano (3认同)
  • nit:我不需要 ffmpeg (3认同)

小智 224

尽管上述解决方案有效。但他们的包装尺寸相当大。 libGL.so.1由包提供libgl1。所以下面的代码就足够了。

apt-get update && apt-get install libgl1
Run Code Online (Sandbox Code Playgroud)

  • 与接受的答案相比,这是一个更简洁的解决方案。 (9认同)

Rec*_*nic 125

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

文档讨论了这个以及相关的(更广泛的)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
Run Code Online (Sandbox Code Playgroud)

  • 这是最佳答案!!效果很好!当您没有安装系统软件包的权限时,无需摆弄 apt-get 或系统安装。谢谢! (9认同)
  • 在我的例子中,它运行得很好,可以在 Azure ML 中构建 python 环境的 docker 镜像。太感谢了!! (2认同)
  • 哇!其他答案要求我安装 &gt;1GB 的依赖项,这非常有效! (2认同)

sou*_*g78 41

对我来说,唯一有效的 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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。如果您使用 contrib,请不要忘记 opencv-contrib-python-headless (2认同)

Mat*_*ith 39

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

sudo yum install mesa-libGL -y
Run Code Online (Sandbox Code Playgroud)

在 Arch 中,这映射到 extra/mesa:

sudo pacman -S mesa-libgl
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。这对于 Amazon Linux 特别有用。 (3认同)
  • 这对我有帮助。非常感谢。 (2认同)

And*_*udy 19

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

RUN apt-get update && apt-get install -y python3-opencv
RUN pip install opencv-python
Run Code Online (Sandbox Code Playgroud)

  • @MarkCarpenterJr - 使用 pip 将帮助您将打包版本保持在定义的状态。如果您使用操作系统的版本,并且您的发行版正在更改软件包,则最终可能会更改依赖项。这可能不是您想要的。 (4认同)
  • 这绝对是最稳定的做法。ffmpeg 问题正在打破主要答案。 (4认同)
  • 我正在使用“python:buster”。上面的解决方案对我不起作用:“ffmpeg”似乎已被弃用,并且我仍然有写入错误。`apt-get install -y python3-opencv` 成功了。谢谢 (3认同)

Max*_*axi 19

就我而言,执行以下操作就足够了,与上述解决方案相比,这也节省了空间

RUN apt-get update && apt-get install -y --no-install-recommends \
        libgl1 \
        libglib2.0-0 \
Run Code Online (Sandbox Code Playgroud)


Epi*_*hen 9

把这个放在 Dockerfile

RUN apt-get update
RUN apt install -y libgl1-mesa-glx
Run Code Online (Sandbox Code Playgroud)

行前

COPY requirements.txt requirements.txt
Run Code Online (Sandbox Code Playgroud)

例如

......

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

COPY requirements.txt requirements.txt

......
Run Code Online (Sandbox Code Playgroud)


Chu*_*gha 8

opencv-python-headless如果您使用的是 docker 或在服务器环境中,请使用。


Ale*_*122 6

仔细观察错误信息

我收到错误:

ImportError: libEGL.so.1: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

这与以下内容非常相似:

ImportError: libGL.so.1: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

基本上libGL变成libEGL(额外E

在这种情况下,您必须安装libegl1而不是libgl1

ImportError: libEGL.so.1: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)


小智 5

这是您需要的解决方案:

pip install -U opencv-python
apt update && apt install -y libsm6 libxext6 ffmpeg libfontconfig1 libxrender1 libgl1-mesa-glx
Run Code Online (Sandbox Code Playgroud)

  • `apt-get update` 更新所有已安装的软件包,这完全是多余的 (2认同)

小智 5

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

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


小智 5

我在 docker 容器中使用 cv2 时遇到了这个问题。我通过以下方式修复了它:

pip install opencv-contrib-python
Run Code Online (Sandbox Code Playgroud)

安装opencv-contrib-python而不是opencv-python

  • 在某一时刻,我使用了 [opencv-python-headless](https://pypi.org/project/opencv-python-headless/),当我在 Heroku 上部署一次时,它适用于我的 FastAPI 案例。contrib 和 headless 有什么区别? (2认同)