ROSを入れた後にpythonで
import cv2
とすると
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
とすることでOpenCVを読み込ませることができる。
原因調査
これはROSをインストールした際に .bashrcに書いた
source /opt/ros/kinetic/setup.bash
が問題を引き起こす原因となっている。
この行をコメントアウトすることで一時的に解決できるが、ROSを使う度にコメントアウトを外すのは非常に面倒である。
そのため、bashrcをいじる以外の方法を探した。
まず追加されたパスの確認のためにpythonで
import sys
print(sys.path)
を実行すると
['', '/home/nvidia/catkin_ws/devel/lib/python2.7/dist-packages', '/opt/ros/kinetic/lib/python2.7/dist-packages', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-aarch64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages', '/usr/local/lib/python3.5/dist-packages/IPython/extensions', '/home/nvidia/.ipython', '../']
のように追加されているパスが出力される。
よく見ると、その中に
'/opt/ros/kinetic/lib/python2.7/dist-packages'
が含まれていることが分かる
こいつが邪魔をしてOpenCVをimportできなくしているので、消してやれば良い
具体的には
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
でpythonのプログラム中に追加してやれば良い。