我试图运行cv2,但当我试图导入它时,我得到以下错误:

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

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

apt install libgl1-mesa-glx

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

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


在Dockerfile中添加以下代码行:

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

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

[2022年1月20日的小更新:Docker建议,永远不要单独放置RUN apt-get更新,导致缓存问题]


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

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

下面是你需要的解决方案:

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

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

DNF安装opencv

拉入所有需要的依赖项。


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

......

对于树莓派来说,这样写,为我工作:

sudo apt-get install ffmpeg libsm6 libxext6  -y

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

apt-get update && apt-get install libgl1

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

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


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

对我来说,唯一有效的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 apt-get update && apt-get install -y --no-install-recommends \
        libgl1 \
        libglib2.0-0 \

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

sudo yum install mesa-libGL -y

对我来说,这个问题与代理设置有关。对于pypi,我使用nexus镜像到pypi,对于opencv什么都不工作。直到我连接到另一个网络。


我在docker容器中使用cv2时遇到了这个问题。我通过:

pip install opencv-contrib-python

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


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


在rocky linux 9中,我使用命令解决了这个错误 安装mesa-libGLU


如果使用docker或服务器环境,请使用opencv-python-headless。


我在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中强制使用它。在~/中添加以下内容。然后运行source ~/。Bashrc或重新启动shell:

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

我知道LD_LIBRARY_PATH不好,但对我来说,这是唯一可行的解决方案。