[Python] sys 그리고 sys.module과 sys.path 차이

손종일·2020년 8월 21일
0

Python

목록 보기
11/13
post-thumbnail

라이브러리 (library)

우선 sys가 무엇인지 알아보기 전에 라이브러리에 대해서 간단하게 설명하겠습니다.
전 세계의 파이썬 사용자들이 만든 유용한 프로그램을 모아 놓은 것이 바로 파이썬 라이브러리이다. "라이브러리"는 "도서관"이라는 뜻 그대로 원하는 정보를 찾아보는 곳이다. 모든 라이브러리를 다 알 필요는 없고 어떤 일을 할 때 어떤 라이브러리를 사용해야 한다는 정도만 알면 된다. 그러기 위해 어떤 라이브러리가 존재하고 어떻게 사용하는지 알아야 한다. 자주 사용되고 꼭 알아 두면 좋은 라이브러리를 중심으로 하나씩 살펴보자.

sys (System-specific parameters and functions)

sys는 파이썬에서 제공하는 모듈이다. os모듈안에 있으며 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈이다. C언어로 작성되어 있다. 또한 sys는 built-in 되어 있으므로 bulit-in modules에서 찾을 수 있다.

Python에서는 아래와 같은 순서로 module/package를 찾는다. sys 모듈을 호출하여 내부를 살펴보면 아래와 같다.

sys.modules => built-in modules => sys.path

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.module

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

  • 파이썬이 제일먼저 모듈이나 패키지를 찾는곳
  • 딕셔너리구조
  • import 되있는 모듈과 패키지 저장 (다시 찾지 않아도 됨)

sys.path

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

  • 모듈과 패키지를 1,2를 찾고 마지막으로 sys.path를 찾음
  • 리스트구조(string 요소)
  • 처음의 리스트 요소부터 마지막까지 찾음
  • 파이썬에 포함되어있는 built-in modules
  • sys.path에서도 모듈을 발견하지 못하면 ModuleNotFoundError 에러를 리턴
profile
Allday

0개의 댓글