민서네집

PyCharm Professional 버전에서 Docker로 Remote Debugging 본문

Python

PyCharm Professional 버전에서 Docker로 Remote Debugging

브라이언7 2016. 9. 14. 14:27

PyCharm Professional 버젼에서 Docker Toolbox로 Remote Debugging 하는 방법


Windows에서 Tensorflow가 직접 설치되지 않기 때문에 Docker를 이용하여 설치를 많이 하시는데요.


PyCharm Professional 버전에서 Windows Docker Toolbox로 Remote Debugging하는 방법을 정리해 봤습니다.


( PyCharm 홈페이지에서 Professional 버젼을 다운로드 받아서 1달간 무료로 사용해 보실 수 있습니다. )

https://www.jetbrains.com/pycharm/download/



< 주의할 점 >

* Remote Debugging 기능은 PyCharm Professional 버젼에서만 됩니다. EDU 버젼이나 Community 버젼에서는 안됩니다.

(PyDev 플러그인의 기능을 이용해서 Remote Debugging을 할 수도 있을 것 같은데, Project Interpreter 설정에서 Add Remote 메뉴가 없어서 설정이 안됩니다.)


* Docker Toolbox 에서만 PyCharm 디버깅이 됩니다. Docker for Windows 에서는 안됩니다.


* Docker Remote Debugging을 설정하거나 실행할 때는 Docker Toolbox를 실행한 상태여야 합니다.


* Remote Debugging 하려는 Docker 안과 Host PC 쪽에 동일한 파이썬 소스가 있어야 합니다.


* Docker에서 Project Interpreter 설정 시 Add Remote 메뉴에서 Docker를 선택할 때 Docker Container를 선택하는 것이 아니라 Docker Image를 선택하게 됩니다.

☞ 그래서 Docker Container 안에서 아무리 Python Package를 설치해봐야 Remote 디버깅 시 적용이 안됩니다. Python Package를 설치한 다음에 commit 해서 Docker 이미지를 만들어주고, 그 이미지로 설정을 바꿔줘야 합니다.


☞ 위와 같은 이유 때문에 소스를 수정해 가면서 Docker Remote 디버깅을 하기 위해서는 Docker의 공유폴더 기능을 이용하는 것이 훨씬 편합니다. 



< 설정법 >

Settings 메뉴에서 Project Interpreter 설정

☞ Add Remote 해서 Docker 선택 후 원하는 Docker Image 선택.


Run/Debug Configurations 창에서 Defaults 에서 Python 을 선택해서 Docker container settings 와 Path mappings 설정을 해줍니다. 이 값이 잘못되면 Remote Debugging이 실행되지 않습니다.


Run/Debug Configurations 창 > Defaults > Python Remote Debug 는 설정하지 않습니다. 아마도 이 방법으로 제대로 설정하면 PyCharm Community 버젼에서도 Remote Debugging을 할 수 있을지도 모릅니다.


Windows 10 에서 Docker Toolbox를 설치한 후에 Docker Quickstart Terminal을 실행하고, 거기서 아래 명령을 실행해서 TensorFlow가 설치된 Docker를 Download 하고 실행시킵니다.


$ docker run -it --name tf -p 8888:8888 -p 6006:6006 -v /c/Users/{Windows사용자 계정명}/shared:/root/shared gcr.io/tensorflow/tensorflow:latest-devel


-v 옵션은 Docker와 Host PC와 공유폴더를 설정하는 기능인데, C드라이브 밑의 Users 디렉터리는 Docker 에서 default로 공유설정이 되어 있어서 별 다른 설정이 없이 -v 옵션만 사용하면 공유가 가능하지만, 다른 드라이브나 다른 디렉터리를 공유하려면 약간의 설정이 더 필요합니다. 자세한 설명은 http://bryan7.tistory.com/797  를 참조하세요.


Docker 안에 설치되어 있는 TensorFlow를 이용해서 Python 소스를 Remote Debugging 해보겠습니다.


PyCharm Professional 버젼을 실행합니다. (EDU 버젼이나 Community 버젼은 Docker로 Remote Debugging이 되지 않습니다.)

Create New Project 를 선택합니다.



Location 옆에 ... 버튼을 눌러서 새로운 프로젝트를 만들 디렉터리를 정해 줍니다.




아래 그림처럼 Interpreter 에서 Add Remote를 선택합니다.


Configure Remote Python Interpreter 대화상자에서 Docker를 선택합니다.



Docker Quickstart Terminal를 실행해서 Oracle VirtualBox의 default VM이 실행 중임을 확인합니다.



Configure Remote Python Interpreter 대화상자에서 Server 옆의 New 버튼을 누르면 아래 창이 뜹니다.

Docker 창에서 제가 따로 잡아준 설정은 없고, 자동으로 설정을 불러옵니다. 

VirtualBox shared folders 항목에서 Virtual machine path와 Local path 역시 Docker에 기본으로 공유 설정된 값인데, 다른 드라이브나 다른 디렉터리를 공유 설정하기 위해서는 VirtualBox에서 공유 폴더 설정을 해줘야 하고, 여기에도 추가해 줘야 합니다. 지금은 프로젝트 디렉터리를 C:\Users\{사용자 계정}\shared 로 잡았기 때문에 C:\Users 폴더 이하라서 이 창에서 따로 추가해 줄 필요가 없습니다.



