🔥 How Import Statement Finds Modules & Packages 🔥

18기 이성목·2021년 2월 24일
0

sys.modules 와 sys.path의 차이점을 서술해 주세요.

sys.modules과 sys.path는 파이썬이 모듈이나 패키지를 찾는 곳 이다. (built-in modules도 있다).

sys.modules는 이미 import된 모듈과 패키지를 저장하는 dictionary이다. 이미 import된 모듈과 패키지를 다시 찾지 않아도 된다 (새로 import된 모듈은 찾을수 없다).

sys.path는 파이썬이 모듈이나 package를 찾을때 가장 마지막으로 보는 장소이다. sys.path는 string요소들을 가지고 있는 list이다.

sys 도 import 해야하는 모듈입니다. 파이썬은 sys 모듈의 위치를 어떻게 찾을 수 있을까요?

파이썬은 이미 sys가 포함되어있기때문에 모듈의 위치를 찾을필요가 없다.

import sys

Absolute path와 relative path의 차이점을 서술해 주세요.

built-in 모듈과 pip를 통해 설치한 module과 package를 import할때는 문제가 없지만, local package를 import할때, import경로를 잘 선언하는것이 중요하다. local package를 import하는 방법에는 absolut path와 relative path가 있다.

Absolute Path는 말그대로 절대 경로이다. import을 하는 파일이나 경로 상관없이 항상 동일한 경로이다.

Relative Path는 import하는 위치를 기준으로 경로를 정의한다. 주로, 한 local package에서 다른 local package를 import할때 쓰인다.

Relative path는 선언해야 하는 경로의 길이를 줄여준다는 장점은 있지만 헷갈리기 쉽고 파일 위치가 변경되면 경로 위치도 변경되어야 하는 단점이 있다. 그러므로 웬만한 경우 absolute path를 사용하는걸 권장한다고 한다.

calculator 패키지 만들기

main.py에서 상대경로로 add_and_mutiply 를 임포트 했을 때 발생하는 에러를 확인하고 다음의 파이썬 공식 문서를 참고해서 main module 에서는 패키지의 모듈을 어떻게 임포트 해야하는지 블로깅 해주세요.

ValueError: Attempted relative import in non-package

참조:https://docs.python.org/3/tutorial/modules.html#intra-package-references

python 공문 6.4.2. Intra-package References에 보면,

Note that relative imports are based on the name of the current module. Since the name of the main module is always "main", modules intended for use as the main module of a Python application must always use absolute imports.

main module의 이름은 무조건 "main"이여서 파이썬 application의 main module이 될 module들은 absolute import 이용해야한다는 것이다. 즉, ' . '을 없애고 absolute import으로 import하는게 맞다.

add_and_multiply.py에서 multiply함수를 절대경로와 상대경로도 각각 임포트 해보고 main 모듈과 차이점을 생각해보고 결과를 출력해 보세요.

absolute path 결과

from multiplication import multiply

relative path는 에러가 난다.

ImportError: attempted relative import with no known parent package

파이썬은 relative path로 package와 module을 함수로쓰는걸 못한다고한다.

init.py 파일의 역할에 대해서도 정리해서 블로깅 해주세요.

init.py는 폴더가 패키지로 인식하도록 도와주는 역할을한다.

0개의 댓글