티스토리 뷰


[CentOS 5.6에서 Python2.6 + PyQt4 + matplotlib 설치하기]


- CentOS 5.6 기준
- Python 2.6 + PyQt4 + matplotlib 1.0 조합



0. 들어가기 전에

- 여러 사람이 쓰는 워크스테이션 또는 클러스터 컴퓨팅 환경이라는 가정 하에, 모든 설치는 root 권한 없이 수행한다.

- Windows가 각종 프로그램을 "C:\Program Files" 디렉토리에 모아두는 것처럼, 각종 프로그램은 "/home/user/softwares"라는 디렉토리 아래에 놓기로 한다. 이는 root 권한이 없으므로 설치된 프로그램을 나중에 관리하기 쉽도록 home 디렉토리 밑에 두고자 하는 것이다. 여기서 "user"는 사용자 계정(아이디)을 의미한다. 사용자 계정이 dwlee이면 아마 "/home/dwlee/softwares/"라는 경로를 갖게 될 것이다.

- Python의 각종 확장 패키지(extention)의 소스파일은 "/home/user/softwares/python/ext" 디렉토리에 두기로 하겠다.





1. Python 설치


1.1 Python 내려받기




<Fig. 1-1. Python 다운로드 사이트>



- 직접 source를 내려받아 컴파일 한다.
다른 패키지와의 호환성을 고려하여 python 버전은 2.6을 사용하기로 하겠다. (다운로드 사이트 : http://www.python.org/download/releases/2.6.7/ )

- softwares 디렉토리 밑에 python 폴더를 만든다.

$ mkdir python
$ pwd
/home/user/softwares/python





- 받을 파일에 대한 링크를 "바로가기 복사(Copy shorcut)" 하여
"wget" 명령어 뒤에 "붙여넣기(paste)" 한다.




$ wget http://www.python.org/ftp/python/2.6.7/Python-2.6.7.tgz




<Fig. 1-2. Python 내려받기>





1.2 Python 컴파일


- 다운이 완료되면 압축을 풀고 컴파일한다.
./configure 할 때, --prefix를 적절하게 설정해 주도록 한다.

예) --prefix=/home/user/softwares/python





<압축 풀기>
$ tar -zvxf Python-2.6.7.tgz
$ cd Python-2.6.7


<Python 컴파일>
$ ./configure --prefix=/home/user/softwares/python --enable-shared
$ make
$ make install




