중요

번역은 여러분이 참여할 수 있는 커뮤니티 활동입니다. 이 페이지는 현재 100.00% 번역되었습니다.

16.3. 플러그인 작성 및 디버그 작업을 위한 IDE 설정

프로그래머마다 선호하는 IDE/텍스트 편집기가 있을 테지만, 이 장에서는 QGIS 파이썬 플러그인을 작성하고 디버그하기 위한 유명한 IDE 몇 개를 추천합니다.

16.3.1. 파이썬 플러그인 작성에 유용한 플러그인들

파이썬 플러그인 작성을 편리하게 해주는 플러그인이 몇 개 있습니다. Plugins ► Manage and Install plugins… 메뉴에서 다음을 설치하십시오:

  • 플러그인 다시 불러오기(Plugin reloader): QGIS를 다시 시작하지 않고서도 플러그인을 다시 불러와 새로운 변경 사항을 적용할 수 있게 해줍니다.

  • 응급 처치(First Aid): 플러그인에서 예외가 발생한 경우 변수들을 조사할 수 있는 파이썬 콘솔과 로컬 디버그 작업자를 추가합니다.

경고

지속적으로 애를 쓰고 있지만, 이 줄 다음에 나오는 정보들이 QGIS 3버전에 대해 업데이트되지 않았을 수도 있습니다.

16.3.2. 리눅스 및 윈도우 상에서 사용자의 IDE 환경설정에 대한 첨언

리눅스 상에서, 일반적으로 해야 하는 일은 사용자의 PYTHONPATH 환경 변수에 QGIS 라이브러리 위치를 추가하는 것이 전부입니다. 대부분의 배포판들에서는 ~/.bashrc 또는 ~/.bash-profile 파일을 다음 줄을 사용해서 편집하면 됩니다. (오픈수세 텀블위드(openSUSE Tumbleweed) 버전에서 테스트했습니다.):

export PYTHONPATH="$PYTHONPATH:/usr/share/qgis/python/plugins:/usr/share/qgis/python"

파일을 저장하고, 다음 셸 명령어를 사용해서 환경 설정을 구현하십시오:

source ~/.bashrc

윈도우 상에서는, 여러분이 QGIS와 동일한 환경을 설정했는지 그리고 동일한 라이브러리와 해석기를 사용하고 있는지 확인해야 합니다. QGIS의 구동 배치(batch) 파일을 수정하는 것이 가장 빠른 방법입니다.

OSGeo4W 설치자를 사용한 경우, 여러분의 OSGeo4W 설치 위치의 bin 폴더에서 이 파일을 찾을 수 있습니다. C:\OSGeo4W\bin\qgis-unstable.bat 같은 경로를 검색해보십시오.

16.3.3. 파이스크립터 IDE를 사용한 디버그 작업 (윈도우)

파이스크립터(Pyscripter) IDE 를 사용하려면, 다음 작업을 해야 합니다:

  1. qgis-unstable.bat 파일을 복사한 다음 복사본의 이름을 pyscripter.bat 으로 바꾸십시오.

  2. 편집기에서 이 파일을 연 다음, QGIS를 구동하는 마지막 줄을 제거하십시오.

  3. 파이스크립터 실행 파일을 가리키는 줄을 추가한 다음 사용할 파이썬 버전을 설정하는 명령줄 인자를 추가하십시오.

  4. 또 파이스크립터가 QGIS가 사용하는 파이썬 DLL 파일을 찾을 수 있는 폴더를 가리키는 인자를 추가하십시오. 이 폴더는 OSGeo4W 설치 위치의 bin 폴더에서 찾을 수 있습니다.

    @echo off
    SET OSGEO4W_ROOT=C:\OSGeo4W
    call "%OSGEO4W_ROOT%"\bin\o4w_env.bat
    call "%OSGEO4W_ROOT%"\bin\gdal16.bat
    @echo off
    path %PATH%;%GISBASE%\bin
    Start C:\pyscripter\pyscripter.exe --python25 --pythondllpath=C:\OSGeo4W\bin
    
  5. 이제 이 배치 파일을 더블 클릭하면 정확한 경로를 가진 파이스크립터를 시작할 것입니다.

파이스크립터보다 더 유명한 이클립스(Eclipse)는 개발자들이 흔히 선택하곤 하는 IDE입니다. 다음 항에서는 플러그인을 개발하고 테스트하기 위해 이클립스를 어떻게 환경설정해야 하는지를 설명할 것입니다.

