python 2

라이브러리

본 토픽은 현재 준비중입니다.공동공부에 참여하시면 완성 되었을 때 알려드립니다.

UI와 API

UI는 User Interface의 약자다. 이것은 시스템과 사용자 사이의 접점을 의미하는데, 사용자의 의지를 시스템에게 전달하면서, 시스템의 상태를 사용자에게 알려주는 장치, 그래픽, 명령어들을 포괄적으로 UI라고 부른다. 다음 그림은 메시지 박스라는 UI의 한 형태인데, 시스템은 사용자에게 Coding Everybody!!라는 정보를 전달하고 있다. 또 사용자는 확인 버튼을 눌러서 메시지 박스를 닫으라고 시스템에게 명령할 수 있다.

API는 Application Programming Interface의 약자로 (운영체제나 언어 같은) 플랫폼과 그 플랫폼 위에서 동작하는 응용 프로그램이 상호작용하는 접점이라고 할 수 있다. 말이 어렵다. 아래 코드를 실행하면 위의 그림과 같은 메시지 박스가 실행될 것이다.

import Tkinter
import tkMessageBox
tkMessageBox.showinfo('slogan', 'Coding Everybody!!')

여러분이 위와 같은 코드를 통해서 메시지 박스를 실행했다고 치자. 그럼 메시지 박스를 만든 것은 여러분일까? 아닐까? 이 질문에 대해서 생각해보자.

위의 코드를 통해서 여러분이 시스템에게 지시한 것은 아래와 같다.

  • 1행 : Tkinter 모듈의 로드
  • 2행 : Tkinter의 메시지 박스 모듈의 로드
  • 2행 : 메시지 박스를 실행하면서 Coding Everybody!!를 출력

반면에 시스템에 지시한 적이 없는데 메시지 박스가 자체적으로 가지고 있는 기능들은 아래와 같다.

  • 오른쪽 상단에는 닫기 버튼이 있다. 이 버튼을 누르면 메시지 박스가 닫힌다.
  • 타이틀 바를 마우스로 드래그하면 마우스의 움직임을 따라서 메시지 박스가 움직인다.
  • 레이블 앞에는 느낌표 아이콘이 위치하고 있다.
  • 확인 버튼이 있어서 이것을 클릭하면 메시지 박스가 닫힌다.
  • 확인 버튼 위에 마우스를 롤오버하면 확인버튼이 미세하게 강조표시된다.
  • 메시지 박스의 시각적인 디자인

위에서 열거한 것처럼 메시지 박스는 여러분이 지시한 것 보다 훨씬 더 많은 일을 알아서 수행하고 있는 하나의 프로그램이다. 이 프로그램이 우연히 생길리는 만무하다. 이 메시지 박스는 import 'Tkinter'를 통해서 로드한 Tkinter 모듈 안에 이미 만들어져서 준비되어 있는 것이다. 여러분이 이것을 사용하고자 할 때 단지 tkMessageBox.showinfo()라는 메소드를 호출하면 되는데 바로 이 메소드와 같은 것을 API라고 한다. 사용자가 UI를 이용해서 응용 프로그램이 제공하는 기능을 사용하듯이 여러분은 API를 이용해서 플랫폼(여기서는 파이썬)이 제공하는 기능을 자신이 만들고 있는 응용 프로그램에서 사용할 수 있게 되는 것이다. 

아래 예제는 현재 시간을 출력하는 예제다.

from datetime import datetime
print datetime.now()

실행결과는 아래와 같은 형식으로 현재 시간을 출력할 것이다.

2013-06-17 01:04:56.155000

객체 datetime의 now 메소드를 호출함으로서 현재 시간을 알아낼 수 있었다. 자신의 응용 프로그램에서 현재 시간을 알아야 한다면 datetime.now()라는 API를 사용해야 한다는 것을 알아야 한다. 응용 프로그램의 개발자에게 응용 프로그램의 플랫폼이 제공하는 API를 폭넓고 깊게 이해하는 것은 매우 중요하다.

라이브러리

