위와 같이 sum 함수만 있는 파일 mod1.py를 만들고 C:\Python 디렉터리에 저장하자. 이 파일이 바로 모듈이다. 지금까지 에디터로 만들어 왔던 파일과 다르지 않다.
우리가 만든 mod1.py라는 파일, 즉 모듈을 파이썬에서 불러와 사용하려면 어떻게 해야 할까? 먼저 아래와 같이 도스 창을 열고 mod1.py를 저장한 디렉터리(이 책에서는 C:\Python)로 이동한 다음 대화형 인터프리터를 실행한다.
Last login: Thu Jan 26 15:04:17 on ttys000
Lakos-iMac:~ Lako$ cd desktop
Lakos-iMac:desktop Lako$ python3
Python 3.6.0 (v3.6.0:41df79263a11, Dec 22 2016, 17:23:13)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import mod1
>>> print(mod1.sum(3,4))
7
>>>
오예
[모듈 함수를 사용하는 또 다른 방법]
때로는 mod1.sum, mod1.safe_sum처럼 쓰지 않고 그냥 sum, safe_sum처럼 함수를 쓰고 싶은 경우도 있을 것이다. 이럴 때는 "from 모듈이름 import 모듈함수"를 사용하면 된다.
from 모듈이름 import 모듈함수
from mod1 import *
두 번째 방법은 위와 같이 * 문자를 사용하는 방법이다. 07장에서 배울 정규 표현식에서 * 문자는 "모든것"이라는 뜻인데 파이썬에서도 마찬가지 의미로 사용된다. 따라서 from mod1 import *는 mod1.py의 모든 함수를 불러서 사용하겠다는 말이다.
mod1.py 파일에는 함수가 2개밖에 없기 때문에 위의 2가지 방법은 동일하게 적용된다.
# mod1.py
def sum(a, b):
return a+b
def safe_sum(a, b):
if type(a) != type(b):
print("더할수 있는 것이 아닙니다.")
return
else:
result = sum(a, b)
return result
print(safe_sum('a', 1))
print(safe_sum(1, 4))
print(sum(10, 10.4))
Lakos-iMac:desktop Lako$ python mod1.py
더할수 있는 것이 아닙니다.
None
5
20.4
Lakos-iMac:desktop Lako$
엉뚱하게도 import mod1을 수행하는 순간 mod1.py가 실행이 되어 결과값을 출력한다. 우리는 단지 mod1.py 파일의 sum과 safe_sum 함수만 사용하려고 했는데 말이다. 이러한 문제를 방지하려면 다음처럼 하면 된다.
if __name__ == "__main__":
print(safe_sum('a', 1))
print(safe_sum(1, 4))
print(sum(10, 10.4))
if __name__ == "__main__"을 사용하면 C:\Python>python mod1.py처럼 직접 이 파일을 실행시켰을 때는 __name__ == "__main__"이 참이 되어 if문 다음 문장들이 수행된다. 반대로 대화형 인터프리터나 다른 파일에서 이 모듈을 불러서 사용할 때는 __name__ == "__main__"이 거짓이 되어 if문 다음 문장들이 수행되지 않는다.
파이썬 모듈을 만든 다음 그 모듈을 테스트하기 위해 보통 위와 같은 방법을 사용하는데, 실제로 그런지 대화형 인터프리터를 열고 실행해 보자.
#__name__ ==“__main__"??
# mod2.py
PI = 3.141592
class Math:
def solv(self, r):
return PI * (r ** 2)
def sum(a, b):
return a+b
if __name__ == "__main__":
print(PI)
a = Math()
print(a.solv(2))
print(sum(PI , 4.4))
>>> print(mod2.PI)
3.141592
위의 예에서 볼 수 있듯이 mod2.PI처럼 입력해서 mod2.py 파일에 있는 PI라는 변수값을 사용할 수 있다.
>>> a = mod2.Math()
>>> print(a.solv(2))
12.566368
위의 예는 mod2.py에 있는 Math 클래스를 사용하는 방법을 보여 준다. 위의 예처럼 모듈 내에 있는 클래스를 이용하려면 '.'(도트 연산자)를 이용하여 클래스 이름 앞에 모듈 이름을 먼저 입력해야 한다.
>>> print(mod2.sum(mod2.PI, 4.4))
7.541592
# modtest.py
import mod2
result = mod2.sum(3, 4)
print(result)
위에서 볼 수 있듯이 파일에서도 import mod2로 mod2 모듈을 불러와서 사용하면 된다. 대화형 인터프리터에서 한 것과 마찬가지 방법이다. 위의 예제가 정상적으로 실행되기 위해서는 modtest.py 파일과 mod2.py 파일이 동일한 디렉터리에 있어야 한다.
[모듈을 불러오는 또 다른 방법]
우리는 지금껏 도스 창을 열고 모듈이 있는 디렉터리로 이동한 다음에나 모듈을 사용할 수 있었다. 이번에는 모듈을 저장한 디렉터리로 이동하지 않고 모듈을 불러와서 사용하는 방법에 대해서 알아보자.
우선 이전에 만든 mod2.py 모듈을 C:\Python\Mymodules라는 디렉터리를 새로 생성해서 저장한 후 다음의 예를 따라 해보자.
1. sys.path.append(모듈을 저장한 디렉터리) 사용하기
먼저 sys 모듈을 불러온다.
>>> import sys
sys 모듈은 파이썬을 설치할 때 함께 설치되는 라이브러리 모듈이다. sys에 대해서는 뒤에서 다시 다룰 것이다. 이 sys 모듈을 이용해서 파이썬 라이브러리가 설치되어 있는 디렉터리를 확인할 수 있다.
다음과 같이 작성해 보자.
>>> sys.path
['', 'C:\\Windows\\SYSTEM32\\python35.zip', 'c:\\Python35\\DLLs',
'c:\\Python35\\lib', 'c:\\Python35', 'c:\\Python35\\lib\\site-packages']
sys.path는 파이썬 라이브러리들이 설치되어 있는 디렉터리들을 보여 준다. 만약 파이썬 모듈이 위의 디렉터리에 들어 있다면 모듈이 저장된 디렉터리로 이동할 필요없이 바로 불러서 사용할 수가 있다. 그렇다면 sys.path에 C:\Python\Mymodules라는 디렉터리를 추가하면 아무데서나 불러 사용할 수 있지 않을까?
(※ 도스 창에서는 /, \든 상관없지만, 소스코드 안에서는 반드시 / 또는 \\ 기호를 사용해야 한다.)
당연하다. sys.path의 결과값이 리스트이므로 우리는 다음과 같이 할 수 있을 것이다.
>>> sys.path.append("C:/Python/Mymodules")
>>> sys.path
['', 'C:\\Windows\\SYSTEM32\\python35.zip', 'c:\\Python35\\DLLs',
'c:\\Python35\\lib', 'c:\\Python35', 'c:\\Python35\\lib\\site-packages',
'C:/Python/Mymodules']
>>>
sys.path.append를 이용해서 C:/Python/Mymodules라는 디렉터리를 sys.path에 추가한 후 다시 sys.path를 보면 가장 마지막 요소에 C:/Python/Mymodules라고 추가된 것을 확인할 수 있다.
자, 실제로 모듈을 불러와서 사용할 수 있는지 확인해 보자.
>>> import mod2
>>> print(mod2.sum(3,4))
7
이상 없이 불러와서 사용할 수 있다. 이렇게 특정한 디렉터리에 있는 모듈을 불러와서 사용하고 싶을 때 사용할 수 있는 것이 바로 sys.path.append(모듈을 저장한 디렉터리)이다.
2. PYTHONPATH 환경 변수 사용하기
모듈을 불러와서 사용하는 또 다른 방법으로는 PYTHONPATH 환경 변수를 사용하는 방법이 있다.
다음과 같이 따라 해보자.
C:\Users\home>set PYTHONPATH=C:\Python\Mymodules
C:\Users\home>python
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) [MSC v.1900 64 bit (AM...
Type "help", "copyright", "credits" or "license" for more information.
>>> import mod2
>>> print(mod2.sum(3,4))
7
set 도스 명령어를 이용해 PYTHONPATH 환경 변수에 mod2.py 파일이 있는 C:\Python\Mymodules 디렉터리를 설정한다. 그러면 디렉터리 이동이나 별도의 모듈 추가 작업 없이 mod2 모듈을 불러와서 사용할 수 있다.