- 사실, python만 사용하려면 --enable-shared를 넣어줄 필요가 없지만 (shared library로 컴파일 할 필요가 없지만), 여타 몇몇 라이브러리(예: PaGMO, http://pagmo.sourceforege.net)에서 python의 shared library를 필요로 하는 경우가 있기에 여기서는 shared library로 컴파일 하였다.




<Fig. 1-3. make 결과>




- ./cofigure 시 --prefix를 /home/user/softwares/python으로 잡아주었기 때문에,
/home/user/softwares/python 밑에 bin, include, lib, share 폴더가 생겨난 것을 볼 수 있다.





<Fig. 1-4. bin, include, lib, share 폴더가 생겨남>








1.3 Python 환경변수 설정


<Fig. 1-5. PATH 환경변수에 python의 bin 디렉토리 경로 추가>

- Linux shell에서 절대경로 없이 "python"을 입력했을 때 바로 python이 실행되도록
PATH 환경변수에 python의 bin 디렉토리 경로를 잡아준다. 이 때, 시스템에 기본적으로 설치돼 있는 python의 경로(예: /usr/bin/ )보다 앞에 추가해 준다. 이유는, shell에서 "python"을 입력했을 시 우리가 설치한 python이 실행되도록 하기 위해서이다.




- 그러나 python 컴파일 시 shared library로 설정해 주었기 때문에, PATH 설정만 해주고 "python"을 입력하면 Fig. 1-6.과 같은 에러 메시지가 나타난다.


<Fig. 1-6. Python의 shared library로 인해 발생하는 에러메시지>





- Fig. 1-7. 처럼 LD_LIBRARY_PATH에 libpython.so.* 파일들이 들어있는 경로를 추가해 준다.





<Fig. 1-7. Python의 shared library가 있는 디렉토리 경로를 LD_LIBRARY_PATH에 추가>






- 변경된 사항이 적용되도록 아래와 같이 입력한다.



$ source ~/.bash_profile




- 이제 우리가 설치한 python이 제대로 실행되는 것을 확인할 수 있다 (Fig. 1-8).



<Fig. 1-8. 정상적으로 실행되는 Python 2.6.>












2. Qt4 설치


- matplotlib의 GUI backend로서 PyQt4를 사용하기 위해서는 먼저 Qt4 SDK를 설치해야 한다. 왜 GUI backend로서 Qt4를 사용해야 하는가? 특별한 이유는 없고 그냥 좋아서이다. Qt는 다양한 프로그램에서 사용되고 있는 GUI Framework으로서 꽤나 매력있다고 생각한다.

※ matplotlib에서 지원하는 다양한 GUI backend가 있으니 자신의 상황에 맞게 적절히 선택하는 것도 좋다.




2.1 Qt4 내려받기


- Linux/X11 용 Qt를 내려받는다. "통합개발환경"을 받아도 되지만, 단순히 PyQt에 바인딩하기 위한 목적으로는 "개별프레임워크"로도 충분하다.
(다운로드 사이트 :
http://qt.nokia.com/downloads-kr )



<Fig. 2-1. Qt 다운로드 사이트>






<Fig. 2-2. Qt 내려받기>








2.2 Qt4 컴파일

- 다운이 완료되면 압축을 풀고 컴파일한다. 역시 ./configure 할 때, --prefix를 적절하게 설정해 주도록 한다.


예) --prefix=/home/user/softwares/qt4



<압축 풀기>
$ tar -zvxf qt-everywhere-opensource-src-4.7.3.tar.gz
$ cd qt-everywhere-opensource-src-4.7.3



<Qt4 컴파일>
$ ./configure --prefix=/home/user/softwares/qt4 -shared





<Fig. 2-3. Open Source Edition을 선택하고(o를 입력), license 사항에 대해 동의하면 yes를 입력한다.>





- configuration이 완료되면, make와 make install로 무난하게 진행한다.


$ make


... 오래 걸린다 ...
... 너무 오래 걸린다 ...
... 지루하다 ...
... (~_~) =3 ...
... (_ _) ..zzZZ ...
... 몇시간이 흘렀을까 ...


$ make install







2.3 Qt4 환경변수 설정


- 컴파일이 완료되면 Qt4의 bin과 lib 경로를 각각 PATH와 LD_LIBRARY_PATH에 추가한다. PyQt가 qmake와 Qt의 shared library를 사용하기 때문이다.



<Fig. 2-4. Qt의 bin과 lib 디렉토리를 환경변수에 추가>





- 이제 Qt4가 제대로 설치되었는 지 확인하기 위해 몇가지 테스트를 해본다.



<qmake 테스트>

- qt 소스파일 디렉토리에서 벗어나 qmake라고 입력했을 때 qmake 도움말이 나오는 지 확인한다.




<Fig. 2-5. Qt의 bin과 lib 디렉토리를 환경변수에 추가>





<Qt example 실행>

- examples 폴더에 있는 예제를 실행해 본다.
여기서는 /home/user/softwares/qt4/examples/widgets/analogclock 에 있는 예제를 실행해 보도록 하겠다. (이를 위해서는 Linux GUI display 실행 환경이 갖춰줘야 한다. 나의 경우, 윈도우에서 리눅스 워크스테이션에 접속하여 사용하는 상황이기 때문에 Putty Xming 환경을 이용하였다.)


$ cd /home/user/softwares/qt4/examples/widgets/analogclock
$ ./analogclock &





- 프로그램을 실행하면 현재 시각을 알려주는 자그마한 아날로그 시계가 나타난다.




<Fig. 2-6. Qt의 example 중 하나인 아날로그 시계>











3. PyQt 설치


3.1. SIP 설치

- PyQt4는 SIP에 의존하기 때문에 SIP 설치가 필요하다.
(다운로드 사이트 : http://www.riverbankcomputing.co.uk/software/sip/download )




<Fig. 3-1. SIP 다운로드 사이트>





<Fig. 3-2. SIP 내려받기>



$ tar -zvxf sip-4.12.4.tar.gz
$ cd sip-4.12.4
$ python ./configure.py
$ make
$ make install



- "python ./configure.py" 명령어에서 보면 --prefix 를 설정해 주지 않는데, 이는 configure.py를 실행하는 python의 site-packages 디렉토리 밑으로 해당 확장 패키지가 설치되기 때문이다. 만약에 "/usr/bin/python ./configure.py"로 진행하면 "/usr/lib/python2.x/site-packages/" 밑으로 확장 패키지가 설치될 것이다.







3.2. PyQt4 설치

- SIP 설치와 동일하게 진행하면 된다.
(다운로드 사이트 : http://www.riverbankcomputing.co.uk/software/pyqt/download )



<Fig. 3-3. PyQt 다운로드 사이트>






<Fig. 3-4. PyQt 내려받기>







$ python ./configure.py



Determining the layout of your Qt installation...
This is the GPL version of PyQt 4.8.5 (licensed under the GNU General Public License) for Python 2.6.7 on linux2.

Type '2' to view the GPL v2 license.
Type '3' to view the GPL v3 license.
Type 'yes' to accept the terms of the license.
Type 'no' to decline the terms of the license.

Do you accept the terms of the license? yes



$ make

... 오래 걸린다 ...
... 너무 오래 걸린다 ...
... 지루하다 ...
... (~_~) =3 ...
... (_ _) ..zzZZ ...
...

$ make install
$ cd ./examples/widgets/
$ python ./analogclock.py &



- Fig. 2-6. 에서 봤던 시계가 나타나면 PyQt가 제대로 설치된 것이다.










4. matplotlib 설치 및 예제 실행


4.1. NumPy 설치

- matplotlib은 NumPy에 의존하므로 NumPy를 설치한다.
(다운로드 사이트 : http://sourceforge.net/projects/numpy/files/NumPy/1.6.1/ )



<NumPy 내려받기 및 설치>
$ wget http://sourceforge.net/projects/numpy/files/NumPy/1.6.1/numpy-1.6.1.tar.gz/download
$ tar -zvxf numpy-1.6.1.tar.gz
$ cd numpy-1.6.1
$ python setup.py build
$ python setup.py install

- SIP 설치 때와 마찬가지로,  --prefix 를 설정해 주지 않는데, 이는 setup.py를 실행하는 python의 site-packages 디렉토리 밑으로 해당 확장 패키지가 설치되기 때문이다.




<NumPy import 테스트>
$ cd ..
$ python
Python 2.6.7 (r267:88850, Aug 30 2011, 18:36:37)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>>


- numpy가 제대로 import 되는 지 확인한다.




4.2. matplotlib 설치


(다운로드 사이트 : http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/ )


<matplotlib 내려받기 및 설치>

$ pwd
/home/user/softwares/python/ext
$ wget http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/matplotlib-1.0.1.tar.gz/download
$ tar -zvxf matplotlib-1.0.1
$ cd matplotlib-1.0.1
$ python setup.py build
$ python setup.py install




<matplotlib 테스트>
$ python
Python 2.6.7 (r267:88850, Aug 30 2011, 18:36:37)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib as mpl
>>> mpl.use('Qt4Agg')
>>> import matplotlib.pyplot as plt
>>> plt.plot([1, 2])
[<matplotlib.lines.Line2D object at 0x1a3db910>]
>>> plt.show()



- Fig. 4-1. 과 같이 그래프가 나타나면 matplotlib + PyQt4 설치가 성공한 것이다.





<Fig. 4-1. matplotlib 테스트>










- 그러나 아래와 같이 matplotlib 예제를 실행해 보면 아무 일도 일어나지 않는다.



$ cd ./examples/mplot3d
$ python ./surface3d_demo.py &



- 이유는 아직 Qt4Agg가 GUI backend로 적용되지 않았기 때문이다. (위 python shell 테스트에서 정상적으로 작동할 수 있었던 이유는, "mpl.use('Qt4Agg')" 구문으로 Qt4Agg 사용을 명시적으로 지정해 주었기 때문이다.)



- Qt4Agg를 적용하기 위해서 matplotlib 패키지 디렉토리에 있는 matplotlibrc 파일을 수정해 준다.


$ vim /home/user/softwares/python/lib/python2.6/site-packages/matplotlib/mpl-data/matplotlibrc




- backend 항목에 "Agg" 대신 "Qt4Agg" 라고 입력한다.


<Fig. 4-2. matplotlib backend 설정>




$ cd /home/user/softwares/python/ext/matplotlib-1.0.1/examples/mplot3d
$ python ./surface3d_demo.py &




- 이전과 달리 이제 Fig. 4-3. 과 같은 그래프가 나타나는 것을 볼 수 있다.


<Fig. 4-3. matplotlib 예제 실행>





댓글