16.3.4. 이클립스 및 파이데브를 사용한 디버그 작업

16.3.4.1. 설치

이클립스를 사용하기 위해서는 다음을 설치했는지 확인해야 합니다:

  • 이클립스

  • 앱타나(Aptana) 스튜디오 3 플러그인 또는 파이데브(PyDev)

  • QGIS 2.x

  • QGIS 플러그인 원격 디버그(Remote Debug) 를 설치하려 할 수도 있습니다. 현 시점에서 이 플러그인은 아직 실험적이기 때문에, 설치하기 전에 Plugins ► Manage and Install plugins… ► Options 메뉴에서 checkbox Experimental plugins 옵션을 활성화시키십시오.

윈도우에서 이클립스를 사용하기 위한 환경을 준비하려면, 이클립스를 구동하는 배치 파일도 생성해서 사용해야 합니다:

  1. qgis_core.dll 파일이 있는 폴더를 찾으십시오. 일반적으로 C:\OSGeo4W\apps\qgis\bin 폴더이지만, 여러분이 직접 QGIS 응용 프로그램을 컴파일한 경우 이 폴더는 빌드 폴더 아래 있는 output/bin/RelWithDebInfo 폴더입니다.

  2. eclipse.exe 실행 파일의 위치를 찾으십시오.

  3. 다음 스크립트를 생성한 다음 QGIS 플러그인 개발 시 이 스크립트를 사용해서 이클립스를 구동하십시오.

    call "C:\OSGeo4W\bin\o4w_env.bat"
    set PATH=%PATH%;C:\path\to\your\qgis_core.dll\parent\folder
    start /B C:\path\to\your\eclipse.exe
    

16.3.4.2. 이클립스 설정하기

  1. 이클립스에서 새 프로젝트를 생성하십시오. 일반 프로젝트(General Project) 를 선택한 다음 나중에 실제 리소스를 링크시킬 수 있습니다. 즉 여러분이 이 프로젝트를 어디에 배치하느냐는 그렇게 중요하지 않습니다.

    ../../../_images/eclipsenewproject.png

    그림 16.114 이클립스 프로젝트

  2. 새 프로젝트를 오른쪽 클릭한 다음 New ► Folder 메뉴를 선택하십시오.

  3. Advanced 를 클릭하고 Link to alternate location (Linked Folder) 를 선택하십시오. 여러분이 이미 디버그하고자 하는 소스를 가지고 있는 경우 해당 리소스를 선택하십시오. 그렇지 않다면, 앞에서 설명한 것처럼 폴더를 하나 생성하십시오.

이제 Project Explorer 뷰에 여러분의 소스 트리가 뜨고 여러분이 코드 작업을 시작할 수 있습니다. 처음부터 문법 강조 및 다른 모든 강력한 IDE 도구들을 사용할 수 있습니다.

16.3.4.3. 디버그 작업자 환경설정하기

디버그 작업자를 작동하게 하려면:

  1. 이클립스에서 디버그 관점으로 전환합니다. (Window ► Open Perspective ► Other ► Debug)

  2. PyDev ► Start Debug Server 메뉴를 선택해서 파이데브 디버그 서버를 시작합니다.

  3. 이클립스는 이제 QGIS가 디버그 서버로 연결하기를 기다립니다. QGIS가 디버그 서버에 연결되면 QGIS는 이클립스가 파이썬 스크립트를 제어할 수 있게 해줄 것입니다. 이것이 바로 우리가 원격 디버그 플러그인을 설치한 이유입니다. 따라서 QGIS를 아직 시작하지 않았다면 QGIS를 시작한 다음 버그 심볼을 클릭하십시오.

이제 중단점(breakpoint)을 설정할 수 있기 때문에, 코드가 중단점에 도달하는 순간 실행을 멈추고 여러분의 플러그인의 현재 상태를 조사할 수 있습니다. (중단점은 다음 그림에 있는 녹색 점으로, 중단점을 설정하려는 줄 왼쪽의 하얀 공간을 더블 클릭해서 설정합니다.)

../../../_images/breakpoint.png

그림 16.115 중단점

