我试图运行cv2,但当我试图导入它时,我得到以下错误:
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
建议的在线解决方案是安装
apt install libgl1-mesa-glx
但这是已经安装的最新版本。
注:我实际上是在Docker上运行这个,我无法检查OpenCV版本。我尝试导入matplotlib,导入正常。
我试图运行cv2,但当我试图导入它时,我得到以下错误:
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
建议的在线解决方案是安装
apt install libgl1-mesa-glx
但这是已经安装的最新版本。
注:我实际上是在Docker上运行这个,我无法检查OpenCV版本。我尝试导入matplotlib,导入正常。
当前回答
我在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不好,但对我来说,这是唯一可行的解决方案。
其他回答
即使上面的解决方案是有效的。但是它们的包装尺寸相当大。 libGL.so。1由包libgl1提供。所以下面的代码就足够了。
apt-get update && apt-get install libgl1
在Dockerfile中添加以下代码行:
RUN apt-get update && apt-get install ffmpeg libsm6 libxext6 -y
这些命令安装了cv2依赖项,这些依赖项通常存在于本地机器上,但可能在Docker容器中缺失而导致问题。
[2022年1月20日的小更新:Docker建议,永远不要单独放置RUN apt-get更新,导致缓存问题]
如果你使用CentOS、RHEL、Fedora或其他使用yum的linux发行版,你将需要:
sudo yum install mesa-libGL -y
在我看来,这是一个更好的解决方案。python3-opencv包包含OpenCV的所有系统依赖项。
RUN apt-get update && apt-get install -y python3-opencv
RUN pip install opencv-python
对我来说,唯一有效的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