코드를 작성하다보면 자주 사용되는 로직이 있다. 그럼 이 로직을 재활용하고 싶은 마음이 생기기 마련인데, 재활용 가능하도록 만든 로직을 라이브러리(library)라고 한다. 라이브러리는 자기 자신이 사용하기 위해서도 만들 수 있고, 불특정 다수가 사용할 수 있도록 공개할 수도 있다. 라이브러리를 사용하면 필요한 로직을 직접 구현할 필요가 없이 라이브러리에서 제공하는 API를 호출하는 것을 통해서 원하는 기능을 사용할 수 있게 된다.

파이썬의 표준 라이브러리 문서

파이썬은 개발의 필수적 기능을 라이브러리로 제공하고 있다. 이러한 라이브러리를 표준 라이브러리라고 부른다.

이 라이브러리의 사용법이라고 할 수 있는 API의 리스트는 아래의 링크를 통해서 열람할 수 있다.

http://docs.python.org/2/library/

Built-in

빌트인(Built-in)은 파이썬에 내장된 라이브러리다. 내장(Built-in)이란 파이썬이 기본적으로 제공하는 것으로 import를 이용해 로드하지 않아도 사용할 수 있는 것들이다. 이 API들은 응용 프로그램이 시스템에 접근 할 수 있는 필수적인 기능을 제공한다.

Built-in 리스트

파이썬의 코어 리스트는 아래의 URL을 통해서 열람 할 수 있다.

  • Built-in 함수 : 객체를 문자로 출력하거나, 절대값을 구하거나, 파일을 제어 할 수 있는 함수와 같이 자주 사용되는 함수들이 여기에 속한다.
  • Built-in 상수
  • Built-in 타입 : 파이썬에 기본적으로 내장된 객체들의 리스트다. 이 문서의 초반에는 이 객체들의 일반적인 특성을 설명하고, 이후에는 객체를 numerics, sequences, mappings, files, classes, instances, exceptions으로 분류해서 설명하고 있다.
  • Built-in 예외(Exception)

Built-in이 아닌 표준 라이브러리

빌트인 라이브러리와 빌트인이 아닌 라이브러리는 모두 파이썬 플랫폼에 기본적으로 내장되어서 제공된다는 점에서 같다. 즉 파이썬을 실행할 수 있는 환경에 있는 사용자라면 라이브러리를 이미 가지고 있을 것이라는 점을 보증한다는 것이다. 차이점은 빌트인이 로드(import)가 필요 없는 반면 빌트인이 아닌 라이브러리는 사용하고자 하는 라이브러리를 명시적으로 로드해야 한다는 점이다.

라이브러리 리스트

파이썬의 코어 리스트는 아래의 URL을 통해서 열람 할 수 있다.

http://docs.python.org/2/library/

라이브러리의 적용

아래 내용은 필자가 파이썬에서 파일을 생성하는 방법을 알아낸 과정을 기록한 내용이다. 더 좋은 방법도 있을 것이다. 또 필자는 이미 다른 언어를 통해서 파일을 다뤄본 경험이 있기 때문에 본인도 모르게 직관이 많이 작용했을 것이다. 아래 내용을 통해서 필자가 전달하고 싶은 것은 API를 파악하는 최선의 방법이 아니라 수단과 방법을 가리지말고 문제를 해결하라는 점이다. 이 과정을 반복하면 문제를 해결하기 위해서 필요한 시간이 점점 단축 될 것이다.

어떤 내용을 파일로 저장하고 싶다고 하자. 어떻게 해야할까? 일단 필자는 구글에서 python file write를 검색해봤다. 그 결과 점프 투 파이썬의 파일 읽고 쓰기가 검색 되었다. 이 문서는 파일을 저장하는 방법에 대해서 지금 필요한 모든 내용이 다 들어있기 때문에 (문제를 해결하는 과정을 보여주려는) 지금 맥락에서는 좋은 예제가 아닌 것 같다. 그래서 검색 결과 중에 stackoverflow에 올라온 Q&A를 열어봤다. 거기에는 파일을 기록하는 방법에 대한 간결한 예제가 답변으로 채택되어 있었다. 그 내용은 아래와 같다.

f = open('myfile','w')
f.write('hi there\n') # python will convert \n to os.linesep

위의 내용을 보니까 파일 작업을 할 때는 함수 open을 이용해서 파일을 열고 그 결과 해당 파일을 수정할 수 있는 객체가 변수 f에 담긴다는 것을 추정할 수 있었다. 그리고 이 객체는 메소드 write가 있어서 이것을 인자와 함께 호출하면 인자로 전달된 내용이 파일에 기록되는 것 같았다. 그래서 일단 위의 코드를 아래와 같이 수정해서 무작정 실행해봤다.

