How import statement finds modules and packages(2)

97woo·2022년 2월 3일
0

지난 시간에는 경로에 대해서 까지 정리해 봤기떄문에 이번에는 패키지를 만들어 보겠습니다

1.calculator 패키지 만들기

위와 같은 구조로 생성한다.

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__으로 바뀌어버린 모듈은 파이썬이 위치를 찾을수 없기때문에 절대경로로 바꾸어서 사용해주어야 한다.

add_and_multiply.py에서 multiply함수를 절대경로와 상대경로

실행시 파이썬이 이미 자기 자신은 메인 모듈로 생각하는 것 같다
그래서 상단 패키지인 calculcator에 포함됨으로? multiplication 에 모듈로 접근하며 된다.

상대경로에서 (.) 점 삭제 == 여기서 점은 import가 선언되는 add_and_multiply.py를 뜻하며
최상단 패키지 calculator에 포함되어있으므로 바로 multiplication 에 모듈로 접근하며 된다.

단독 실행시 main.py 자기자신 main으로 인식하게된다
main모듈이 아님에도 불구하고 인식하므로
상대경로를 사용 할 수 없는 것 같다

__init__.py 파일의 역할

패키지로 인식되도록 하는 역활을 한다.

profile
한 발씩 나아가는중

0개의 댓글