module 관련

riassuc·2021년 5월 16일
0

1. Import search 순서

1-1. sys.modules

파이썬에서 모듈이나 패키지를 임포트 하면 가장 먼저 sys.modules를 확인한다. 한 번 이상 사용되었거나 이미 내장되어 있는 모듈이나 패키지만 저장되어 있고 형태는 dictionary이다.

1-2. built-in modules

파이썬에서 기본적으로 제공하는 공식 라이브러리들로, 이미 포함되어 있어서 파이썬이 쉽게 찾을 수 있다.

1-3. sys.path

앞의 sys.modules built-in modules을 확인 후 없다면 마지막으로 확인하는 곳이 sys.path이다. sys.path는 string 요소들을 가지고 있는 list이다. 임포트 하고자 하는 모듈이나 패키지가 list의 각 경로에 위치해 있는지 확인하고 만약 sys.path에도 없다면 ModuleNotFoundError 에러를 반환한다.

sys.modulessys.path는 모두 임포트 하려는 모듈, 패키지가 위치하는지 확인하는 경로지만 전자는 이미 임포트 되어있는것들만 위치해 있고 dictionary 형태지만 후자는 list 형태이다.

sys.path는 list 이므로 sys 모듈을 임포트해서 append()메소드를 사용해서 새로운 라이브러리 경로를 추가 할 수 있다.


2. 파이썬이 sys 모듈의 위치를 찾는 방법

sys모듈은 파이썬에 내장되어 있는 모듈이기 때문에 sys.modules에서 확인 할 수 있다.

import sys
print(sys.modules)
#실행결과{'sys': <module 'sys' (built-in)>, ...}

즉 파이썬에서 sys 모듈을 임포트할때 sys.modules을 통해 위치를 확인한다.


3. Absolute path, Relative path

└─ my_app.py
   │  ├── main.py
   │  ├── package1
   │  ├── module1.py
   │  └── module2.py
   └── package2
       ├── __init__.py
       ├── module3.py
       ├── module4.py
       └── subpackage1
                └── module5

이렇게 현재 my_app이라는 프로젝트가 있을 때, 절대 경로(absolute apth)는 항상 프로젝트의 current directory 로 부터 경로를 시작하고 상대 경로(Relative path)는 임포트하는 위치를 기준으로 시작한다.

current directory 라고 하는 현재의 프로젝트 디렉토리는 기본적으로 sys.path 에 포함되어 있다.

절대 경로를 사용하면 경로가 길어질 수 있다. 그래서 이 점을 보완하기 위해 상대 경로를 사용 할 수 있지만 헷갈리기 쉽고 파일 위치가 달라지면 경로를 다시 수정해야 하기 때문에 웬만한 경우 절대 경로를 사용하는게 권장된다.


profile
riassuc

0개의 댓글