sys.modules
와 sys.path
모두 해당 파일이나 디렉토리가 어디있는지 파이썬이 찾을 순서에 대한 내용이다.
파이썬이 모듈이나 package를 찾기 위해 가장 먼저 확인하는 곳이다.
sys.modules
는 단순한 dictionary이고 이미 import된 모듈과 package들을 저장하고 있다.
즉, 한번 import된 모듈과 package들은 파이썬이 또 다시 찾지 않아도 되도록 하는 기능을 가지고 있다.
그렇기때문에 새로 import하는 모듈은 sys.modules
에서 찾을수 없다.
파이썬이 마지막으로 보는 장소가 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.modules
와 sys.path
를 출력할수도 있고 수정 할 수 도 있다.
import sys
print(sys.path)
print(sys.modules)
정리를 하자면, 파이썬은 import 하고자 하는 모듈과 package를 찾을때에 먼저 sys.modules
를 보고, 없으면 파이썬 built-in 모듈들을 확인 하고 마지막으로 sys.path
에 지정되어 있는 경로들을 확인해서 찾는다.
sys.path 에서도 못찾으면 ModuleNotFoundError
에러를 리턴한다.