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

问题描述 投票:0回答:19

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

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

网上建议的解决方案是安装

apt install libgl1-mesa-glx

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

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

python ubuntu-14.04
19个回答
592
投票

将以下行添加到您的 Dockerfile:

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

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

[2022 年 1 月 20 日的小更新:按照 Docker 的建议,永远不要单独放置

RUN apt-get update
,导致缓存问题]


150
投票

即使上述解决方案有效。但是它们的包装尺寸很大。

libGL.so.1
由包裹
libgl1
提供。所以下面的代码就足够了。

apt-get update && apt-get install libgl1

77
投票

我认为这是一个更好的解决方案。包

python3-opencv
包括 OpenCV 的所有系统依赖项。

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

74
投票

尝试安装

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

包文档讨论了这个和相关的(更广泛的)

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

32
投票

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

27
投票

如果您使用的是 CentOS、RHEL、Fedora 或其他使用

yum
的 Linux 发行版,您将需要:

sudo yum install mesa-libGL -y

15
投票

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

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

13
投票

把这个放在

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

......

5
投票

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

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


4
投票

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

pip install opencv-contrib-python

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


4
投票

这是您需要的解决方案:

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

2
投票

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

dnf install opencv

引入所有需要的依赖项。


2
投票

“安装 opencv-python-headless 而不是 opencv-python” 这适用于我的情况! 我正在将我的网站部署到 Azure 并弹出此异常: ImportError: libGL.so.1: 无法打开共享对象文件: 没有这样的文件或目录 然后我卸载opencv-python包,安装后面的那个, 冻结需求,然后再次部署, 然后问题就解决了。


2
投票

如果您使用的是 docker 或在服务器环境中,请使用

opencv-python-headless


1
投票

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

sudo apt-get install ffmpeg libsm6 libxext6  -y

1
投票

对我来说,问题与代理设置有关。对于 pypi,我使用的是 pypi 的 nexus 镜像,对于 opencv 没有任何作用。直到我连接到另一个网络。


0
投票

在 rocky linux 9 中,我使用命令解决了错误

dnf install mesa-libGLU


0
投票

我在 Ubuntu 桌面上遇到了同样的问题,其他解决方案都不适合我。

libGL.so.1
已正确安装,但由于某种原因 Python 无法看到它:

$ ldconfig -p | grep libGL.so.1
    libGL.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libGL.so.1

唯一有效的解决方案是在

LD_LIBRARY_PATH
中强制使用它。在您的
~/.bashrc
中添加以下内容,然后运行
source ~/.bashrc
或重新启动您的 shell:

export LD_LIBRARY_PATH="/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"

我知道

LD_LIBRARY_PATH
不好 但对我来说这是唯一有效的解决方案。


0
投票

这个命令对我有用。

apt-get install libgl1 
© www.soinside.com 2019 - 2024. All rights reserved.