[Python] How Import statements find modules and packages

Yerin·2019년 12월 10일
0

study-python

목록 보기
13/18

파이썬은 모듈/package를 어떻게 찾을까요?
파이썬은 다음 3가지 장소를 순서대로 보면서 찾습니다.

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

sys.module / sys.path

  • sys.module 은 파이썬이 모듈이나 package를 찾기위해 가장 먼저 확인하는 곳입니다. 이미 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 에러를 리턴합니다.

스크린샷, 2019-12-10 13-41-31.png
ref: https://devanix.tistory.com/300

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

절대 경로 Absolute Path

  • 최상위 디렉토리는 / 이며 최상위 디렉토리부터 파일명에 이르는 경로를 절대 경로라고 한다
  • 어떠한 OS/ 웹페이지/파일이 가지고있는 고유한 경로
    ex) C:\Users\내PC\Desktop\빵집\예제.txt

상대 경로 Relative Path

  • 현재 내가 위치한 디렉토리를 기준으로 하는 경로를 상대경로라고 한다.
  • 내가 A의 폴더나 B의 폴더로 들어갔을때 마다 위치가 바뀌는 경로
  • 현재 디렉토리를 의미하는 ./ 는 생략가능.
    ex)
./는 현재 디렉토리,

../는 상위 디렉토리

C:\Users\내PC\Desktop\빵집\예제.txt 에서
C:\Users\내PC\Desktop\고기집\예제.txt 를 간다고하였을떄
../ 을 해주면 빵집 ../../ 을 해주면 desktop으로 들어오게됨. 그이후 진행하면된다. 

*TIP- 파일명과 파일이 위치한 디렉토리의 경로를 따로 인식하기 보다는,
파일이 속한 디렉토리 경로까지 파일명으로 인식하는 것이 좋음.

profile
졸꾸 !!!

0개의 댓글