ChatGPT解决这个技术问题 Extra ChatGPT

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

我正在尝试运行 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 并在那里测试它。你能分享你的代码片段在哪里抛出异常吗?

w
wovano

将以下行添加到您的 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 获取: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/… 哈希和不匹配 > #上次修改报告:2019 年 4 月 8 日星期一 10:11:25
作者在评论中提到他在 docker 中这样做。此命令仅安装本地计算机上正常存在的 cv2 依赖项,但可能会在您的 docker 中丢失,从而导致问题@wovano
如果您不要求 GUI 函数,则根据下面的答案可以使用 opencv-python-headless,请参见此处:github.com/opencv/opencv-python/issues/370
A
Awanish Kumar Golwara

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

apt-get update && apt-get install libgl1

A
Andrej Chudy

在我看来,这是一个更好的解决方案。包 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 问题正在打破主要答案。
L
Lucas Wiman

尝试安装 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

s
soumeng78

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

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

sudo yum install mesa-libGL -y

这对我有帮助。非常感谢。
这对我帮助很大,谢谢
谢谢。这对 Amazon Linux 特别有用。
E
Epic Chen

把它放在 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

......

M
Maxi

在我的情况下,执行以下操作就足够了,与 above solutions 相比也节省了空间

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

这确实占用了更少的空间。适用于 ubuntu 20
B
BitSpectrum

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

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


R
Rui Vieira

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

pip install opencv-contrib-python

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


包名有错别字,但我无法编辑它
J
Jens Timmerman

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

dnf install opencv

引入所有需要的依赖项。


i
ibra ndiaye

对于树莓派,请输入这个,为我工作:

sudo apt-get install ffmpeg libsm6 libxext6  -y

K
Karel Macek

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


w
wovano

这是您需要的解决方案:

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

apt-get upgrade 更新所有已安装的软件包,这完全是矫枉过正