본문 바로가기

프로그래밍/Python

[요약] 파이썬(Python) - 모듈과 패키지 개념 이해

[요약] 파이썬(Python) - 모듈과 패키지 개념 이해

모듈 : 하나의 파이썬 파일 단위로 인식하면 됨

패키지 : 모듈들의 묶음으로 디렉토리 개념으로 인식


패키지를 지정하기 위한 디렉토리 구분자중

.. : 부모디디렉토리

.  : 현재 디렉토리


예제를 위한 파일선 모듈 생성

1. fibonacci.py : 피보나치 수열을 계산하는 클래스 작성 모듈

2. calc1.py : 사칙연산을 위한 함수 모음 모듈

3. prints.py : 출력 테스트를 위한 함수 모듈


생성된 모듈 파일들을 ./pkg 디렉토리에 모두 저장(pkg 패키지라 명명)

mkdir pkg


* 각 모듈에 대한 테스트를 위해  모듈 최 하단에 다음 문구 아래 테스트 코드를 넣을 수 있다.

if __name__ == "__main__":   # 이 파일을 직접 실행할 경우에만 (import가 아닌) 다음 명령이 실행됨.
    print('단위모듈 테스트')

파이썬 모듈 import의 특징

    DLL처럼 사용할 클래스 / 함수 선택적인 import가 가능하다.

      from pkg.fibonacci import * # 모듈내 클래스 또는 함수 모두 사용

      from pkg.fibonacci import Fibonacci # 모듈내 지정된 클래스만을 사용

      from pkg.calc1 import div as d   # 모듈의 div 함수만 d로 별칭(Alias)로 import 시킨다


모듈파일 생성

1. fibonacci.py : 피보나치 수열을 계산하는 클래스 작성 모듈

class Fibonacci:
    def __init__(self, title="fibonacci"):
        self.title = title
    
    def fib(n):
        a, b = 0, 1
        while a < n:
            print(a, end=' ')
            a,b = b, a+b
        print()

    def fib2(n):
        result = []
        a, b = 0, 1
        while a < n :
            result.append(a)
            a,b = b, a+b
        return result

2. calc1.py : 사칙연산을 위한 함수 모음 모듈

def add(l, r):
    return l + r

def mul(l, r):
    return l * r

def div(l, r):
    return l / r

3. prints.py : 출력 테스트를 위한 함수 모듈

def print1() :
    print("I'm Niceday!'")

def print2() :
    print("I'm GoodDay")


# 단위테스트를 위한 방법
# 독립적으로 파일 실행

if __name__ == "__main__":   # 이 파일을 직접 실행할 경우에만 (import가 아닌) 다음 명령이 실행됨.
    print('단위모듈 테스트')


패키지를 호출할 메인 프로그램 모듈

moduletest.py

# 파이썬 모듈과 패키지의 개념

# 패키지 예제
# 상대경로
#   ..  : 부모디렉토리
#   .   : 현재경로

# 예1)

from pkg.fibonacci import Fibonacci # 모듈내 지정된 클래스만을 사용

Fibonacci.fib(300)                  # 0 1 1 2 3 5 8 13 21 34 55 89 144 233 

print('ex1 : ', Fibonacci.fib2(400))    # ex1 :  [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
print('ex1 : ', Fibonacci().title)      # ex1 :  fibonacci

# 예2) - 비사용 권장
from pkg.fibonacci import * # 모듈내 모든 클래스 사용 가능

Fibonacci.fib(500)                  # 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

print('ex2 : ', Fibonacci.fib2(600))# ex1 :  [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
print('ex2 : ', Fibonacci().title)  # ex1 :  fibonacci

# 예3) Alias 사용 - 권장

from pkg.fibonacci import Fibonacci as fb

fb.fib(1000)                  # 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

print('ex3 : ', fb.fib2(1200))# ex1 :  [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
print('ex3 : ', fb().title)  # ex1 :  fibonacci

# 예4) - 함수사용

import pkg.calc1 as c

print('ex4 : ', c.add(10, 100)) # 110
print('ex4 : ', c.mul(10, 100)) # 1000

# 예5) 

from pkg.calc1 import div as d   # 모듈의 div 함수만 d로 별칭으로 import 시킨다

print('ex5 : ', int(d(100, 10)))    # 10

# 예6)

import pkg.prints as P
import builtins  # 기본 패키지는 import하지 않아도 자동으로 import됨

# 특정 디렉토리를 패키지로 인식시키기 위하여 __init__.py  빈 파일을 만들어야 함(파이선 2.0 하위호환)
# 현재 버전에서는 __init__.py 파일이 없어도 관계 없다.