import a
위의 코드와 같이 우리가 필요한 모듈과 패키지를 받고자 할 때, 파이썬에서는 우리가 호출한 모듈과 패키지를 어떻게 찾는지에 대해서 알아보았다.
파이썬은 아래의 순서에 따라서 호출한 모듈 또는 패키지를 찾는다.
sys.modules
built-in modules
sys.path
그 중에서 SYS 모듈에 대해서 알아보고자 한다.
sys 모듈은 파이썬에서 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈이다. sys 모듈 또한 파이썬에 저장되어 있는 하나의 모듈이며 사용하려면 항상 아래의 코드처럼 불러와야 한다.
import sys
sys 모듈을 실행하면 다음과 같이 나온다.
import sys >> print(sys.modlues) {'sys': <module 'sys' (built-in)>, 'builtins': <module 'builtins' (built-in)>, '_frozen_importlib': <module 'importlib._bootstrap' (frozen)>, '_imp': <module '_imp' (built-in)>, '_thread': <module '_thread' (built-in)>, '_warnings': <module '_warnings' (built-in)>, '_weakref': <module '_weakref' (built-in)>, 'zipimport': <module 'zipimport' (built-in)>, '_frozen_importlib_external': <module 'importlib._bootstrap_external' (frozen)>, '_io': <module 'io' (built-in)>, 'marshal': <module 'marshal' (built-in)>, 'posix': <module 'posix' (built-in)>, 'encodings': <module 'encodings' from .... '/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/rlcompleter.py'>, 'mod1': <module 'mod1' from '/Users/YB/Google 드라이브/TIL/Documents/Python/mod1.py'>}
파이썬이 사용자가 호출한 모듈 및 패키지를 가장 처음으로 찾아보는 곳이다. sys.modules은 단순한 딕셔너리 형태이며 이미 import된 함수나 모듈을 저장하는 공간으로 새롭게 import를 원하는 경우에는 이 모듈에서 찾을 수 없다. 한번 import된 모듈이나 패키지를 저장하며 파이썬이 해당 모듈 및 패키지를 다시 찾지 않도록 하는 기능이 있다.
sys.path는 디렉토리에 경로들이 기록된 문자열 리스트이다. 사용자가 모듈 및 함수를 호출 할 경우 마지막으로 찾아보는 곳이다. 리스트에 들어있는 경로들을 탐색하며 리스트에 들어있는 맨 처음 경로부터 탐색을 시작한다. 특정 경로에서 불러올 파일을 찾았다면 남은 경로를 더 찾아보지 않고 탐색을 중지한다. sys.path에서도 모듈 및 함수를을 발견하지 못하면 ModuleNotFoundError 에러를 리턴한다.
import sys
sys.path.append("/opt")
import common
위의 코드를 살펴보면 sys.path.append("/opt")를 통해 /opt 디렉터리를 추가했고, 이로 인해 /opt/common.py를 import할 수 있게 된다.