Python3.6导入cv2报错的解决办法

2023-05-16

1、问题现象,在python3.5环境中导入cv2报错,在python2.7中正常,报错如下:

python
Python 3.6.4 (default, Dec 16 2019, 11:03:42) 
[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

2、解决办法
(1)读取环境变量$PYTHONPATH

bruce@bruce-desktop:~$ echo $PYTHONPATH 
/opt/ros/kinetic/lib/python2.7/dist-packages

(2)在pathon控制台中查看

bruce@bruce-desktop:~$ python 
Python 3.6.4 (default, Dec 16 2019, 11:03:42) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/opt/ros/kinetic/lib/python2.7/dist-packages', '/usr/local/lib/python36.zip', '/usr/local/lib/python3.6', '/usr/local/lib/python3.6/lib-dynload', '/home/bruce/.local/lib/python3.6/site-packages', '/home/bruce/.local/lib/python3.6/site-packages/mask_rcnn-2.1-py3.6.egg', '/usr/local/lib/python3.6/site-packages']

可以发现,两种方式出现了路径 /opt/ros/kinetic/lib/python2.7/dist-packages ,且其优先级比路径 /usr/local/lib/python3.6/site-packages 高。

我们希望程序优先读取python3.6的库路径,对应有两种方式!

法一:
修改环境变量$PYTHONPATH

仅在当前终端有效的办法:

export PYTHONPATH=/usr/local/lib/python3.6/site-packages

在当前用户下有效的办法:

export PYTHONPATH=/usr/local/lib/python3.6/site-packages:$PYTHONPATH 

或者直接打开.bashrc问文件,在末尾添加如下:

export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.6/site-packages

修改当前用户的环境变量
当使用命令激活ROS时,即运行 source /opt/ros/kinetic/setup.bash ,ROS会添加 /opt/ros/kinetic/lib/python2.7/dist-packages 到python路径。因此,需要在 .bashrc 文件中注释掉该命令行,即source /opt/ros/kinetic/setup.bash注释掉,并再次source读取环境变量。

法二:
在python控制台中移除错误路径

bruce@bruce-desktop:~$ python 
Python 3.6.4 (default, Dec 16 2019, 11:03:42) 
[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
>>> import sys
>>> sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
>>> import cv2

参考博客:
https://www.cnblogs.com/gdut-gordon/p/9480652.html
https://blog.csdn.net/jasonzzj/article/details/53941147

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3.6导入cv2报错的解决办法 的相关文章

随机推荐