당신의 친절한 이웃, 코딩맨

#16 Python module 과 package를 python은 어떻게 찾을까? 본문

Today I Learn (TIL)

#16 Python module 과 package를 python은 어떻게 찾을까?

이웃집 친구 2020. 6. 28. 17:28
반응형

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

 

sys는 파이썬에 포함되어있는 모듈이다. 

sys.modules와 sys.path를 출력할 수도 있고, 수정 가능하다.

import sys

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

 

sys.modules

파이썬이 모듈이나 package를 찾기 위해 가장 먼저 확인하는 곳인데, sys.modules는 단순한 dictionary이다.

그리고 이미 import 된 모듈과 package들을 저장하고 있다.

즉, 한번 import된 모듈과 package들은 파이썬이 또다시 찾지 않아도 되도록 하는 기능을 가지고 있다.

그러므로 새로 import 하는 모듈은 sys.modules 에서 찾을 수 없다.

 

sys.path

 

파이썬은 module과 package를 찾는 순서가 있는데,

1. sys.module을 보고, 

2. built-in modules를 찾아본 다음에,

3. sys.path를 본다

4. sys.path에서도 못 찾으면ModuleNotFoundError 에러를 리턴하게 된다

 

마지막으로 보는 장소인 sys.path느 기본적으로 list로 되어있고, string요소들을 가지고 있다.

 

 

2. sys 모듈의 위치를 어떻게 찾을 수 있을까?

sys.modules는 파이썬이 module과 package를 찾기 위해 가장 먼저 둘러보는 곳이다.

sys.module은 이미 built-in 되어 있기 때문에, built-in module들이 잇는 부분에서 찾게 된다.

 

※ 여기서 built-in module은 파이썬에 기본적으로 내장돼있는 모듈이다.

 

'sys': <module 'sys' (built-in)>

 

 

3. Absolute path와 relative path의 차이점

 

Absolute path

모듈 빛 패키지의 시작부터 끝까지 생략이나 축약되지 않고 명확히 명시된 경로를 뜻한다.

사용할 때 정확히 경로를 지정해놓고 사용하기 때문에, 혼동되지 않는 장점이 있다.

 

pkg라는 폴더에 mod1의 func1 모듈을 불러올 때:


from pkg.mod1 import func1

#혹은

import pkg.mod1.func1

 

Relative path

relative path는 자기가 속한 경로를 기준으로 상위 폴더는 '..'으로 이동하는 개념이고

'.'은 현재 속해있는 디렉터리를 고를 때 사용된다.

from ..mod2 import func2

from . import module2

from .pkg2.module2 import func2

#한 폴더씩 이동하고 그 폴더의 현 디렉토리 py파일 즉, 모듈을 가져오는 방식; relative path

 

 

 

Comments