导入错误:libSM.so.6:无法打开共享对象文件:没有那个文件或目录

149

尝试导入OpenCV时,使用import cv2会出现以下错误:

/usr/local/lib/python2.7/dist-packages/cv2/__init__.py in <module>()
      7 
      8 # make IDE's (PyCharm) autocompletion happy
----> 9 from .cv2 import *
     10 
     11 # wildcard import above does not import "private" variables like __version__

ImportError: libSM.so.6: cannot open shared object file: No such file or directory

不确定如何修复此问题 - 尝试使用Google新的Colaboratory工具。笔记本在这里:https://drive.google.com/file/d/0B7-sJqBiyjCcRmFkMzl6cy1iN0k/view?usp=sharing

9个回答

182

将这两行代码作为脚本的前两行,可以解决此问题:

!pip install opencv-python
!apt update && apt install -y libsm6 libxext6
!apt-get install -y libxrender-dev

1
你能详细说明一下吗?是哪个脚本?cv2/init.py吗? - The Gr8 Adakron
27
sudo apt-get install libsm6 - Alexander Lubyagin
67
分享一下,希望能帮到大家;我也不得不运行sudo apt-get install -y libxrender-dev来解决libXrender错误(随后是libsm6)。 - Akash Goyal

72

您需要添加 sudo。我执行了以下操作以安装它:

sudo apt-get install libsm6 libxrender1 libfontconfig1

然后这样做(可选!也许您不需要它)

sudo python3 -m pip install opencv-contrib-python

终于完成了!


14
对我而言,只需使用apt-get install libsm6 libxrender1 libfontconfig1即可解决问题。 - Jiloc
如果您已经是特权用户(例如在Docker容器中),则不需要使用sudo,否则需要使用。 - Steven C. Howell
有时候32位应用程序可能需要它。在这种情况下,请执行“sudo apt install libsm6:i386”。 - Chan Kim

66
对于CentOS系统,请执行以下命令安装依赖库:sudo yum install libXext libSM libXrender

当我使用Anaconda R安装程序在命令行上运行R时,这导致了一个段错误。 - blahblahetcetc
在我的情况下,64位版本已经安装好了,所以我需要使用以下命令: sudo yum install libSM.i686 - Cigogne Eveillée

48

现在有一个无头版本的opencv-python,它删除了图形依赖项(如libSM)。您可以在发布页面上查看普通/无头版本(以及导致此问题的GitHub问题); 只需在安装时添加-headless即可,例如:

pip install opencv-python-headless
# also contrib, if needed
pip install opencv-contrib-python-headless

1
我之前遇到了一个错误:ImportError: libSM.so.6: cannot open shared object file: No such file or directory,但是一旦加上headless选项,这个错误就消失了。 - Vadim
如果有人正在寻找在Google App Engine灵活环境中运行OpenCV的解决方案,那么这就是答案。 - Oğulcan Çelik

21

也许问题出在你的python-opencv版本上。建议将版本降级至3.3.0.9,该版本不包含任何GUI依赖项。同样的问题在GitHub上找到了解决方案,这是答案的链接。


2
pip安装'opencv-contrib-python==3.3.0.9'(卸载当前版本: pip uninstall opencv-contrib-python) - https://github.com/skvark/opencv-python/issues/44 - Alex Punnen

10

我在 docker 中遇到了同样的问题,并且 这些步骤对我有用:

apt update

那么:

apt install libsm6 libxext6 libxrender-dev

2

我在 python:3.7-slim docker 容器上遇到了与 openCV 相似的问题。以下方法对我有用:

最初的回答:

apt-get install build-essential libglib2.0-0 libsm6 libxext6 libxrender-dev

请看这是否有帮助!最初的回答:

@SaurabhGupta 谢谢,你说得对。我已经更正了。 - Utopia

0

我在使用Heroku时遇到了同样的错误,请按照以下步骤操作:

在您的代码库中添加一个名为Aptfile的文件,并在该文件中包含要安装的apt软件包名称列表

例如,在我的情况下,可以这样做:

libsm6
libxrender1
libfontconfig1
libice6

现在尝试将代码推送到Heroku。这将完成工作。

或者您仍然可以参考这个博客


2
你能否尝试将Aptfile的内容与问题案例一起包含,而不是你的案例? - 12944qwerty
我遇到了相同的错误,造成这个错误的原因是OpenCV包中没有包含以下的包。所以这些包需要被显式地安装。我猜想相同的内容也可以解决这个问题。 - Puneeth Regonda
如果要在新服务器上部署后每次显式安装软件包,最好的方法是添加Aptfile并将其内容放入其中,而不是使用cli和apt-get install。 - Puneeth Regonda

0
我无法在运行于Google Cloud平台上的Ubuntu Anaconda-Jupyter笔记本上安装cv2。但我找到了一种解决方法,如下所示:
从ssh终端运行以下命令并按照说明操作:
 sudo apt-get install libsm6 libxrender1 libfontconfig1

安装完成后,打开Jupyter笔记本并运行以下命令:

!pip install opencv-contrib-python

注意:我尝试运行以下命令:"sudo python3 -m pip install opencv-contrib-python",但遇到了错误。不过,这个命令之前对我起过作用。
现在,请刷新笔记本页面并在 notebook 中运行 import cv2 检查其是否已经安装。

我还需要添加 apt install libxext6 - Ben Hall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接