largando

Import Error: No module named 'catkin_pkg' 해결하기 본문

/Error 해결

Import Error: No module named 'catkin_pkg' 해결하기

ensoojn 2019. 10. 7. 10:02

    안녕하세요. 오늘은 Ros를 사용하면서 격은 오류 중 no module named를 해결하는 방법에 대하여 포스팅하겠습니다. 아직 Ros는 파이썬 3버전을 지원하지 않는다고 알고 있는데요. 때문에 저는 Python2.7을 사용하고 있습니다.  뜬금없이 왜 파이썬 버전 이야기를 하고 있냐? 눈치채셨듯이 어제까지 문제없이 작동하던 프로그램이 갑자기 Import Error: No module named 'catkin_pkg'라는 오류 메시지를 띄우게 만든 원인이 파이썬과 관련이 있어서입니다. 어제까지 잘 되던 프로그램에서 이 같은 오류가 발생한다면 아마도 저와 같은 이유가 아닐까 하는 생각에 글을 포스팅하게 되었습니다.

 

    첫번째로  Import Error: No module named 'your_module_name' 의 에러가 나는 이유는 그 모듈이 없어서겠죠. 이 경우 그냥 install을 해주면 됩니다.

pip install catkin_pkg(write your module name instead of 'catkin_pkg')   

    만약 Anaconda를 사용 중이시라면 아래 명령어를 사용하시면 됩니다.

conda install -c auto catkin_pkg

    하지만 이렇게 간단하게 해결될 문제라면 문제라고 부르지도 않겠죠. 안타깝게도 저는 이미 모듈이 설치된 상태였습니다(그러니 어제까지는 잘 작동했겠죠;). 그럼 다음에 시도해야 되는건? 설치된 모듈의 위치를 찾아 soft link를 만들어 주는 것입니다. 저는 catkin_pkg를 설치할 때 이미 설치되어 있다고 나온 path를 확인하였습니다(path를 확인하는 방법은 여러 가지 이지만 Ubuntu에서는 whereis로 찾으면 나오지 않는 경우가 있으니 맘 편히 install 하면 나오는 path를 쓰시길 추천합니다). 위치를 확인했으면 모듈을 사용할 때 사용할 이름을 정해서 모듈의 path와 soft link를 만들어 주시면 됩니다.

ln -s /home/user_name/anaconda3/lib/python2.7/site-packages/catkin_pkg(module path) catkin_pkg(name)

    저는 이 방법으로도 오류를 해결하지 못했습니다. 그래서 선택한 방법은 그냥 이 모듈을 사용하는 패키지 아래로 모듈을 옮겼습니다. 하지만 이 방법을 사용하면 다른 프로그램에서 이 모듈을 사용할 때 문제가 생길 수 있으니 이 방법은 추천하지 않습니다. 제가 사용하는 catkin_pkg의 경우 Ros에서만 사용하기 때문에 모듈을 옮겨도 문제가 생기지 않습니다. 

mv /home/user_name/anaconda3/lib/python2.7/site-packages/catkin_pkg(original path) /opt/ros/kinetic/lib/python2.7/dist-packages/(new path)

    저는 마지막 방법으로 문제를 해결했습니다. 그럼 이제 이 문제가 왜 생겼냐? (어제까지만 해도 잘 작동했는데 ...) 바로 어제 제가 Keras를 설치하면서Python 모듈의 경로가 재설정 되어서입니다. 두둥! 제가 사용하는 Ros 패키지에서는 Keras를 사용하지 않아요. 그냥 Keras 한번 공부해 볼까? 라는 마음으로 어제저녁에 설치했더랬죠.. 그래서 Ros 패키지에 문제가 생길 거라는 생각을 못했는데(저는 Ros 패키지에서 코딩할 때 C++을 씁니다.) 이런 유혈사태가 발생했습니다. 혹시 자신이 프로그램을 건들지 않았는데 어제까지 작동하던 프로그램이 작동하지 않는다면 의존성 라이브러리나 프로그램과 관련된 작업을 하지 않았나 체크해 보시길 추천합니다!