Modules and Packages

isy·2022년 4월 3일
0

TIL

목록 보기
7/7

sys.modules vs. sys.path

파이썬 모듈/패키지 찾는 순서
1. sys.mmodules
2. built-in modules
3. sys.path

sys.modules

  • 파이썬이 모듈이나 패키지를 찾을 때 가장 먼저 확인하는 곳
  • dictionary
  • 이미 import된 모듈과 패키지들을 저장하고 있다 -> 새로 import 하는 모듈은 sys.modules에서 못 찾음

sys.path

  • 파이썬이 모듈이나 패키지를 찾을 때 마지막으로 확인하는 곳
  • (string요소를 가지고 있는)list

sys 모듈 위치 찾는 방법

sys는 파이썬에 포함되어 있는 모듈이기 때문에 sys 모듈을 import해서 sys.modules와 sys.path를 출력, 수정이 가능

import sys

print(sys.path)
print(sys.modules)

Absolute Path vs. Relative Path

Absolute path

  • 절대 경로
  • import하는 파일이나 경로에 상관없이 항상 경로가 동일
  • 경로들의 시작점이 프로젝트의 최상위 디렉토리에서 시작
  • 경로가 길어질 수 있는 단점이 있음

Relative Path

  • import하는 위치를 기준으로 경로를 정의
  • 로컬 패키지 안에서 다른 로컬 패키지를 import할 때 사용

-> 일반적으로 절대 경로 사용

calculator 패키지

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

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

ImportError: attempted relative import with no known parent package
->부모 패키지가 없는 상태에서 상대 경로로 import시도해서 발생한 에러

해결방법
메인모듈로 사용하려는 모듈은 항상 절대 가져오기를 사용!!!!
from .calculator.add_and_multiply import add_and_multiply
에서
from calculator.add_and_multiply import add_and_multiply로 변경하니 아래 사진과 같이 오류가 없어짐

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

상대경로로 임포트했을 때 에러가 나옴
메인모듈을 기본 모듈로 사용하기 위해서는 절대경로 사용

init.py 파일의 역할

init.py 파일에 코드가 없어도 해당 디렉토리가 패키지임을 알려준다

0개의 댓글