TIL - How Import Statement Finds Modules and Packages

박지훈·2022년 3월 6일
0

Python

목록 보기
5/5

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

  • sys.modules : Dictionary이면서 파이썬이 제일 먼저 확인하는 장소
  • sys.path : List이면서 파이썬이 제일 마지막에 확인하는 장소

2. 파이썬은 sys 모듈의 위치를 어떻게 찾을 수 있을까

sys.modules를 출력해보면 확인할 수 있다.
'sys':<module 'sys'(built-in)> < 이와 같이 dictionary형태로 sys가 저장되어있다.

3. Absolute path와 Relative path의 차이점

  • Absolute path :

    • import된 리소스의 위치를 언제나 명확하게 알 수 있다.
    • 경로가 길어질 수 있다.
  • Relative path :

    • 간결하게 사용할 수 있다.
    • 가독성이 떨어지고, 위치가 바뀔 시 오류가 생길 가능성도 존재한다.

4. main module 에서는 패키지의 모듈을 어떻게 임포트할까

  • main.py에서 상대경로로 add_and_mutiply 를 임포트 했을 때 발생하는 에러

이 문제를 해결하기 위해 파이썬 공식 문서에 있는 부분을 확인하면, "메인 모듈의 이름은 항상 "main"이기 때문에, 파이썬 어플리케이션의 메인 모듈로 사용하려는 모듈은 항상 absolute imports를 사용해야한다." 라는 정보를 확인할 수 있다.

5. add_and_multiply.py에서 multiply함수를 절대경로와 상대경로도 각각 임포트

  • 절대경로
from calculator.multiplication import multiply
def add_and_multiply(a,b):
    return multiply(a,b) + (a+b)
    
>>> python main.py
5
  • 상대경로
from .multiplication import multiply
def add_and_multiply(a,b):
    return multiply(a,b) + (a+b)
    
>>> python main.py
5

add_and_multiply.py는 calculator 패키지에 있는 모듈이기 때문에 절대경로와 상대경로 모두 원하는 값이 main.py에서 출력될 수 있다.

6. init.py

  • 이 파일이 존재하는 디렉터리가 패키지임을 명시
  • python3.3 버전부터는 init.py 파일이 없어도 패키지로 인식한다. 하지만 하위 버전 호환을 위해 init.py 파일을 생성하는 것이 안전한 방법

0개의 댓글