Modules

이강일·2022년 1월 4일
0

sys.modules 와 sys.path의 차이점

  • sys.modules

    • python이 제일 먼저 module이나 package를 찾는 곳이며, dictionary 형태로 되어 있습니다.

    • 한 번이라도 import가 된 적이 있을 경우 module이나 package를 다시 찾지 않아도 됩니다.
  • sys.path

    • pythonmodule이나 package를 찾을 때 마지막으로 보는 곳이며, list 형태로 string 요소들을 가지고 있는 list라고 생각하면 됩니다.

    • sys.path에도 발견을 하지 못할 경우 ModuleNotFoundError 에러를 발생시킵니다.

python은 sys 모듈의 위치를 어떻게 찾는가?

  • 파이썬에 포함되어 있는 내장 모듈이고, 파이썬 설치 시 기본적으로 내장 모듈에 대한 path 정보가 default 값으로 지정되어 있습니다.

Absolute path와 Relative path의 차이점

  • Absolute path

    • 절대 경로를 사용할 때는 최상단 디렉토리부터 단계적으로 진행하며 목표한 파일을 지정하는 방식으로 진행됩니다.

    • 안정적이지만 최상위 루트부터 경로를 표시해야 해서 경로를 길게 표시해야 하는 단점이 있습니다.
  • Relative path

    • 상대 경로를 사용할 때는 특정 디렉토리를 기준으로 한 경로를 통해서 파일을 지정하는 방식으로 진행됩니다. ( 특정 디렉토리는 실행파일이 위치한 디렉토리가 기준 )

    • 기준이 되는 디렉토리가 어디에 위치하냐에 따라서 지정이 까다로울 수 있지만 상위 디렉토리의 변화에 영향을 받지 않으며 관리가 좀 더 용이합니다.

    • 반대로 파일의 위치가 변경되었을 때 찾을 수 없다는 단점을 가지고 있습니다.

calculator 패키지 만들기

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

  • [ 에러 발생 ]

    from .calculator.add_and_multiply import add_and_multiply
    ImportError: attempted relative import with no known parent package
  • main module에서는 패키지의 모듈을 import 하는 법

    • from .calculator.add_and_multiply import add_and_multiply로 불러들였으나 선언되는 현재 파일의 위치와 동등한 위치에서 가져오는 것이 아니기 때문에 절대 경로로.없이 from calculator.add_and_multiply import add_and_multiply로 가져와야 합니다
  • __init__.py파일의 역할에 대해서

    • __init__.py 해당 디렉토리에 패키지가 있는 것을 알려주는 역할을 합니다.

0개의 댓글