본문 바로가기

TIL

[TIL] #11. Module&Package

Module과 Package

모듈은 재사용할 목적으로 작성된 Python 소스 파일을 의미한다. 이런 모듈들 여러개가 모여서 어떤 디렉토리안에 포함된다면 그 디렉토리를 패키지라고 한다.

sys모듈

공식문서에 따르면 sys 모듈은 다음과 같이 설명되어 있다.(구글 번역😅)

인터프리터에 의해 사용되거나 유지되는 일부 변수와 인터프리터와 강하게 상호작용하는 함수에 대한 엑세스를 제공한다.

즉, Python 인터프리터와 관련된 정보와 기능을 직접 다룰 수 있도록 해주는 모듈이다.

모듈이나 패키지를 import하면 Python은 다음과 같은 우선순위로 모듈/패키지를 찾는다.

  1. sys.modules
  2. built-in modules
  3. sys.path

1,3은 sys 모듈을 통해 접근할 수 있고 2의 경우 sys.builtin_module_names 를 통해 내장 모듈을 확인할 수 있다. math , parser, time 과 같은 모듈이 내장 모듈이고 이런 모듈들은 Python에 내장된 모듈이므로 별도 설치없이 사용이 가능하다. Python언어 자체에 포함되어 있는 내장 모듈도 있고 별도 파일로 존재하는 내장 모듈들도 있다.

1. sys.modulessys.path 의 차이점

sys.modules

Python에서 모듈이나 패키지를 찾을 때 가장 먼저 찾는 곳으로 dictionary형태로 저장되어있다. 즉, import 로 모듈을 가져올 때 sys.modules 에서 가장 먼저 찾는다. 또한, 한 번 import된 모듈이나 패키지는 기억해뒀다가 다음에 다시 찾을 필요가 없도록 해준다.

sys.path

기본적으로 list형태이고 패키지들의 위치 정보를 string으로 가지고 있다. Python이 모듈을 찾을 때 가장 마지막으로 찾는 곳이다. 이곳에도 찾는 모듈이 없으면 ModuleNotFoundError 를 리턴한다. list형태로 관리되기 때문에 sys.path.append() 와 같은 형태로 직접 모듈 경로를 추가하는 것도 가능하다.

2. sys 모듈의 위치를 찾는 법

모듈과 패키지의 위치는 위에서 말한 3곳에서 찾을 수 있다고 했다. 각 위치에 있는 모듈을 살펴보고 sys 모듈이 어디에 저장되어 있는지 보면 Python이 어떻게 sys 모듈의 위치를 찾아오는지 알 수 있을 것이다.

sys.modules 확인

Screen Shot 2021-03-23 at 15.19.13

확인 결과, sys.modules 에서 첫번째에 'sys':<module 'sys' (built-in)> 으로 나와있는 것을 볼 수 있다. 아마도 builtin 모듈이라는 것을 말해주는 것 같다. 확인을 위해 built-in modules를 확인해보자.

built-in modules 확인

Screen Shot 2021-03-23 at 15.24.16

내장 모듈을 확인한 결과 sys모듈이 있다. 즉, sys모듈은 Python인터프리터에 내장된 모듈이다.

결과적으로, 만약에 sys 모듈이 import된 적이 없다면 built-in modules에서 찾을 것이고 한 번 imort를 했으면 sys.modules에 저장되어 다음에 import할 때는 sys.modules 에서 찾아서 import 할 것이다. 나의 경우 이전에 sys모듈을 import한 적이 있으므로 sys.modules에 저장되어 있는 것으로 보인다.

'TIL' 카테고리의 다른 글

[TIL] #13. __init__.py  (0) 2021.03.23
[TIL] #12. Absolute path & Relative path  (0) 2021.03.23
[TIL] #10. Function Parameters  (0) 2021.03.21
[TIL] #9. Python 기초 문법  (0) 2021.03.19
[TIL] #8. HTML&CSS - 레이아웃  (0) 2021.03.17