본문 바로가기

dev/Ros

[ROS] ImportError: cannot import name 'AddTwoInts' from 'my_package.srv' (unknown location) 완벽한 해결 방법

반응형
여러분들 저와같은 초보자 분들 혹은 특별한 가이드 없이 ROS를 공부하시는 분들은 백프로 이런 일 일어날 거라고 생각하고, 제가 열심히 붙잡고 직접 해결한 솔루션을 이 글에서 보여드리겠습니다.

해결책을 찾으면서 srv , CMakeList.txt , package.xml , build log 에 대해서 공부하게 됐습니다.

 


 

에러 메세지:

Traceback (most recent call last): File "/home/wntdev/catkin_ws/src/my_package/src/add_two_ints_client.py", line 4, in <module> from my_package.srv import AddTwoInts ImportError: cannot import name 'AddTwoInts' from 'my_package.srv' (unknown location)

 

Traceback (most recent call last): File "/home/wntdev/catkin_ws/src/my_package/src/add_two_ints_server.py", line 4, in <module> from my_package.srv import AddTwoInts ModuleNotFoundError: No module named 'my_package'

 

위 에러 메세지 중 하나라도 나오셨다면 이 글이 매우 유익하실 수 있어요.


 

제가 해결하려고 노력한 과정들을 쭉 보고 오시는 것도 전체적인 이해를 돕는데 도움이 되실 겁니다.

 

[dev/Ros] - [ROS] ModuleNotFoundError: No module named 'my_package' 또는 'srv folder name' 해결 과정

 

[ROS] ModuleNotFoundError: No module named 'my_package' 또는 'srv folder name' 해결 과정

$ rosrun my_package add_two_ints_server.py Traceback (most recent call last): File "/home/wntdev/catkin_ws/src/my_package/src/add_two_ints_server.py", line 4, in from my_package.srv import AddTwoInts ModuleNotFoundError: No module named 'my_package' 실제

perfect-dev.tistory.com

[dev/Ros] - [ROS] 패키지 생성 시 만들어지는 CMakeList.txt 파일 의미

 

[ROS] 패키지 생성 시 만들어지는 CMakeList.txt 파일 의미

CMakeLists.txt 파일은 CMake 빌드 시스템의 설정 파일로, ROS 패키지를 빌드하는 데 필요한 지침을 포함합니다. 이 파일은 패키지의 빌드 및 설치 프로세스를 정의하고, 필요한 의존성을 선언하며, 빌

perfect-dev.tistory.com

[dev/Ros] - [ROS] ModuleNotFoundError: No module named 'my_package' 해결 과정 (2)

 

[ROS] ModuleNotFoundError: No module named 'my_package' 해결 과정 (2)

Base path: /home/wntdev/catkin_ws Source space: /home/wntdev/catkin_ws/src Build space: /home/wntdev/catkin_ws/build Devel space: /home/wntdev/catkin_ws/devel Install space: /home/wntdev/catkin_ws/install #### #### Running command: "cmake /home/wntdev/catk

perfect-dev.tistory.com


해결책 :

 

먼저, 아래 명령어를 입력하여 편집기로 들어가줍니다.

$ vim ~/.bashrc

 

 

그런 다음 다른 코드에 영향을 주지 않는 공간에서 아래 텍스트를 복붙해주세요.

export PYTHONPATH=/home/{user_name}/catkin_ws/devel/lib/{python_version}/dist-packages/{package_name}/:$PYTHONPATH

# Example: export PYTHONPATH=/home/wntdev/catkin_ws/devel/lib/python3/dist-packages/my_package/:$PYTHONPATH

 

 

bashrc 를 저장한 후에 아래 명령어를 입력하세요.

$ source ~/.bashrc

 

이후 다시 rosrun 해보시길 바랍니다. 아마 잘 동작하실 겁니다~!

 


이유 :

먼저, srv를 사용하려면 CMakeList.txt 및 package.xml 을 수정해주어야 합니다. 파일 안에 직접 설명도 되어 있으니 그 설명대로 쭉 따라서 수정해줍니다. 혹시나 참고하실거면 제 Github 주소 남겨놓겠습니다. https://github.com/wntdev99/RosTutorial

 

이후 catkin_make 명령어를 통해 빌드를 할 때 srv 파일을 사용해서 python 코드를 생성중이라는 메세지를 볼 수 있습니다. 말 그대로 srv 파일을 사용해서 srv 에 걸맞는 python 코드를 자동으로 생성하는 겁니다. 

 

그런데 이 생성된 코드는 어디로 가냐구요 ?? 바로 위에 저 경로로 간답니다. 

 

저는 현재 작업 디렉토리에 있는 코드를 참고하라고 수도없이 반복하고 있었던 겁니다.

 

export PYTHONPATH=/home/wntdev/catkin_ws/src/my_package/:$PYTHONPATH

 

이런 식으로 말이에요.

 

당연히 생성되는 것은 이 경로가 아니기 때문에 모듈이 없다는 얘기가 나오는 겁니다. 생성된 코드가 없기 때문이죠....하하

 


이상 ROS 시작한 지 하루된 사람이었습니다...하하

 


 

반응형