Spyder IDE (Python의 Matlab과 유사한 개발환경)
Spyder IDE는 Open-source로 개발되고 있는 IDE로써 과학 및 공학 연산에 최적화된 Python 전용 IDE이다. Spyder 3의 경우 버그가 꽤 있었고 UI도 불편한 부분이 있어서 사용하기 쉽지 않았지만 Spyder 4가 되면서 많은 것이 개선되었다.
Spyder 4에서는 많은 bug가 해결되었고 Dark theme도 지원하고 있어서 Matlab에서 Python으로 전환하는 사람들에게 가장 추천할 만한 IDE이다.
1. Dark theme
눈의 피로가 빨리 쌓이는 사람들에게는 Dark theme만큼 유용한 UI도 없다. Spyder4에서는 오랫동안 개발되어 온 QDarkstyle을 이용하여 Dark-theme를 구현하였기 때문에 색상이 조화롭고 가독성도 나쁘지 않다.
2. 자동 완성기능 (Auto complete)
lint, autocomplete를 지원하는 python-language-server, Kite 가 개발되면서 Spyder에서도 자동완성 기능을 지원할 수 있게 되었다.
Docstring에 입력, 출력 변수 Type
을 정하면 함수 내부 변수와 함수 출력 변수에 대한 자동 완성 기능을 지원한다.
3. 변수 탐색기
Matlab과 유사한 변수탐색기를 지원한다.
변수탐색기에서는 사진, csv, spyder 자체 저장 포맷등을 불러올 수 있다. 물론 mat파일도 지원한다.
Mat에 struct가 저장되었을 경우 python의 list로 변환되고 cell의 경우 dict로 변환된다. 행렬은 당연히 numpy로 메모리에 저장된다.
4. Cell Mode
Matlab과 동일한 Cell 모드를 지원하고 Cell 실행, 단축키를 이용한 Cell 이동, Cell Debug
도 가능하다. 단 Spyder에서는 # %%를 이용해야 한다.
5. Outline
코드가 길어지면 특정 부분을 찾는 데 시간이 오래 걸린다. 하지만 Outline은 코드의 구조를 한눈에 보여주므로 쉽게 코드를 찾아갈 수 있게 해준다. Outline에서는 Cell뿐만 아니라 함수, 클래스, 특정 주석(#—)을 지원한다.
6. Plot 창
Plot을 모아서 보여주는 기능이 추가되었다. Matlab만 쓰던 사람들은 처음에 어색하고 불편할 수도 있지만 꾸준히 사용하다 보면 이것의 유용함을 느끼게 된다. 한번에 50개 이상씩 Plot을 하거나 Debugging이 끝나고 결과만 자주 보는 Script의 경우에 매우 유용한 기능이다. 클릭 한번으로 Plot 창에 출력된 그림들을 모두 저장할 수도 있다.
Spyder에서는 Matlab 처럼 Figure별 창으로 띄우는 것도 지원한다. 환경설정에서 Figure Popup 방식은 영구적으로 바꿀 수 있고 일시적으로 변경시에는 명령창에서 Magic command를 이용하면 된다.
7. Help
함수에 주석(docstring)이 있는 경우 Rendering 하여 도움말을 보여준다. 편집기 또는 명령창에서 원하는 명령에 cursor를 위치시킨 후 단축키를 입력하면 쉽게 도움말을 볼 수 있다.
8. Auto Docstring
코딩을 오래 하다 보면 주석을 잘 정리하는 것이 얼마나 중요한지 깨닫게 된다. Numpy, Google 형태의 주석을 자동으로 만들어주는 기능이 추가되어 코드 관리가 더욱 쉬워졌다.
위에서 언급하였듯이 Docstring에 Type
을 지정하면 함수 내에서도 자동완성기능 사용이 가능하다. 또한 Docstring에 Type을 정의하고 MyPy를 적용하면 Coding중에 Type Mismatch도 확인 할 수 있다. Python에서 Docstring은 선택이 아닌 필수사항으로 생각하는게 좋다.
9. User snippets
사용자 편의를 위한 user snippets을 지원한다.
10. Python Opensource
Spyder IDE는 가독성이 좋은 Python으로 작성된 Opensource이고 Maintainer가 지속해서 Source를 관리하고 있기 때문에 코드만으로도 Spyder IDE의 Source 구조를 쉽게 파악할 수 있다. 쉽게 이해할 수 있기 때문에 내가 원하는 기능을 Spyder에 추가해서 사용하는 것도 어렵지 않다. 나는 아래 2가지 기능을 코딩하여 사용하고 있다.
10.1. Auto Import
Spyder 개발팀에서 개발 계획을 가지고 있지만 현재 다른 개발에 바빠 auto import가 언제 개발될 지 모르는 상황이다. 그래서 내가 개발하여 사용하고 있다.
- undefined name을 모두 Auto import
- Code Completion에 import 명령 추가
10.2. Vim binding
Vim을 완벽하기 지원하지는 않지만 내가 필요한 vim key를 추가하여 사용 할 수 있다.