How import statement finds modules and packages

BLAKE KIM·2020년 7월 21일
post-thumbnail

1번

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

  • sys.modules과 sys.path는 파이썬이 모듈이나 package를 찾을 때 확인하는 곳이다. 찾는 순서로는 sys.modules, built-in modules, sys.path 순서이다.

  • sys.modules는 dictionary로 이미 import된 모듈과 package를 저장하고 있다. 즉 전에 import된 것을 저장하고 있기 때문에 새롭게 import된 모듈은 sys.modules에서 찾을 수 없다.

  • sys.path는 마지막으로 보는 장소로 string 요소들을 가진 list로 이루어져 있다. 각각의 요소들은 경로를 나타내고 파이썬은 모듈을 찾을 때 해당 경로를 하나하나 확인하면서 import하고자 하는 module이나 package가 있는지 확인한다.

즉 차이점으로는 자료구조가 dictionary인지 list인지, 찾는 순서의 차이, 담고 있는 것이 직접 모듈이나 패키지인지 모듈이나 패키지를 찾을 수 있는 경로인지에 대한 차이가 있다.

2번

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

  • sys 모듈은 파이썬에 built-in 되어 있는 모듈이기 때문에 built-in modules에서 찾게 된다.

3번

Absolute path와 relative path의 차이점을 서술해 주세요.
절대 경로와 상대 경로의 차이점.

  • 절대 경로는 최상위 디렉토리에서부터 순차적으로 하나하나 경로를 지정해 주는 것이다. 경로가 길어질 수 있다는 단점이 있지만 경로에 위치한 모듈이나 패키지를 옮기지 않는 한 현재 파일의 위치가 바뀌어도 경로를 새로 지정해주지 않아도 된다.

  • 상대 경로는 현재 위치한 디렉토리를 기준으로 경로를 지정한다. 헷갈릴 수 있는 위험이 있으며 현재 파일의 위치가 변경되게 되면 경로도 수정해주어야 하는 수고를 감내해야한다. 절대 경로를 추천한다고 한다.

4번

calculator 패키지 만들기

5번

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

  • Python 응용 프로그램의 기본 모듈로 사용하려는 모듈은, 즉 main module에서는 항상 절대 경로를 사용해야한다. 다음과 같이 임포트하면 된다.

6번

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

  • add_and_multiply.py와 main.py의 차이는 위치에 있다. 그에 따른 역할의 차이가 존재한다. add_and_multiply.py는 패키지 내부 파일로 사용당하는 파일이다. 그러나 main.py는 실제로 패키지와 모듈을 가져와 함수를 쓰는 파일이다.
  • 그로 인해 단독 실행 가능 여부에 있어서도 차이를 보인다.
  • 또한 python 자체에서 import할 때 main 모듈에서는 상대 경로로 접근하는 것을 막아 놓았다.

7번

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

  • __init__.py 파일은 해당 디렉토리가 패키지의 일부임을 알려주는 역할을 한다. 해당 파일이 없다면 패키지로 인식되지 않는다.(3.3버전부터는 없어도 인식하지만 하위 버전에서는 있어야 인식한다.)
  • *을 사용하여 import할 때 import할 수 있는 모듈을 __init__.py 파일에 __all__ 변수를 설정하고 import할 수 있도록 정의해주어야 한다. 이 때 변수에 할당하는 값은 list이다.
profile
BackEnd

0개의 댓글