이제 디버그 콘솔이라는 매우 재미있는 물건을 사용할 수 있게 되었습니다. 디버그 콘솔로 진행하기 전에 먼저 실행이 현재 중단점에서 중단된 상태인지 확인하십시오.

  1. 콘솔 뷰를 (Window ► Show view) 여십시오. 그러면 Debug Server 콘솔이 열리는데, 그렇게 재미있어 보이진 않습니다. 하지만 Open Console 버튼을 누르면 좀 더 재미있는 파이데브 디버그 콘솔로 전환시킬 수 있습니다.

  2. Open Console 버튼 옆에 있는 화살표를 클릭한 다음 파이데브 콘솔(PyDev Console) 을 선택하십시오. 여러분에게 어떤 콘솔을 시작하고 싶은지 묻는 창이 열립니다.

  3. 파이데브 디버그 콘솔(PyDev Debug Console) 을 선택하십시오. 이 항목이 회색조로 비활성화되어 있고 디버그 작업자를 시작해서 무결한 프레임을 선택하라는 메시지를 보이는 경우, 원격 디버그 플러그인을 활성화했는지 그리고 현재 중단점에서 중단된 상태인지 확인하십시오.

    ../../../_images/console-buttons.png

    그림 16.116 파이데브 디버그 콘솔

이제 여러분이 현재 맥락 안에서 어떤 명령어든 테스트할 수 있게 해주는 쌍방향 작업 콘솔이 열렸습니다. 변수를 조작하거나 API를 호출하거나 원하는 것은 무엇이든 할 수 있습니다.

조금 짜증스러운 사실은, 여러분이 명령어를 입력할 때마다 콘솔이 디버그 서버로 다시 전환된다는 점입니다. 이 습성을 중단시키려면, 디버그 서버 페이지에 있을 때 콘솔 고정(Pin Console) 버튼을 클릭하면 됩니다. 적어도 현재 디버그 세션 동안에는 이 결정을 기억할 것입니다.

16.3.4.4. 이클립스에 API를 이해시키기

이클립스가 실제로 QGIS API에 대해 알도록 해주는 매우 편리한 기능이 있습니다. 이 기능은 이클립스가 코드의 오타를 점검할 수 있게 해줍니다. 이뿐만이 아니라, 이클립스가 가져오기로부터 API 호출에 자동 완성 기능을 사용할 수 있게 해줍니다.

이클립스는 이를 위해 QGIS 라이브러리 파일들을 파싱해서 모든 정보를 가져옵니다. 여러분이 해야 할 일은 이클립스에 라이브러리의 위치를 알려주는 것뿐입니다.

  1. Window ► Preferences ► PyDev ► Interpreter ► Python 메뉴를 클릭하십시오.

    창 윗부분에 사용자가 환경설정한 (현 시점에서는 QGIS 용 파이썬 2.7) 파이썬 해석기가 나타날 것입니다. 아랫부분에는 탭 몇 개가 보일 것입니다. 여기서 흥미로운 탭은 라이브러리(Libraries)강제 내장(Forced Builtins) 탭입니다.

    ../../../_images/interpreter-libraries.png

    그림 16.117 파이데브 디버그 콘솔

  2. 먼저 라이브러리 탭을 여십시오.

  3. New Folder 를 클릭하고 QGIS 설치본의 파이썬 폴더를 선택하십시오. 이 폴더의 위치를 모르는 경우 (플러그인 폴더가 아닙니다):

    1. QGIS를 여십시오.

    2. 파이썬 콘솔을 시작하십시오.

    3. qgis 를 입력하십시오.

    4. 그리고 엔터 키를 누르십시오. 파이썬이 사용하는 QGIS 모듈과 그 경로를 출력할 것입니다.

    5. 이 경로 맨 뒤에 있는 /qgis/__init__.pyc 문자열을 제거한 경로가 파이썬 폴더를 가리키는 경로입니다.

  4. 여기에 플러그인 폴더도 추가해야 합니다. (사용자 프로파일 폴더 아래 있는 python/plugins 폴더입니다.)

  5. 그 다음 강제 내장 탭으로 가서 New… 를 클릭한 다음 qgis 를 입력하십시오. 그러면 이클립스가 QGIS API를 파싱할 것입니다. 이클립스가 PyQt API에 대해서도 알고 있기를 원할 수도 있습니다. 따라서 PyQt도 강제 내장으로 추가하십시오. PyQt는 이미 라이브러리 탭에 있을 것입니다.

  6. OK 를 클릭하면 끝입니다.

참고