OK 버튼을 누르면 아래와 같이 보입니다.

Remote Debugging할 Image를 선택합니다. Docker 컨테이너로 연결하는 것이 아니라 Docker Image로 연결하는 것입니다.

만약 Python Package를 설치했다면 $ docker commit tf tf_image:0.1  이런 식으로 commit 해서 Docker 이미지를 새로 만들어서 PyCharm의 Remote Python Interpreter 설정에서 새로 만든 이미지로 연결해 주어야 합니다.



OK 버튼을 누르자 No Python interpreter selected 라는 경고 문구가 사라졌습니다.



우하단의 Create 버튼을 누르면 아래 화면이 보이고, 프로젝트에서 New 로 Python File을 추가하겠습니다.




파일 이름 역시 프로젝트 이름과 동일하게 hello-tensorflow 라고 이름 지었습니다.



별 다른 설정 없이 바로 Debug를 해 보겠습니다.



역시 에러가 나는군요. 아직 Remote Debugging할 Docker Image를 선택해준 것 밖에 없는데, 그냥 리모트 디버깅이 성공하면 그것도 이상하겠죠.



우상단의 Edit Configurations... 메뉴를 누릅니다.



Run/Debug Configurations 대화상자에서 Docker container settings 와 Path mappings 설정이 중요합니다.


Docker container settings 는 docker run 시킬 때 줬던 -v 공유폴더 옵션 설정과 동일하게 해 주면 됩니다.


이렇게 제멋대로 설정되어 있는데, Volume bindings 에서 설정된 값을 선택한 후 편집 버튼을 누릅니다.



docker run 시킬 때 줬던 -v 옵션의 값을 그대로 써 줍니다.

Host path: /c/Users/{Windows사용자 계정명}/shared

Container path: /root/shared



OK 버튼을 누르면 아래와 같이 보입니다.



Docker container settings 항목을 보면 Docker run 시킬 때 -v 옵션으로 준 부분이 그대로 보이는 것을 확인할 수 있습니다.

이제 Path mappings 항목을 설정해야 합니다. 

Remote Debugging을 하기 위해서는 Host PC와 Docker Container에서 동일한 소스 파일이 있어야 하는데, 그 소스 파일의 위치를 mapping 해주는 것입니다.



Edit Path Mappings 편집창에서

Host PC(Windows)에서 소스 파일이 있는 폴더의 위치와 Docker 안에 있는 소스 파일이 있는 폴더 위치가 서로 매핑될 수 있도록 Local path와 Remote path 의 위치를 적어줍니다.



제대로 설정된 모습은 아래와 같습니다.

Path mappings 와 Docker container settings 설정이 아래와 같이 제대로 되어 있어야지 Remote Debugging 이 됩니다.



Debug 버튼을 눌러서 일단 실행해 봤습니다. 

Console 창에 "Hello, TensorFlow!" 라고 출력되었습니다.



이번에는 브레이크 포인트를 9번째 라인에 걸어봤습니다.



아래는 Debug를 실행해서 브레이크 포인트에 걸린 모습입니다.



Evaluate Expression 버튼을 눌러서 

hello = tf.constant('Bye~')

를 실행했습니다. 소스 상에서는 hello = tf.constant('Hello, TensorFlow') 라고 되어 있었는데, 디버그 하면서 내용을 바꾼 것입니다.



이제 Resume Program (F9) 버튼을 누르거나 Step Over (F8) 버튼을 눌러서 계속 실행시켰더니 프로그램이 종료되었고, 

Console 창에는 'Bye~'라고 출력되었습니다.

Remote Debugging 이 제대로 된 것을 확인할 수 있었습니다.




Docker Quickstart Terminal을 실행시켜서 remote debugging 했던 Docker image를 실행시켜보면 

$ docker start -ia tf

/root/shared 폴더가 녹색 바탕으로 보이면서 Host PC와 제대로 폴더 공유가 된 것을 확인할 수 있습니다.



PyCharm에서 Remote Debugging할 때 Console 창에 아래와 같은 Warning 메시지가 나오는데, Debugger의 빠른 실행을 위해 Docker Quickstart Terminal에서 아래와 같이 실행을 했습니다.

warning: Debugger speedups using cython not found. Run '"/usr/bin/python" "/opt/.pycharm_helpers/pydev/setup_cython.py" build_ext --inplace' to build.


$ docker run -t -i --volumes-from <id_of_pycharm_helpers_container> <remote 디버깅할 docker_image> /usr/bin/python /opt/.pycharm_helpers/pydev/setup_cython build_ext --inplace


$ docker run -t -i --volumes-from pycharm_helpers_PY-162.1967.10 gcr.io/tensorflow/tensorflow:latest-devel /usr/bin/python /opt/.pycharm_helpers/pydev/setup_cython.py build_ext --inplace




이렇게 하니까 debug할 때 실행되는 시간이 좀 더 빨라지고, Remote Debugging할 때 PyCharm Console 창에 보이던 경고 메시지도 사라졌습니다.



'Python' 카테고리의 다른 글

jupyter notebook markdown  (0) 2016.10.30
Django 예제  (0) 2016.10.19
PyCharm 에서 디버그 중 Edit and Continue 기능 안됨.  (0) 2016.09.12
Jupyter notebook 에서 Line Number(줄번호) 보이기  (0) 2016.09.12
Interactive Python Widget  (0) 2016.09.12
Comments