我正在尝试运行 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 并在那里测试它。你能分享你的代码片段在哪里抛出异常吗?
将以下行添加到您的 Dockerfile:
RUN apt-get update
RUN apt-get install ffmpeg libsm6 libxext6 -y
这些命令安装通常存在于本地计算机上的 cv2 依赖项,但可能会在您的 Docker 容器中丢失,从而导致问题。
即使上述解决方案有效。但是它们的包装尺寸很大。 libGL.so.1
由包 libgl1
提供。所以下面的代码就足够了。
apt-get update && apt-get install libgl1
在我看来,这是一个更好的解决方案。包 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
成功了。谢谢
尝试安装 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
对我来说,唯一有效的 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
如果您在使用 yum
的 CentOS、RHEL、Fedora 或其他 Linux 发行版上,您将需要:
sudo yum install mesa-libGL -y
把它放在 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
......
在我的情况下,执行以下操作就足够了,与 above solutions 相比也节省了空间
RUN apt-get update && apt-get install -y --no-install-recommends \
libgl1 \
libglib2.0-0 \
当我尝试在 GCP Appengine Flex 服务器环境中使用 OpenCV 时,我遇到了同样的错误。在 requirements.txt 中用“opencv-python-headless”替换“opencv-python”解决了这个问题。
OpenCV documentation 讨论了桌面与服务器(无头)环境的不同软件包。
我在 docker 容器中使用 cv2 时遇到了这个问题。我通过以下方式修复了它:
pip install opencv-contrib-python
安装 opencv-contrib-python 而不是 opencv-python。
在缺少各种图形库的非 gui 服务器上使用 pip3 install opencv 后,在 centos 8 上遇到了同样的问题。
dnf install opencv
引入所有需要的依赖项。
对于树莓派,请输入这个,为我工作:
sudo apt-get install ffmpeg libsm6 libxext6 -y
对我来说,问题与代理设置有关。对于 pypi,我使用 pypi 的 nexus 镜像,对于 opencv 没有任何效果。直到我连接到不同的网络。
这是您需要的解决方案:
pip install -U opencv-python
apt-get upgrade
apt update && apt install -y libsm6 libxext6 ffmpeg libfontconfig1 libxrender1 libgl1-mesa-glx
apt-get upgrade
更新所有已安装的软件包,这完全是矫枉过正
不定期副业成功案例分享
sudo apt-get update --allow-releaseinfo-change