sys.modules와 sys.path의 차이점

Ju Seol·2021년 6월 9일
0

sys.modulessys.path 모두 해당 파일이나 디렉토리가 어디있는지 파이썬이 찾을 순서에 대한 내용이다.

sys.modules

파이썬이 모듈이나 package를 찾기 위해 가장 먼저 확인하는 곳이다.
sys.modules는 단순한 dictionary이고 이미 import된 모듈과 package들을 저장하고 있다.
즉, 한번 import된 모듈과 package들은 파이썬이 또 다시 찾지 않아도 되도록 하는 기능을 가지고 있다.
그렇기때문에 새로 import하는 모듈은 sys.modules에서 찾을수 없다.

sys.path

파이썬이 마지막으로 보는 장소가 sys.path이다.
sys.path는 기본적으로 list이며 string 요소들을 가지고 있는 list이다.
각 string 요소들은 다음 처럼 경로를 나타낸다.

['',
 '/Users/song-eun-u/anaconda3/bin',
 '/Users/song-eun-u/anaconda3/lib/python36.zip',
 '/Users/song-eun-u/anaconda3/lib/python3.6',
 '/Users/song-eun-u/anaconda3/lib/python3.6/lib-dynload',
 '/Users/song-eun-u/anaconda3/lib/python3.6/site-packages',
 '/Users/song-eun-u/anaconda3/lib/python3.6/site-packages/aeosa',
 '/Users/song-eun-u/anaconda3/lib/python3.6/site-packages/IPython/extensions',
 '/Users/song-eun-u/.ipython']

그러므로 파이썬은 list의 각 경로를 하나 하나 확인하면서 해당 경로에 import 하고자 하는 package가 위치해 있는지 확인한다.

참고로 sys 는 파이썬에 포함되어 있는 모듈이다. 그러므로 다음 처럼 sys 모듈을 import 해서 sys.modulessys.path 를 출력할수도 있고 수정 할 수 도 있다.

import sys


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

정리를 하자면, 파이썬은 import 하고자 하는 모듈과 package를 찾을때에 먼저 sys.modules를 보고, 없으면 파이썬 built-in 모듈들을 확인 하고 마지막으로 sys.path에 지정되어 있는 경로들을 확인해서 찾는다.

sys.path 에서도 못찾으면 ModuleNotFoundError 에러를 리턴한다.

profile
Hello!

0개의 댓글