Calculator 패키지 만들기🚀

Inah-_-·2021년 3월 2일
0

Python

목록 보기
18/21
post-thumbnail
post-custom-banner

패키지로 상대경로, 절대경로 에러 공부하기🚀

패키지 디렉토리 구성

모듈 구성

add_and_multiply.py

def add_and_multiply(a,b):
    return multiply(a,b) + (a+b)

multiplication.py

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

main.py

if __name__ == '__main__':
    print(add_and_multiply(1,2))


상대경로로 add_and_multiply import

main.py에서 상대경로로 add_and_multiply를 import했을 때 발생하는 에러

# 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))

출력시 에러가 발생한다.

from .calculator.add_and_multiply import add_and_multiply
ImportError: attempted relative import with no known parent package

참조한 python.org를 참고하여 에러를 설명하자면,

파이썬에서 상대경로로 import할 때는 기준점을 잡기 위해 __name__ 변수를 이용한다. __name__ 변수는 모듈의 이름을 저장하고 있는데,

main.py 파일에서 조건문 if __name__ == '__main__':의 의미는 현재 모듈이 main module(=시작점)일 경우에 조건을 실행하라는 뜻으로,

-m 모듈이름 명령어는 해당 모듈을 sys.path에서 검색하고 그것을 main module로 실행하라는 의미이다.

main 모듈이 있는 프로젝트 폴더 외부에서 main 모듈의 경로를 명시한 뒤 실행하면 에러 없이 결과값이 나온다.



절대경로로 add_and_multiply import

# 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))
    
# output
5

add_and_multiply.py에서 상대경로로 multiply함수 import

# from multiplication import multiply
from .multiplication import multiply

def add_and_multiply(a,b):
    return multiply(a,b) + (a+b)

print(add_and_multiply(3,9))

출력시 에러가 발생한다.

from .multiplication import multiply
ImportError: attempted relative import with no known parent package

main.py에서 상대경로로 import시 발생했던 것과 같은 에러가 뜬다.

마찬가지로 main moduleadd_and_multiply 모듈의 위치를 잡지 못해 발생하는 에러이다.


add_and_multiply.py에서 절대경로로 multiply함수 import

from multiplication import multiply
# from calculator.multiplication import multiply

def add_and_multiply(a,b):
    return multiply(a,b) + (a+b)

print(add_and_multiply(3,9))

# output
39

init.py의 역할

__init__.py 파일에는 아무코드도 없지만 __init__ 파일은 해당 디렉토리가 패키지임을 알려주는 역할을 한다.




References

참고문헌 python.org

정리

예전에 배웠던 css의 position:absoulte, position:relative 혹은
html에서 css파일 혹은 script의 경로를 지정할 때의 '상대경로', '절대경로'를 생각하면 이해가 쉬운것 같다.

이어지는 배움의 덕목 아주 조왕

profile
Backend Developer
post-custom-banner

0개의 댓글