Module과 Package
모듈은 재사용할 목적으로 작성된 Python 소스 파일을 의미한다. 이런 모듈들 여러개가 모여서 어떤 디렉토리안에 포함된다면 그 디렉토리를 패키지라고 한다.
sys
모듈
공식문서에 따르면 sys
모듈은 다음과 같이 설명되어 있다.(구글 번역😅)
인터프리터에 의해 사용되거나 유지되는 일부 변수와 인터프리터와 강하게 상호작용하는 함수에 대한 엑세스를 제공한다.
즉, Python 인터프리터와 관련된 정보와 기능을 직접 다룰 수 있도록 해주는 모듈이다.
모듈이나 패키지를 import하면 Python은 다음과 같은 우선순위로 모듈/패키지를 찾는다.
sys.modules
- built-in modules
sys.path
1,3은 sys
모듈을 통해 접근할 수 있고 2의 경우 sys.builtin_module_names
를 통해 내장 모듈을 확인할 수 있다. math
, parser
, time
과 같은 모듈이 내장 모듈이고 이런 모듈들은 Python에 내장된 모듈이므로 별도 설치없이 사용이 가능하다. Python언어 자체에 포함되어 있는 내장 모듈도 있고 별도 파일로 존재하는 내장 모듈들도 있다.
1. sys.modules
와 sys.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
확인
확인 결과, sys.modules
에서 첫번째에 'sys':<module 'sys' (built-in)>
으로 나와있는 것을 볼 수 있다. 아마도 builtin 모듈이라는 것을 말해주는 것 같다. 확인을 위해 built-in modules를 확인해보자.
built-in modules 확인
내장 모듈을 확인한 결과 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 |