ROSとの競合を避けながらUbuntuでOpenCV環境を再構築
anacondaでいろいろ設定した後にrosを入れるとpythonの環境が複数存在することになって非常に面倒なことになったというお話です.
SSD移行前と手順が違うので以下の過去記事とは完全に別物だと思ってください.
ossyaritoori.hatenablog.com
環境
Ubuntu16.04
Python 3.5.2(Anaconda使用)
Anaconda を用いたOpenCVのインストール
適当に
conda install -c https://conda.binstar.org/menpo opencv3
としてOKです.
Windows Anaconda Python 3.5 への OpenCV 3.1 のインストール - にせねこメモ
私はこの後rosを入れたためトラブルに見舞われました.
エラー状況
インストールの確認のため,
import cv2
とした際に,「ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type」と出る.
以下のようにrosをいれたことによってpythonのパッケージ参照の優先度が変わったためのようです.
stackoverflow.com
1.Pythonの環境を調べる
import sys sys.print
これでPathが出てきます.すると出るわ出るわ.
このようにrosのdist-packageが優先になっています.
'', '/opt/ros/kinetic/lib/python2.7/dist-packages', '/home/userx/anaconda3/lib/python35.zip', '/home/userx/anaconda3/lib/python3.5', '/home/userx/anaconda3/lib/python3.5/plat-linux', '/home/userx/anaconda3/lib/python3.5/lib-dynload', '/home/userx/anaconda3/lib/python3.5/site-packages', '/home/userx/anaconda3/lib/python3.5/site-packages/Sphinx-1.4.6-py3.5.egg', '/home/userx/anaconda3/lib/python3.5/site-packages/setuptools-27.2.0-py3.5.egg'
なお,user名はuserxでぼかしています.ご了承を.
これがどういう手順で入っているかは以下の長い解説をご確認を.
Python の module search path ついて調べてみる - Lostman
Where is Python's sys.path initialized from? - Stack Overflow
PYTHONPATHを変更する
このように一時的に回避することは可能ですが,Python環境を立てなおした場合にはこの操作は無効になってしまいます.
PYTHONPATH(環境変数みたいなもの)を変更することでこの問題を回避することが可能ですが,これまた再起動すると変更が取り消されてしまいます.
export PYTHONPATH=/home/userx/anaconda3/lib/python3.5/site-packages:$PYTHONPATH
PYTHONPATHを永久的にいじれるようにする
「各自使用するshellを確認するように」という前書きがつきますが,私のように気にしたことのない人のほうが多いでしょう.
以下のような文を~/.bashrcに追加しましょう.(user名の置換を忘れずに)
export PYTHONPATH="/home/userx/anaconda3/lib/python3.5/site-packages:$PYTHONPATH"
他の記述の影響を受けないように最後行に書くのが良いと思います.
その後この反映をすぐに実行するには
source ~/.bashrc
として実行してください.