Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
25
Help us understand the problem. What is going on with this article?
@ReoNagai

pythonでROSとの競合を避けてOpenCVをimportする

More than 1 year has passed since last update.

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のプログラム中に追加してやれば良い。

25
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ReoNagai

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
25
Help us understand the problem. What is going on with this article?