TIL 파이썬 04. How Import Statement Finds Modules & Packages

hmm...·2021년 5월 18일
0
post-thumbnail

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

Sys.modules

모듈과 패키지를 찾기 위해서 최우선으로 확인되는 장소를 말한다.
형태는 dictionary 형태이다.
{module name: module path}

sys.path

모듈과 패키지를 찾기 위해서 sys.modules과 built-in modules에 없을시에 최종적으로 확인되는 장소이다.

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

다음과 같은 코드를 쳐보면 알수 있다

import sys
print(sys)

<module 'sys' (built-in)>

built-in 모듈이라는걸 알 수 있다.

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

Absolute Path

절대 경로를 뜻한다.
파일과 폴더가 있는 경로를 표시하는 방법이다.

/Users/anonymous/Desktop/my_new_project/main.py

Relative Path

상대 경로를 뜻한다.

만약 위 main.py 주소중 상위 폴더인 my_new_project를 나타낸다면,

../

으로 표현할수 있다.

상위 폴더를 한 번 더 간다면,

../../

으로 표현할수 있다.

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

ImportError: attempted relative import with no known parent package

상대경로로 접근하면 에러가 뜬다. 그 이유는 main.py가 최상위 에 위치해 있기 때문이여서 절대경로로 접근해야 한다.

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

multiply 함수는 절대경로나 정상적으로 import, 실행 되었다.
하지만 상대경로는 에러가 발생했다. main.py에서는 상대경로로 접근 할 수 없다는것을 알게 되었다.

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

아무 코드가 존재하지 않는다.
Dirctory가 패키지의 일부라는것을 알려주는 역활을 한다.
최신 파이썬 버전부턴 init.py 가 필수는 아니라고는 하지만 하위호환을 위해서 필요하다.

Package가 import될때:

  • init.py 파일은 자동으로 실행된다.
  • Package 초기설정을 해준다.
profile
위코드 21기

0개의 댓글