[python] 패키지(Package)

이번 글에서는 패키지에 대해 알아보겠습니다.

패키지는 모듈과 마찬가지로 기능별로 구별하기 위해 사용됩니다.

간략 설명

하나의 디렉토리에 놓여진 모듈들의 집할을 말합니다.
패키지 하위에 모듈이 있으며 만들어놓은 모듈들을 모아놓은 디렉토리명이 패키지명이 됩니다.
아래는 패키지와 모듈의 디렉토리 구조를 간략히 보여준 것입니다.

\

패키지 import

패키지를 import하려면 아래와 같이 사용이 가능합니다.

import 패키지.모듈
from 패키지.모듈 as 이름
from 패키지.모듈 import 함수, 변수, 클래스
패키지 만들기

패키지를 만들어 보겠습니다. 따로 예시는 하지 않고 위에서 설명한 디렉토리 구조로 만들겠습니다.
main.py 파일과 package 폴더를 만듭니다.

package 폴더 안에 module1.py, module2.py, module3.py를 만들어줍니다.

main.py, module1.py, module2.py, module3.py에 아래와 같이 코딩합니다.

# main.py
from package import module1
from package import module2
from package import module3

module1.module1_test()
module2.module2_test()
module3.module3_test()
# module1.py
def module1_test():
    print("module1")
# module2.py
def module2_test():
    print("module2")
# module3.py
def module3_test():
    print("module3")

main.py를 실행하면 아래와 같이 출력합니다.

module1이 module2를 import할 때

만약 module1에서 module2, module3의 함수를 호출하기 위해 아래와 같이 import를 하면 main.py를 실행할 때 에러가 발생할 수 있습니다.

# module1.py
import module2

def module1_test():
    print("module1")

def module2_test():
    module2.module2_test()
# main.py
from package import module1

module1.module1_test()
module1.module2_test()

module2를 찾을수 없는 에러 메시지 입니다. import는 실행하는 스크립트에 상대적경로이기 때문에 나타나는 에러입니다.
무슨 말이냐면 module1에서는 같은 위치에 있는 module2를 import할 수 있지만, main.py 입장에는 같은 폴더에 없기 때문에 에러가 발생하는 겁니다.

이 경우 from import를 사용하면 해결이 됩니다.

# module1.py
# import module2 X
from . import module2

def module1_test():
    print("module1")

def module2_test():
    module2.module2_test()

from과 import 사이에 있는 점(.)은 현재 패키지를 의미합니다.

기타

python3 이전 버전에는 package 폴더 안에 __init__.py를 만들어 넣어주어야 합니다. 이 글에서는 __init__.py는 제외하였습니다.