2010년 12월 27일 월요일

python

[ 대화식 모드에서 혹은 다른 모듈에서 모듈 파일 실행하기 ]

파이썬 인터프리터 안에서 모듈 파일(파일로 만들어진 프로그램)을 수행하기 위한 방법은 다음 두가지가 있다.

우선 다음과 같은 modfile.py 모듈 파일이 만들어져 있다고 하자. (파이썬 모듈 파일 이름은 .py로 끝나야한다)


------------------------------------------------------------------------
#!/usr/bin/env python
#file: modfile.py

s = 'module file sample'

def add(a,b):
return a+b

print add(3,4)
------------------------------------------------------------------------------------

===== execfile 이용하기 =====

사용되는 빈도수는 작지만, 파이썬 인터프리터 안에서 파일을 수행한다면 'execfile'을 이용할 수 있다.

------------------------------------------------------------------------------------
>>> execfile('modfile.py')
7
>>> s
'module file sample'
>>> add(5,6)
11
>>>
------------------------------------------------------------------------------------

※ 만일 'execfile' 을 수행했을 때 다음과 같은 에러 메시지를 보게 된다면 저당된 모듈 파일의 위치를

차지 못했기 때문이다.

Traceback (innermost last):
FILE line 1, in?
execfile('modfile.py')
IOError : [Errno 2] No such file or directory

위와 같은 에러 발생시 세가지 해결 방법이 있다고 한다.


*************************************************************

1. 모듈 파일을 파이썬 인터프리터가 찾을 수 있는 디렉토리로 이동시키거나

2. 파이썬 인터프리터에게 모듈 파일이 저장된 디렉토리를 알려주는 것이다.

3. PYTHONPATH 환경변수를 변경한다. (전 장에서 했음)

*************************************************************

파이썬 인터프리터가 찾을 수 있는 디렉토리 목록을 알아보기 위해선 아래와 같이 한고 한다.

>>> import sys
>>> sys.path
['', '/usr/lib/python2.2', '/usr/lib/python2.2/plat-linux2', '/usr/lib/python2.2/lib-dynload',

'/usr/lib/python2.2/site-packages', '/usr/lib/python2.2/site-packages/gtk-2.0']
>>>

만약 첫번째 방법으로 해결 하려면 'modfile.py' 를 위에서 보인 목록 중 한 디렉토리로 이동하는 것이다.

(사실 이것은 임시적인 파일을 실행시키기에는 별로 좋은 방법이 아니다.) 이동하는 디렉토리가 시스템에서만

사용하는 장소가 되지 않도록 조심하라.

두 번째 방법은 다음과 같이 한다.

>>> import sys
>>> sys.path.append('디렉토리 경로명')

------------------------------------------------------------------------------------


===== import로 수행하기 =====

가장 많이 사용되는 방법이다. 'import'를 사용하며 그 모듈에 있는 모든 전역 이름들을 모듈 이름을

통하여 사용할 수 있다.

------------------------------------------------------------------------------------
>>> import modfile
7
>>> modfile.s
'module file sample'
>>> modfile.add(6,7)
13
>>>
------------------------------------------------------------------------------------

위의 두 방법은 대화식 인터프리터에서만 수행할 수 있는 것은 아니다. 두 가지 모두 파이썬 문으로

표현된 것이므로 다른 모듈 파일에서도 사용이 가능하다.