지난 시간에는 경로에 대해서 까지 정리해 봤기떄문에 이번에는 패키지를 만들어 보겠습니다
위와 같은 구조로 생성한다.
main.py
#absoulte path #from calculator.add_and_multiply import add_and_multiply # relative path from .calculator.add_and_multiply import add_and_multiply if __name__ == '__main__': print(add_and_multiply(1,2))
add_and_multiply.py
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)
__init__.py (파일만 생성)
실행시 에러가 발생하는데
https://docs.python.org/3/tutorial/modules.html#intra-package-references
공식문서에서는 기본모듈에서 사용하려는 모듈은 항상 절대경로로 가져오라고 합니다.
모듈 실행시 상대경로를 통해 다른 모듈을 import할시에는
파이썬이 모듈의 이름 __name__
에 기반을 두고 현재모듈의 위치를 찾는다.
그래서 이름이 if __name__ == '__main__':
__main__
으로 바뀌어버린 모듈은 파이썬이 위치를 찾을수 없기때문에 절대경로로 바꾸어서 사용해주어야 한다.
실행시 파이썬이 이미 자기 자신은 메인 모듈로 생각하는 것 같다
그래서 상단 패키지인 calculcator에 포함됨으로? multiplication 에 모듈로 접근하며 된다.
상대경로에서 (.)
점 삭제 == 여기서 점은 import가 선언되는 add_and_multiply.py를 뜻하며
최상단 패키지 calculator에 포함되어있으므로 바로 multiplication 에 모듈로 접근하며 된다.
단독 실행시 main.py 자기자신 main으로 인식하게된다
main모듈이 아님에도 불구하고 인식하므로
상대경로를 사용 할 수 없는 것 같다
패키지로 인식되도록 하는 역활을 한다.