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))
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 모듈의 경로를 명시한 뒤 실행하면 에러 없이 결과값이 나온다.
# 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 module
인 add_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__
파일은 해당 디렉토리가 패키지임을 알려주는 역할을 한다.
예전에 배웠던 css의 position:absoulte,
position:relative
혹은
html에서 css파일 혹은 script의 경로를 지정할 때의 '상대경로', '절대경로'를 생각하면 이해가 쉬운것 같다.
이어지는 배움의 덕목 아주 조왕