sys.modules 와 sys.path의 차이점.
sys.modules 와 sys.path의 차이점을 알려면
각각 무슨 의미를 가지고 있는지 알아야한다.
※우선 import search 순서는
sys.modules -> built-in modules -> sys.path
순으로 파일을 서치한다.
sys.modules와 sys.path의 개념
- 1.sys.modules
+파이썬이 모듈이나 package를 찾기위해 가장 먼저 확인하는 곳이다.
+sys.modules은 단순한 dictionary형태로 되어있다.
+이미 import된 모듈과 package를 저장하고 있다.
+import가 되어있는 모듈과 패키지의 경로가 저장되어 있어 다시 찾지 않아도 된다.
- 2.sys.path
+먼저 module찾고 그다음 package를 찾고 마지막으로 sys.path를 찾는다.
+sys.path는 기본적으로 list이며 str 요소들을 가지고 있다
+sys.path에서도 module을 발견하지 못하면 ModuleNotFoundError 에러를 리턴한다.
sys 도 import 해야하는 모듈입니다.
파이썬은 sys 모듈의 위치를 어떻게 찾을 수 있을까요?
- 파이썬에 포함되어 있는 내장 모듈이고 파이썬 설치시 기본적으로 내장 모듈에 대한 path정보가 default 값으로 지정되어있다.
- Sys 모듈도 python에 내장된 built-in 모듈중 하나이므로 경로 검색순서에 따라 쉽게 찾을 수 있다.
즉 sys도 외부에서 가져와야 하는 값이지만 이미 파이썬에
기본적으로 있으므로 위의 import search순서를 지켜서 위치를 찾는 것이다.
Absolute path와 relative path의 차이점을 서술해 주세요.
- Absolute path
- 최상단 디렉토리를 기준으로 path 설정한다.
- 최상단부터 경로를 표시하기 때문에 경로를 길게 표시해야해서 가독성이 좋지 않다.
- Relative path
- 실행파일이 위치한 디렉토리를 기준으로 path를 설정한다.
- 경로의 길이를 줄여주지만 헷갈리기 쉽다.
- 파일의 위치가 변경되면 경로 위치도 변경해야한다.
- absolute path를 사용하는 걸 더 권장한다.
init.py 파일의 역할
init.py 파일은 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다. 만약 game, sound, graphic 등 패키지에 포함된 디렉터리에 init.py 파일이 없다면 패키지로 인식되지 않는다.
※ python3.3 버전부터는 init.py 파일이 없어도 패키지로 인식한다(PEP 420). 하지만 하위 버전 호환을 위해 init.py 파일을 생성하는 것이 안전한 방법이다.
출처
https://wikidocs.net/1418