f = open('title.txt', 'w')
f.write('Coding Everybody!!')

성공이다. title.txt 파일이 생성되고 그 파일에는 Coding Everybody!!가 기록됐다. 여기서 끝내면 안된다. 사용하고 있는 API들의 의미와 정확한 사용방법을 숙지해야 한다. 그래서 이 API들의 의미와 정확한 쓰임을 알아봤다. 우선 open 함수는 import를 한 것이 없는데 실행이 됐다. 그것은 함수 open이 built-in 함수라는 것을 의미한다. built-in 함수 리스트에서 open을 찾아봤다. 있다. 그리고 내용을 보니까 아래와 같은 대목이 나온다.

The most commonly-used values of mode are 'r' for reading, 'w' for writing (truncating the file if it already exists), and 'a' for appending (which on some Unix systems means that all writes append to the end of the file regardless of the current seek position).

두 번째 인자인 mode 중의 r은 reading, w는 writing, a는 appending의 약자라는 것을 알 수 있다. 즉 연 파일을 어떤 모드로 사용할 것인지를 지정한다는 의미다. 무슨 의미인지 아리송하다. 그럼 mode를 바꿔가면서 실행해보면 어떨까 싶은 생각이 들었다. mode의 값을 r로 변경한 후에 실행한 결과 아래와 같이 에러가 발생했다.

Traceback (most recent call last):
  File "D:\dev\language\fundamental\python\file.py", line 1, in <module>
    f = open('title.txt', 'r')
IOError: [Errno 2] No such file or directory: 'title.txt'

reading 모드로 연 파일을 write하려니까 에러가 발생한다는 것을 짐작할 수 있다. 이번에는 mode를 a로 바꾼 후에 여러번 실행을 해봤다. 그 결과 title.txt 파일의 내용이 아래와 같이 되었다.

Coding Everybody!!Coding Everybody!!Coding Everybody!!Coding Everybody!!Coding Everybody!!Coding Everybody!!Coding Everybody!!Coding Everybody!!Coding Everybody!!Coding Everybody!!Coding Everybody!!

a 모드는 그 이름답게(appending) 파일에 내용을 추가하는 것이라는 것을 확실히 알 수 있었다. 이제 변수 f에 무엇이 담기는지를 알아볼 차례다. 내장함수 open의 설명서 초입에 아래와 같은 내용이 있었다.

 returning an object of the file type described in section File Objects.

함수 open은 객체 File을 리턴한다는 내용이다. 걸려있는 링크를 클릭해서 File 객체의 API를 파악해봤다. 그 중에 write 메소드가 있었다. 아래 내용을 통해서 객체 File의 메소드 write는 문자열을 파일에 기록할 때 사용하는 API라는 것을 확실히 알 수 있었다.

Write a string to the file.

이렇게해서 필자는 파이썬에서 파일을 제어하는 방법을 알아낼 수 있었다.

 

패키지 관리자 - PIP

패키지는 독립적으로 동작하는 응용 프로그램이나 응용 프로그램의 부품으로 사용되는 라이브러리를 포괄하는 개념이다. 패키지 관리자는 패키지를 관리해주는 도구라고 할 수 있다. PIP는 파이썬의 패키지 관리자로 파이썬으로 만들어진 소프트웨어나 파이썬에서 사용할 수 있는 각종 라이브러리를 매우 편리한 방법으로 검색, 설치, 제거 할 수 있도록 도와주는 소프트웨어다. 모바일의 앱스토어와 비슷한 역할을 한다고 생각하면 된다. 자세한 내용은 Installing the package Tools를 참고한다.

pip의 설치

pip는 운영체제마다 설치하는 방법이 다르다. 운영체제 별로 pip를 설치하는 방법을 알아보자.

a. 윈도우

윈도우에서 pip를 설치하기 위해서는 distribute를 선행 설치해야 한다. distribute를 설치하기 위해서는 우선 distribute 설치 파일을 다운로드 받는다. 링크 주소는 아래와 같다. 아래 파일을 적당한 디렉토리에 저장한다.

http://python-distribute.org/distribute_setup.py

파일이 위치하는 디렉토리로 이동한 후에 아래 명령을 실행한다.

