症状
公式チュートリアルに沿ってROSをインストール後にcatkin_make
するとpython絡みで怒られる。
$ cd catkin_ws
$ catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3
...
-- Found PythonInterp: /usr/bin/python3 (found version "3.6.9")
ImportError: "from catkin_pkg.package import parse_package" failed: No module named 'catkin_pkg'
Make sure that you have installed "catkin_pkg", it is up to date and on the PYTHONPATH.
...
原因
ROS「/usr/bin/python3
見に行ってるけどcatkin_pkg
が無いやで」
とのことなので、とりあえず/usr/bin/python3
を見に行く。
$ ls /usr/bin/ -l | grep python3
lrwxrwxrwx 1 root root 9 1月 31 05:02 python3 -> python3.6
どうもrosはシステムのpython3系を見に行っているけど、そのpython3.6にcatkin_pkgが入っていないのでエラー吐いてる。
対応
システムが使ってるpython3.6にros用のライブラリを入れるのが嫌なのでpyenvでros用のpythonを作ってあげることにする。
- pyenvでros用の環境作成・不足したライブラリを導入
$ pyenv install 3.7.6
Installed Python-3.7.6 to /home/xxx/.pyenv/versions/3.7.6
$ pyenv global 3.7.6
$ pip install catkin_pkg
- python3.7.6でcatkin_make
$ cd ~/catkin_ws
$ catkin_make -DPYTHON_EXECUTABLE=~/.pyenv/versions/3.7.6/bin/python3.7
- 今後手軽に
cm
と打つだけでros用のpython環境でbuildできるようにしておく
$ echo "alias cm='cd ~/catkin_ws && catkin_make -DPYTHON_EXECUTABLE=~/.pyenv/versions/3.7.6/bin/python3.7'" >> ~/.bashrc