본문 바로가기
프로그래밍/Python

파이썬 문법 8 - 모듈(module)과 패키지(package) 사용하기

by pentode 2018. 4. 9.

지금까지 파이썬 프로그램을 실행해 볼 때 인터프리터를 사용해서 실행을 시켜봤습니다. 이 경우 인터프리터를 종료하면 작성한 내용이 모두 사라져 버립니다. 작성된 프로그램을 보존하기 위해서 프로그램의 내용을 텍스트 파일에 적어 보존 할 수 있는 방법이 모듈입니다. 이런 모듈들이 많아지면 모듈들을 잘 분류해서 모아둔 패키지를 만들어서 사용하게 됩니다.

 

파이썬 내에서 이미 만들어서 제공되는 유용한 패키지들이 많이 있습니다. 하지만 자신이 만들어서 써야할 경우도 많이 있습니다.  모듈과 패키지를 만들고 사용하는 방법을 알아보겠습니다.

 

 

1. 모듈

파이썬 모듈은 전역변수, 함수등 을 모아둔 파일 입니다.

 

1.1 모듈 만들기

food 라는 모듈명으로 cook(), eat() 라는 함수를 가지는 모듈을 food.py 파일에 만듭니다. 즉, 파일명이 모듈명이 됩니다. 모듈내에서 __name__ 라는 전역변수가 모듈의 이름을 나타내게 됩니다. 이런 모듈들을 모아 패키지를 만들게 됩니다. 패키지는 나중에 설명하겠습니다.

 

예) food.py 의 내용

 

name = "홍길동"

def cook():
	print("요리하다.")

def eat():
	print("먹다.")

 

1.2 모듈 사용하기

 

이제 인터프리터를 실행하고 다음을 실행해 보겠습니다.

 

>>> import food
>>> food.cook()
    요리하다.
>>> food.eat()
    먹다.
>>> food.__name__
    'food'
>>> food.name
    "홍길동"

 

python import

 

import food 명령으로 모듈을 사용할 수 있습니다. 이때 모듈내의 개체를 식별하기 위해서는 "모듈명.함수명" 등으로 사용됩니다. 모듈을 가져오는 른 형태로 개체를 직접 지정을 할 수도 있습니다.

 

모듈을 임포트 하는 또 다른 방법으로 from food import cook 또는 from food import * 처럼 할 수 있습니다. from 모듈명 import 속성명 또는 *  형식으로 쓰면 사용할 때 속성을 바로 사용할 수 있습니다. * 을 사용하면 모듈내의 언더스코어(_)로 시작하는 것을 제외한 모든 속성을 임포트하게 됩니다.

 

>>> from food import cat
>>> cook()
    요리하다.

 

 

1.3 스크립트로 실행하기

위의 food.py 파일의 끝에 다음의 내용을 추가합니다.

 

if __name__ == "__main__":
    cook()

 

이 구문은 모듈을 명령행으로 실행할 때 바로 실행되는 코드를 지정하는 부분이 되겠습니다. 모듈로써 import 할때는 실행되지 않습니다.

 

C:\data>python food.py
요리하다.

C:\data>

 

1.4 모듈의 위치

모듈을 불러쓰기 위해서는 모듈을 어디 있는지 알아야겠죠. 파이썬에서 모듈을 어디에서 찾는지 알아보겠습니다.

 

첫 번째는 프로그램이 실행된 디렉토리내에서 모듈을 찾는다.

두 번째는 PYTHONPATH 라는 환경변수에 지정된 디렉토리에서 찾습니다.

세 번째는 파이썬 라이브러리 디렉토리에서 찾습니다. 이곳은 파이썬을 설치한곳 아래 Lib 디렉토리 입니다.

 

 

2. 패키지

패키지는 모듈을 디렉토리형식으로 구조화한 것입니다.

 

2.1 패키지 만들기

모듈들은 넣어둔 디렉토리명이 패키지명이 됩니다.

 

패키지내 각 디렉토리에는 __init__.py 가 반드시 존재해야 합니다. __init__.py 파일은 비어있을수도 있고, 패키지내에 포함된 모듈들의 정보를 제공하기도 합니다.

 

예) food 패키지 구조

 

food +-- plant +-- fruit     +-- __init__.py
     |         |             +-- pear.py
     |         |             +-- apple.py
     |         |             +-- banana.py
     |         |
     |         +-- vegetable +-- __init__.py
     |                       +-- cabbage.py
     |                       +-- spinach.py
     |
     +-- meat  +-- __init__.py
     |         +-- beef.py
     |         +-- pork.py
     |
     +-- __init__.py
     +-- breakfast.py
     +-- lunch.py
     +-- dinner.py

 

food 패키지 아래에는 breakfast, lunch, dinner 세개의 모듈이 있습니다. food 아래에 __init__.py 파일내에는 __all__, __version__ 등이 들어갑니다.

 

예) __all__ = ["breakfast","lunch","dinner"]

 

__all__ import * 했을때 어떤 모듈을 임포트 할지 정의합니다. import food 하게 되면 food 패키지 내의 모든 모듈들이 임포트되지만 하위 패키지의 모듈은 임포트 되지 않습니다. 사용할때는 직접 임포트 해야 합니다.

 

예) import food.meat

 

패키지 구조내에서 다른 패키지의 모듈을 사용하고자 할 경우에는 "." 을 사용해서 참조할 수 있습니다. cabbage 모듈에서 paer 모듈을 사용하기 위해서는 다음과 같이 사용할 수 있습니다.

 

from ..furit import pear 혹은 from food.plant.fruit import pear

 

지금까지 파이썬의 모듈과 패키지를 사용하는 방법을 알아봤습니다.

 

반응형