在配置基于python3的Kinetic时,我们往往会把ros自带的cv2做一个重命名:
/opt/ros/kinetic/lib/python2.7/dist-packages$ sudo mv cv2.so cv2_ros.so
然而这样做的坏处时,当我们又想使用python2下的包时,发现cv2不能导入了。
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named cv2
为了解决这个问题,首先来看一下当前python环境下有哪些变量存在:
>>> import sys
>>> sys.path
['', '/opt/ros/kinetic/lib/python2.7/dist-packages', '/home/yourname/python3-env/lib/python35.zip', '/home/yourname/python3-env/lib/python3.5', '/home/yourname/python3-env/lib/python3.5/plat-x86_64-linux-gnu', '/home/yourname/python3-env/lib/python3.5/lib-dynload', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/home/yourname/python3-env/lib/python3.5/site-packages', '/home/yourname/python3-env/lib/python3.5/site-packages/pycocotools-2.0-py3.5-linux-x86_64.egg', '/home/yourname/python3-env/lib/python3.5/site-packages']
可以看到,ros自带的python2.7出现在了环境变量里,猜想也许是某些ros的功能需要这个目录。
因此,为了实现包含这个目录的同时又不使用它下面的cv2,可以把这条变量加到最后面去:
import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
sys.path.append('/opt/ros/kinetic/lib/python2.7/dist-packages')
import cv2
这样基本可以实现不破坏原来python2的环境下使用python3。
网友评论