Python: Module

BY Jung·2021년 12월 4일
0
post-custom-banner

1. sys.modules와 sys.path 차이점

sys.modules

  • 파이썬이 모듈이나 package를 찾기 위해 가장 먼저 확인
  • 단순한 dictionary로 import된 모듈과 package가 저장되어 있음
  • 새로 import된 모듈은 sys.modules에서 찾을 수 없다

sys.path

  • sys.modules > built-in modules에 이어 가장 마지막으로 파이썬이 확인하는 장소
  • list로서 string 요소들을 내포하며, 각 string 요소들은 package가 위치해 있는 파일 경로를 가짐

종합
파이썬은 import 하려는 모듈과 package를 찾을 때 우선 sys.modules을 확인하고 파이썬의 built-in modules를 확인, 마지막으로 sys.path에 지정되어 있는 경로들을 확인해서 찾는다

2. sys 모듈의 위치

파이썬에 포함되어 있는 내장 모듈로 설치 시 자동적으로 경로값이 설정되어 있음

3. Absolute Path와 Relative Path

Absolute Path

  • 최상위 디렉토리에서 시작하여 찾고자하는 디렉토리까지 찾는 방식
  • 항상 방향이 동일하므로 absolute path라 표현
  • 경로가 길어질 경우 호출하기 위한 명령어 또한 길어짐

Relative Path

  • import하는 현 위치를 기준으로 경로를 정의
  • local package안에서 다른 local package를 import할 때 사용
  • 상위 디렉토리로 이동할 시 .. 를 사용

4. calculator 패키지

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

ImportError: attempted relative import with no known parent package
Relative path로 모듈을 불러올 경우 위와 같은 에러가 출력된다.

그 이유는

Relative path는 항상 현 위치를 기준으로 import를 시작하며, 우린 import 경로의 최상위 디렉토리에 있는 main.py에서 import를 시작하였다.
어떤 모듈이나 패키지의 기본이 되는 main 모듈의 이름은 항상 __main__이므로 relative path를 사용할 수 없으며, absolute path를 사용해야 하는 것으로 해석된다.

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

기본 모듈이 되는 main.py만 절대경로로 import한다는 전제 하에 add_and_multiply.py는 절대경로와 상대경로 둘 중 어느 하나를 골라도 차이가 없음을 확인하였다.

7. __init__.py 파일의 역할


init.py는 특별한 코드를 갖고 있지 않지만 calculator의 하위 디렉토리가 패키지임을 명시한다.

profile
Slow and steady wins the race
post-custom-banner

0개의 댓글