얼마전에 IDL 8.5의 출시 소식과 함께, Python Bridge 기능의 추가에 관한 간단한 언급을 했던 바 있습니다. 이 기능은 IDL에서 Python의 기능을 불러와서 쓰거나, Python에서 IDL의 기능을 불러와서 쓸 수 있도록 해주는 기능으로서, 양쪽 언어를 모두 사용하는 유저들에게는 꽤 매력적으로 다가올 수 있게 해줍니다. 그런데 이러한 기능을 실제로 제대로 사용하기 위해서는 IDL과 Python을 모두 어느 정도 셋업을 해줘야 하는데, 이를 위한 좀 더 세부적인 과정을 다뤄보고자 합니다.
* 참고로 저는 IDL은 당연히 좀 하지만 Python은 완전 초보 수준입니다. 따라서 아래 설명하는 내용중에서 Python에 관한 부분이 다소 미비할 수 있는 점 미리 양해를 부탁드립니다. 그리고 이 게시물의 내용은 MS 윈도우즈 64비트 OS를 기준으로 작성하였습니다.
먼저 가장 기본적인 것은 당연히 IDL과 Python이 컴퓨터에 설치되어 있어야 한다는 것인데 구체적으로 요구되는 버전들은 다음과 같습니다.
IDL : 8.5 버전 또는 그 이후 버전
Python : 2.7.x 또는 3.4.x 버전이어야 하며, numpy 라이브러리 설치 필수
제가 이 글을 적고 있는 2015년 8월 현재 Python의 가장 최신 버전은 2.7.10 및 3.4.3으로 되어 있습니다. 어쨌든 2.7 및 3.4 이상의 버전이면 다 됩니다. 이미 이러한 버전의 Python을 설치해서 사용중인 경우라면 모르겠지만, 처음 설치해서 사용해야 하는 경우에는 아래 웹사이트에서 OS에 맞는 설치파일을 받아서 설치하면 됩니다.
https://www.python.org
https://store.continuum.io/cshop/anaconda/
여기서 첫번째 링크는 잘 알려진 Python의 공식 웹사이트입니다. 그리고 두번째 링크는 Anaconda라는 업체에서 만든 일종의 Python 패키지인데요. 저같은 경우는 이번에 이 Anaconda의 패키지를 설치하였습니다. 이 패키지의 장점은 Python 유저들 사이에서 많이 애용되는 추가 라이브러리들(NumPy, SciPy, IPython, Matplotlib 등)이 한꺼번에 포함되어 있다는 점입니다. 한번만 설치하면 이 라이브러리들도 다 포함이 되어 있습니다. 공식 웹사이트에서 받을 수 있는 설치파일의 경우는 그냥 Python 자체의 설치를 위한 것이기 때문에, 추가 라이브러리들이 필요할 경우 개별적으로 받아서 설치를 해야 하는 약간의 번거로움이 있습니다.
하여간 이러한 과정들은 각자 상황에 맞게 선택하면 되지만, 중요한 것은 NumPy 라이브러리는 반드시 설치되어 있어야 한다는 점입니다. 만약 Python은 설치되어 있으나 이 라이브러리가 아직 설치되어 있지 않다면 다음 웹사이트에서 받아서 추가 설치를 해야 합니다. OS별 설치 과정에 대해서는 이 웹사이트에 다 나와 있습니다.
NumPy 라이브러리가 제대로 설치되어 있는지 확인하려면 Python상에서 다음과 같은 내용이 제대로 수행되는지 확인하면 됩니다.
>>> import sys
>>> sys.version
'3.4.1 |Anaconda 2.1.0 (x86_64)| (default, Sep 10 2014, 17:24:09) \n[GCC 4.2.1 (Apple Inc. build 5577)]'
>>> import numpy as np
>>> np.array([1.0,2,3]).dtype
dtype('float64')
이러한 과정들이 다 완료되었다면, 그 다음은 경로 설정 작업이 필요합니다. 이러한 작업은 윈도우즈 OS 자체에서도 필요하고, Python상에서도 필요합니다. 먼저 윈도우즈 OS에서는 PATH라는 시스템 변수의 내용을 약간 손을 봐야 하는데요. 이 설정은 윈도우즈 OS상에서 (구체적인 버전마다 약간 다를 수 있으나 대략) 다음과 같은 방법을 따르면 됩니다.
제어판 - 시스템 및 보안 - 시스템 - 고급 시스템 설정 - "고급" 탭의 환경변수 버튼 클릭
하단의 시스템 변수 중 Path를 선택하고 편집 클릭
이렇게 하면 경로로 설정된 여러 폴더경로들이 ;로 나눠진 목록이 보이는데, 여기서 맨 뒤에 ;를 하나 더 붙이고 다음과 같은 항목을 추가하면 됩니다.
C:\Program Files\Exelis\IDL85\bin\bin.x86_64
그리고 Python의 경우에는 pythonpath라는 자체 시스템 변수의 내용을 수정하여 다음과 같은 두 항목들이 추가되도록 하면 됩니다. 실제로 이 폴더안의 파일들을 보면 확장자가 .pyd 또는 .py인 파일들이 보입니다. 이와 같은 파일들이 Python에서 제대로 인식되도록 하기 위한 과정이라고 보면 됩니다.
C:\Program Files\Exelis\IDLXX\bin\bin.x86_64
C:\Program Files\Exelis\IDLXX\lib\bridges
물론 pythonpath에 이와 같은 항목 추가를 어떻게 하느냐는 사용환경에 따라 약간 다를 수 있습니다. 참고로 저같은 경우는, 앞서 언급했던 Anaconda 패키지를 설치한 후 Spyder라는 개발환경 GUI를 실행해서 설정하였는데요. 이 Spyder는 마치 IDL의 개발환경인 IDLDE와 비슷한 느낌입니다. 그 모습은 다음 그림과 같습니다.
여기서 Tools - PYTHONPATH manager라는 버튼을 누르면 다음과 같은 모습의 GUI가 뜨는데, 여기서 Add Path 버튼을 누르고 위의 두 폴더경로들을 추가하였습니다. 일단 Spyder상에서 작업을 할 경우에는 여기까지만 하면 됩니다.
그런데 Spyder 환경이 아닌 python, ipython과 같은 텍스트 기반의 환경에서도 제대로 되게 하려면 추가적인 설정이 필요합니다. 이를 위하여 PYTHONPATH manager상에서 Synchronize라는 버튼을 누르면 다음과 같은 메시지 창이 뜹니다.
대략적인 의미는 굳이 Spyder가 아닌 다른 환경에서도 여기서 새로 추가되는 두 폴더경로 항목들이 반영된 경로설정을 사용하겠느냐 그리고 그 경우 기존의 경로설정 정보를 지울거냐 말거냐를 묻는 것 같습니다. 아마도 "아니오" 버튼을 누르면 가장 안전할 것 같아서 저는 그렇게 했습니다. 이렇게 하면 Spyder가 아닌 그냥 커맨드 입력 환경의 Python에서도 IDL 라이브러리(IDLPY)를 불러와 사용할 수 있습니다. 이와 같이 저는 Spyder의 인터페이스상에서 경로설정 작업을 수행했지만, Spyder가 아닌 환경에서도 이러한 경로 추가 설정은 가능할 것 같습니다. 다만 저는 그걸 자세히는 모르겠습니다. 아마 Python을 많이 써보신 분들은 그 방법을 잘 아실거라 생각됩니다.
이제 Python상에서 다음과 같은 명령이 문제없이 수행되는지 확인해보면 됩니다. 성공적으로 수행된다면 다음과 같이, 마치 IDL을 처음 띄웠을 때와 같은 IDL 관련 문구들이 뜨는 것이 보이게 됩니다.
그러면 Python내에서 IDL 기능의 사용이 가능해진 상태입니다. 뒤이어 다음과 같은 명령들을 실행해보면 팝업으로 그래픽창이 뜨고 다음과 같은 그림이 그려지게 됩니다. Python에서 IDL의 기능을 불러온 경우이기 때문에, 그림의 모습은 당연히 IDL에서 그린 그림과 같습니다.
>>> import numpy.random as ran
>>> arr = ran.rand(100)
>>> p = IDL.plot(arr, title='My Plot')
>>> p.color = 'red'
>>> p.save('myplot.pdf')
>>> p.close()
이제 Python에서 IDL의 기능을 사용하는 것은 성공했고, 반대로 IDL에서 Python의 기능이 제대로 수행되는지 확인해볼 차례입니다. 먼저 IDL 8.5의 콘솔창에서 >>>를 입력하고 엔터를 누르면 >>> 프롬프트가 떠서 마치 Python 환경과 같은 상태가 됩니다. 여기서 다음과 같은 내용을 실행해보면 다음과 같은 그림이 나타나게 됩니다.
IDL> >>>
>>> import matplotlib.pyplot as plt
>>> import numpy.random as ran
>>> arr = ran.rand(100)
>>> p = plt.plot(arr)
>>> plt.show()
IDL에서 Python의 기능을 불러와서 그린 그림이기 때문에, 그 모습은 당연히 Python에서 그려진 그림과 같습니다. 참고로 >>> 상태에서는 엔터키를 한번만 눌러주면 다시 IDL> 프롬프트로 돌아옵니다. 위의 경우는 Python의 커맨드 라인 입력 모드라고 할 수 있는데, IDL에서는 다음과 같은 방식으로도 실행이 가능합니다. 결과로 나타나는 그림은 위와 동일합니다.
IDL> ran = Python.Import('numpy.random')
IDL> arr = ran.rand(100) ; call "rand" method
IDL> plt = Python.Import('matplotlib.pyplot')
IDL> p = plt.plot(arr) ; call "plot", pass an array
IDL> void = plt.show(block=0) ; pass keyword
이상의 내용은 IDL 8.5에서 Python 브릿지를 사용하기 위한 환경설정 및 실제 구동 예제를 MS 윈도우즈 64비트 OS에서 살펴본 것입니다. 기타 Mac OS나 Linux 등의 OS에서의 방법은 IDL 도움말에서 Contents - Bridges - Python Bridge의 내용을 살펴보면 자세히 나와있으니 참조하시기 바랍니다.
'IDL > Bridge & External Linking' 카테고리의 다른 글
| IDL 버전별로 브릿지 기능으로 연동되는 Python 버전 일람 (1) | 2023.11.14 |
|---|---|
| Mac OS에서 IDL-Python Bridge 셋업 과정의 각종 문제 해결 방법 (0) | 2020.10.05 |
| IDL-Python Bridge의 사용법 (Mac OS용 IDL 8.8 기준) (0) | 2020.09.29 |
| IDL-Python Bridge에서 Qt plugin 문제 해결 방법 (0) | 2020.09.23 |
| IDL-Python Bridge의 사용법 (Win10용 IDL 8.8 기준) (0) | 2020.09.18 |