[Python] calculator 패키지

그냥·2022년 5월 27일
0

python

목록 보기
8/9

caculator 패키지의 파일 구성




상대 경로로 main.py 실행 시 발생하는 오류

# main.py
# relative path
from .calculator.add_and_multiply import add_and_multiply

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

main.py를 (from .calculator.add_and_multiply import add_and_multiply) 같이 상대 경로로 패키지를 실행했을 때아래와 같은 에러가 발생한다.


Traceback (most recent call last):
  File "abc/main.py", line 5, in <module>
    from .calculator.add_and_multiply import add_and_multiply
ImportError: attempted relative import with no known parent package


--- ## 에러가 발생한 원인 > Note that relative imports are based on the name of the current module. Since the name of the main module is always "__main__", (파이썬 공식 문서)

원인은 python interpreter는 상대 경로로 모듈을 import 할 때 위치를 정할 때, 기준이 되는 모듈의 위치가 (name)속성에 의해 결정된다. 그런데 (main) 으로 작성되어 있으므로 파이썬 interpreter는 알 수 없어서 에러가 발생한다.



---

해결방법

modules intended for use as the main module of a Python application must always use absolute imports. (파이썬 공식 문서)

  • 절대경로를 사용하여 import 한다.


---

add_and_multiply.py에서 절대경로와 상대경로로 multiply 함수를 import한 결과

  • 절대경로 사용

    오류 미발생

  • 상대경로 사용
    multiplication
  • .multiplication

오류 발생

multiplication.py는 add_and_multiply.py와 같은 경로상에 있으므로 .을 사용하면 오류가 발생한다.




init.py의 용도

init.py파일은 해당 경로가 패키지의 일부임을 알려주는 역할을 한다. 만약 calculator 패키지 안에 init.py가 없다면 안에 있는 calculator를 패키지를 인식하지 않는다.

python3.3부터는 init.py 파일이 없어도 패키지로 인식하지만, 하위 버전 호환을 위해서 init.py 파일을 생성하는 것이 좋다.

0개의 댓글