QGIS API가 변경될 때마다 (예를 들면 QGIS 마스터 분기를 컴파일하는 도중 SIP 파일이 변경되는 경우) 다시 이 페이지로 돌아가서 Apply 를 클릭하기만 하십시오. 이클립스가 모든 라이브러리를 다시 파싱할 것입니다.

16.3.5. QGIS가 컴파일된 우분투에서 파이참을 사용한 디버그 작업

파이참(PyCharm)은 젯브레인스(JetBrains)에서 개발한 파이썬 용 IDE입니다. 커뮤니티 에디션이라는 무료 버전과 프로페셔널 에디션이라는 유료 버전이 있습니다. https://www.jetbrains.com/pycharm/download 웹사이트에서 파이참을 다운로드할 수 있습니다.

여러분이 우분투 상에 지정한 ~/dev/qgis/build/master 빌드 디렉터리를 사용해서 QGIS를 컴파일했다고 가정합니다. 여러분이 직접 QGIS를 컴파일해야만 하는 것은 아니지만, 컴파일된 QGIS에 대해서만 테스트되었습니다. QGIS를 직접 컴파일하지 않은 경우, 경로들을 조정해야만 합니다.

  1. 파이참의 Project PropertiesProject Interpreter 에서 QGIS 라는 파이썬 가상 환경을 생성할 것입니다.

  2. 작은 톱니바퀴 아이콘을 클릭한 다음 Add 를 클릭하십시오.

  3. Virtualenv environment 를 선택하십시오.

  4. ~/dev/qgis/venv 같은 여러분의 모든 파이썬 프로젝트의 일반 위치를 선택하십시오. 모든 플러그인에 대해 이 파이썬 해석기를 사용할 것이기 때문입니다.

  5. 여러분의 시스템 상에서 사용할 수 있는 파이썬 3버전 기반 해석기를 선택하고 다음 Inherit global site-packagesMake available to all projects 옵션 2개를 체크하십시오.

../../../_images/pycharm-add-venv.png
  1. OK 를 클릭한 다음, 다시 작은 톱니바퀴 아이콘으로 돌아와 Show all 을 클릭하십시오.

  2. 새 창이 열리면, 새 QGIS 해석기를 선택한 다음 Show paths for the selected interpreter 수직 메뉴의 마지막 아이콘을 클릭하십시오.

  3. 마지막으로, 목록에 다음 ~/dev/qgis/build/master/output/python 절대 경로를 추가하십시오.

../../../_images/pycharm-adding-path.png
  1. 파이참을 다시 시작하면 여러분의 모든 플러그인에 대해 이 새로운 파이썬 가상 환경을 사용할 수 있습니다.

파이참은 QGIS API는 물론 from qgis.PyQt.QtCore import QDir 같이 QGIS가 제공하는 Qt를 사용하는 경우 PyQt API도 인식하게 될 것입니다.

파이참의 프로페셔널 에디션에서는 원격 디버그 작업도 잘 작동합니다. 커뮤니티 에디션의 경우, 원격 디버그를 사용할 수 없습니다. 로컬 디버그 작업자에만 접근할 수 있는데, QGIS 자체에서가 아니라 파이참 내부에서 (스크립트로써 또는 unittest로) 코드를 실행해야만 한다는 뜻입니다. QGIS 안에서 실행되는 파이썬 코드의 경우, 앞에서 설명한 응급 처치 플러그인을 사용할 수도 있습니다.

16.3.6. PDB를 사용한 디버그 작업

이클립스 또는 파이참 같은 IDE를 사용하지 않는 경우, 다음 단계를 따라 PDB(Python Debugger)를 사용해서 디버그할 수 있습니다.

  1. 먼저 디버그하고자 하는 위치에 다음 코드를 추가하십시오:

    # Use pdb for debugging
    import pdb
    # also import pyqtRemoveInputHook
    from qgis.PyQt.QtCore import pyqtRemoveInputHook
    # These lines allow you to set a breakpoint in the app
    pyqtRemoveInputHook()
    pdb.set_trace()
    
  2. 그리고 명령줄에서 QGIS를 실행하십시오.

    리눅스에서:

    $ ./Qgis
    

    맥OS에서:

    $ /Applications/Qgis.app/Contents/MacOS/Qgis
    
  3. 그러면 응용 프로그램이 중단점에 도달했을 때 콘솔에 입력할 수 있게 됩니다!

할 일:

테스트 정보 추가하기