安装后,无法导入OpenCV

2024-09-27 19:30:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我首先使用这个script从源代码安装了openCV。 当我测试时,它运行良好

在我安装了ROS kinetic,打开python3并运行import cv2之后,出现以下错误:

Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type

Tags: importdefault源代码onlinuxtype错误script
3条回答

看起来这个问题是由ROS向python路径添加/opt/ros/kinetic/lib/python2.7/dist-packages引起的。当您使用命令source /opt/ros/kinetic/setup.bash激活ROS时,实际上会发生这种情况。这一行通常添加在bashrc文件的末尾/home/username/.bashrc

解决方法是从bashrc文件中删除这一行。这样就可以正确使用python3opencv包,并且您仍然可以运行source /opt/ros/kinetic/setup.bash来使用ROS。但是,这意味着您不能在同一环境中使用ROS和python3

希望有人能想出一个更好的答案,但在那之前这应该是可行的

如果您正在使用anaconda,请激活您想要使用的环境,并从sys.path中移除罪犯

为此,请打开python3控制台,其中:

>>> import sys
>>> print(sys.path)

您将看到几个路径,其中您应该注意:

'/opt/ros/kinetic/lib/python2.7/dist-packages'

然后将其移除:

>>> sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')

使用本地编译的opencv在anaconda3上使用python3.5进行测试。这可能也适用于virtualenvs

对于永久解决方案,请删除@Paul的答案中提到的'/opt/ros/kinetic/lib/python2.7/dist-packages'路径

如前所述,.bashrc中的source /opt/ros/kinetic/setup.bash命令将PYTHONPATH修改为:

> echo $PYTHONPATH
/opt/ros/kinetic/lib/python2.7/dist-packages

在我的例子中,因为我在Python3项目中使用virtualenv,所以在激活virtualenv时,我只运行以下命令来清除PYTHONPATH变量

unset PYTHONPATH

现在,在python3virtualenv中导入cv2可以干净地工作。我验证了cv2的路径:

In [1]: import cv2
In [2]: cv2.__file__
Out[2]: '<path_to_virtualenv>/lib/python3.5/site-packages/cv2/cv2.cpython-35m-x86_64-linux-gnu.so'

为了避免每次激活该virtualenv时都必须运行此命令,我将其添加到virtualenv目录中的/bin/activate文件中,如下所示:

...
# unset irrelevant variables
deactivate nondestructive

unset PYTHONPATH

VIRTUAL_ENV="/home/kaiyuzh/pyenv/py3"
export VIRTUAL_ENV
...

相关问题 更多 >

    热门问题