[Python] 패키지 생성과 import

손종일·2020년 8월 21일
0

Python

목록 보기
9/13
post-thumbnail

caculator 패키지 생성

아래와 같은 구조로 caculator 패키지를 생성해 보았다.

└── caculator
        ├── __init__.py
        ├── add_and_multiply.py
        └── multiplication.py
----------------------------------------------------------------   
**1. main.py 의 실행**

# main.py

# absoulte path
from calculator.add_and_multiply import add_and_multiply  //5

# relative path
# from .calculator.add_and_multiply import add_and_multiply 
//상대 경로 지정시 ImportError: attempted relative import with no known parent package 에러 발생

if __name__ == '__main__':
    print(add_and_multiply(1,2))
----------------------------------------------------------------
**2. add_and_multiply.py의 실행**

# add_and_multiply.py

from .multiplication import multiply

# from multiplication import multiply

# from calculator.multiplication import multiply
def add_and_multiply(a,b):
    return multiply(a,b) + (a+b)
---------------------------------------------------------------- 
#multiplication.py

def multiply(a,b):
    return(a*b)

1. main.py 실행 시 상대 경로로 지정시 오류가 발생하는 이유는?

그 이유는 앞의 블로그 내용에서 설명한 것과 같이 __name__ == '__main__' 이 됩니다. 
그러면 당연히 __main__이라는 모듈의 위치를 파이썬 interpreter는 알 수가 없기 때문에 
에러가 발생합니다. 해당 모듈을 직접 실행한 위치에서 부터인 절대 위치로 지정해주어야 정상적으로 
실행됩니다.

2. add_and_multiply.py 실행 시 절대 경로, 상대 경로 지정 후 main.py 실행의 차이는?

절대 경로 지정시 결과 : 5
상대 경로 지정시 결과 : 5

add_and_multiply 패지키 내부 파일로서 사용 당하는 모듈이다. 
main.py는 실제로 패키지와 모듈을 가져와 함수를 쓰는 파일이기 때문이다. 또한 Python 자체에서 
main 모듈에서는 상대경로로 접근하는 것을 막아 놓았으나, 다른 모듈 파일은 absolute path 또는 relative path 모두 사용 가능하다.

즉, 패키지를 만들 때, 패키지를 구성하는 그 최상위 파일의 이름은 import할때 생략합니다.

profile
Allday

0개의 댓글