python distribute_setup.py

distribute의 설치에 성공했다면 이번에는 pip를 설치한다. 우선 pip의 설치파일을 다운로드 받는다. 그리고 아래명령을 실행한다.

https://raw.github.com/pypa/pip/master/contrib/get-pip.py

python get-pip.py

이제 python이 설치된 디렉토리로 이동하면 Scripts라는 디렉토리가 생성되어 있을 것이다. 필자의 경우 python은 아래 경로에 위치한다.

C:\Python27

Scripts 디렉토리로 이동하면 pip.exe 파일이 있어야 한다. 이 파일을 이용하면 된다.

아래와 같은 오류가 발생 한다면 다음 URL에서 자신에게 맞은 버전의 Crypto를 다운받아서 설치한다.
warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath. error: Unable to find vcvarsall.bat
http://www.voidspace.org.uk/python/modules.shtml#pycrypto

b. OSX

pip를 설치하기 위해서는 distribute를 선행 설치해야 한다. distribute를 설치해보자. 터미널을 실행하고 아래 명령을 실행한다.

curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py

distribute가 설치 되었다면 아래 명령을 입력해서 pip를 설치한다. (최신버전을 확인한다.)

curl -O http://pypi.python.org/packages/source/p/pip/pip-0.7.2.tar.gz
tar xzf pip-0.7.2.tar.gz
cd pip-0.7.2
sudo python setup.py install

c. 리눅스 (우분투)

리눅스에서는 위와 OSX와 같은 방법으로 설치하면 되지만 리눅스 배포판에 따라서 운영체제의 패키지 관리자가 있다면 그것을 사용한다. 필자는 ubuntu의 패키지 관리자인 apt-get을 이용해서 pip를 설치하겠다. 아래의 명령을 실행한다.

sudo apt-get install python-pip

pip의 사용

pip를 이용해서 라이브러리를 다운로드&설치 후에 이것을 파이썬 에플리케이션에서 사용하는 방법을 알아보자.

1. 라이브러리 검색

Markdown을 html 코드로 변경해주는 라이브러리를 pip로 설치해보자.

Markdown은 간단한 마크업 언어로 html에 비해서 규칙이 간결하고 적은 타이핑으로 문서를 만들 수 있다는 장점이 있다. 위키 등에서 폭넓게 사용하고 있다. 자세한 내용은 위키피디아 참조

우선 Markdown 라이브러리가 있는지 검색해보자.

pip search Markdown

그 중에 Markdown이라는 이름의 라이브러리가 있다. 이것을 사용하자.

권한의 문제가 있다면 명령 앞에 sudo를 붙이자.

2. 라이브러리 설치

라이브러리를 설치할 때는 'pip install 패키지명'을 사용한다. 다음 명령을 실행하자.

pip install Markdown

3. 라이브러리를 코드에 적용

그럼 Markdown을 HTML로 전환하는 파이썬 에플리케이션을 만들어보자.
mark.py 라는 이름의 파일을 만들고 아래와 같이 코드를 추가한다.

import markdown
print markdown.markdown('**Excellent**')

실행 결과는 아래와 같다. 즉 인자로 전달된 **Excellent**를 HTML 코드로 전환해서 출력하고 있다.

import markdown
print markdown.markdown('**Excellent**')

라이브러리 찾기

자신에게 필요한 라이브러리를 잘 찾는 것은 중요한 일이다. 이것은 많은 지식과 경험 그리고 요령이 필요하다. 아래와 같은 방법을 고려해볼 수 있을 것 같다.

  • 봤어요 0명

댓글

댓글 본문
  1. Real
    tkMessageBox 를 쓰고싶은대 무엇을 다운받아야하나요
  2. Sungjin Gang
    UI 패키지중 요세 제가 보는
    http://kivy.org
  3. Sungjin Gang
    OS X에서 pip 를 설치하는 법은 Port와 Homebrew를 이용해서 설치할 수 있습니다.그리고 설치시.. Python의 버젼을 확인하셔야됩니다. 2.7이 기본으로 되어있는 컴퓨터에서 pip 를 기본으로 설치하시게되면 2.7용 패키지를 사용하는 pip가 설치됩니다.
    3.x로 변경하셨다면 pip도 3.x버전대로 변경을 해주셔야됩니다...